diff --git a/README-ORIG.md b/README-ORIG.md index 22ffea737d..9ab9783fcf 100644 --- a/README-ORIG.md +++ b/README-ORIG.md @@ -1,4 +1,4 @@ -# Signal Android +# Signal Android Signal is a simple, powerful, and secure messenger. @@ -54,7 +54,7 @@ The form and manner of this distribution makes it eligible for export under the ## License -Copyright 2013-2022 Signal +Copyright 2013-2024 Signal Messenger, LLC Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d3f05774ca..342fd6d61a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,8 +19,8 @@ apply { from("fix-profm.gradle") } -val canonicalVersionCode = 1396 -val canonicalVersionName = "7.0.2" +val canonicalVersionCode = 1399 +val canonicalVersionName = "7.1.2" val mollyRevision = 1 val postFixSize = 100 @@ -187,7 +187,6 @@ android { buildConfigField("int", "CONTENT_PROXY_PORT", "443") buildConfigField("String", "SIGNAL_AGENT", "\"OWA\"") buildConfigField("String", "CDSI_MRENCLAVE", "\"0f6fd79cdfdaa5b2e6337f534d3baf999318b0c462a7ac1f41297a3e4b424a57\"") - buildConfigField("String", "SVR2_MRENCLAVE_DEPRECATED", "\"6ee1042f9e20f880326686dd4ba50c25359f01e9f733eeba4382bca001d45094\"") buildConfigField("String", "SVR2_MRENCLAVE", "\"a6622ad4656e1abcd0bc0ff17c229477747d2ded0495c4ebee7ed35c1789fa97\"") buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF\"") buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0I=\"") @@ -198,6 +197,7 @@ android { buildConfigField("String", "GIPHY_API_KEY", "\"3o6ZsYH6U6Eri53TXy\"") buildConfigField("String", "SIGNAL_CAPTCHA_URL", "\"https://signalcaptchas.org/registration/generate.html\"") buildConfigField("String", "RECAPTCHA_PROOF_URL", "\"https://signalcaptchas.org/challenge/generate.html\"") + buildConfigField("org.signal.libsignal.net.Network.Environment", "LIBSIGNAL_NET_ENV", "org.signal.libsignal.net.Network.Environment.PRODUCTION") // MOLLY: Rely on the built-in variables FLAVOR and BUILD_TYPE instead of BUILD_*_TYPE buildConfigField("String", "BADGE_STATIC_ROOT", "\"https://updates2.signal.org/static/badges/\"") @@ -333,7 +333,6 @@ android { 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_DEPRECATED", "\"a8a261420a6bb9b61aa25bf8a79e8bd20d7652531feb3381cbffd446d270be95\"") buildConfigField("String", "SVR2_MRENCLAVE", "\"acb1973aa0bbbd14b3b4e06f145497d948fd4a98efc500fcce363b3b743ec482\"") buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx\"") buildConfigField("String", "ZKGROUP_SERVER_PUBLIC_PARAMS", "\"ABSY21VckQcbSXVNCGRYJcfWHiAMZmpTtTELcDmxgdFbtp/bWsSxZdMKzfCp8rvIs8ocCU3B37fT3r4Mi5qAemeGeR2X+/YmOGR5ofui7tD5mDQfstAI9i+4WpMtIe8KC3wU5w3Inq3uNWVmoGtpKndsNfwJrCg0Hd9zmObhypUnSkfYn2ooMOOnBpfdanRtrvetZUayDMSC5iSRcXKpdlukrpzzsCIvEwjwQlJYVPOQPj4V0F4UXXBdHSLK05uoPBCQG8G9rYIGedYsClJXnbrgGYG3eMTG5hnx4X4ntARBgELuMWWUEEfSK0mjXg+/2lPmWcTZWR9nkqgQQP0tbzuiPm74H2wMO4u1Wafe+UwyIlIT9L7KLS19Aw8r4sPrXZSSsOZ6s7M1+rTJN0bI5CKY2PX29y5Ok3jSWufIKcgKOnWoP67d5b2du2ZVJjpjfibNIHbT/cegy/sBLoFwtHogVYUewANUAXIaMPyCLRArsKhfJ5wBtTminG/PAvuBdJ70Z/bXVPf8TVsR292zQ65xwvWTejROW6AZX6aqucUjlENAErBme1YHmOSpU6tr6doJ66dPzVAWIanmO/5mgjNEDeK7DDqQdB1xd03HT2Qs2TxY3kCK8aAb/0iM0HQiXjxZ9HIgYhbtvGEnDKW5ILSUydqH/KBhW4Pb0jZWnqN/YgbWDKeJxnDbYcUob5ZY5Lt5ZCMKuaGUvCJRrCtuugSMaqjowCGRempsDdJEt+cMaalhZ6gczklJB/IbdwENW9KeVFPoFNFzhxWUIS5ML9riVYhAtE6JE5jX0xiHNVIIPthb458cfA8daR0nYfYAUKogQArm0iBezOO+mPk5vCM=\"") @@ -342,6 +341,7 @@ android { buildConfigField("String", "MOBILE_COIN_ENVIRONMENT", "\"testnet\"") buildConfigField("String", "SIGNAL_CAPTCHA_URL", "\"https://signalcaptchas.org/staging/registration/generate.html\"") buildConfigField("String", "RECAPTCHA_PROOF_URL", "\"https://signalcaptchas.org/staging/challenge/generate.html\"") + buildConfigField("org.signal.libsignal.net.Network.Environment", "LIBSIGNAL_NET_ENV", "org.signal.libsignal.net.Network.Environment.STAGING") buildConfigField("String", "BUILD_ENVIRONMENT_TYPE", "\"Staging\"") buildConfigField("String", "STRIPE_PUBLISHABLE_KEY", "\"pk_test_sngOd8FnXNkpce9nPXawKrJD00kIDngZkD\"") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt index ec62e890e4..f7164a0eae 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/SignalInstrumentationApplicationContext.kt @@ -40,4 +40,18 @@ class SignalInstrumentationApplicationContext : ApplicationContext() { LogDatabase.getInstance(this).logs.trimToSize() } } + + override fun beginJobLoop() = Unit + + /** + * Some of the jobs can interfere with some of the instrumentation tests. + * + * For example, we may try to create a release channel recipient while doing + * an import/backup test. + * + * This can be used to start the job loop if needed for tests that rely on it. + */ + fun beginJobLoopForTests() { + super.beginJobLoop() + } } 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 new file mode 100644 index 0000000000..c56c04f2fb --- /dev/null +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt @@ -0,0 +1,604 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2 + +import okio.ByteString.Companion.toByteString +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.signal.libsignal.zkgroup.profiles.ProfileKey +import org.thoughtcrime.securesms.backup.v2.proto.AccountData +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo +import org.thoughtcrime.securesms.backup.v2.proto.Call +import org.thoughtcrime.securesms.backup.v2.proto.Chat +import org.thoughtcrime.securesms.backup.v2.proto.ChatItem +import org.thoughtcrime.securesms.backup.v2.proto.Contact +import org.thoughtcrime.securesms.backup.v2.proto.DistributionList +import org.thoughtcrime.securesms.backup.v2.proto.Frame +import org.thoughtcrime.securesms.backup.v2.proto.Group +import org.thoughtcrime.securesms.backup.v2.proto.Recipient +import org.thoughtcrime.securesms.backup.v2.proto.ReleaseNotes +import org.thoughtcrime.securesms.backup.v2.proto.Self +import org.thoughtcrime.securesms.backup.v2.proto.StickerPack +import org.thoughtcrime.securesms.backup.v2.stream.EncryptedBackupReader +import org.thoughtcrime.securesms.backup.v2.stream.EncryptedBackupWriter +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.whispersystems.signalservice.api.push.DistributionId +import org.whispersystems.signalservice.api.push.ServiceId +import org.whispersystems.signalservice.api.subscriptions.SubscriberId +import org.whispersystems.signalservice.api.util.toByteArray +import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream +import java.util.ArrayList +import java.util.UUID +import kotlin.random.Random +import kotlin.time.Duration.Companion.days + +/** + * Test the import and export of message backup frames to make sure what + * goes in, comes out. + */ +class ImportExportTest { + companion object { + val SELF_ACI = ServiceId.ACI.from(UUID.fromString("77770000-b477-4f35-a824-d92987a63641")) + val SELF_PNI = ServiceId.PNI.from(UUID.fromString("77771111-b014-41fb-bf73-05cb2ec52910")) + const val SELF_E164 = "+10000000000" + val SELF_PROFILE_KEY = ProfileKey(Random.nextBytes(32)) + + val defaultBackupInfo = BackupInfo(version = 1L, backupTimeMs = 123456L) + val selfRecipient = Recipient(id = 1, self = Self()) + val releaseNotes = Recipient(id = 2, releaseNotes = ReleaseNotes()) + val standardAccountData = AccountData( + profileKey = SELF_PROFILE_KEY.serialize().toByteString(), + username = "testusername", + usernameLink = null, + givenName = "Peter", + familyName = "Parker", + avatarUrlPath = "https://example.com/", + subscriberId = SubscriberId.generate().bytes.toByteString(), + subscriberCurrencyCode = "USD", + subscriptionManuallyCancelled = true, + accountSettings = AccountData.AccountSettings( + readReceipts = true, + sealedSenderIndicators = true, + typingIndicators = true, + linkPreviews = true, + notDiscoverableByPhoneNumber = true, + preferContactAvatars = true, + universalExpireTimer = 42, + displayBadgesOnProfile = true, + keepMutedChatsArchived = true, + hasSetMyStoriesPrivacy = true, + hasViewedOnboardingStory = true, + storiesDisabled = true, + storyViewReceiptsEnabled = true, + hasSeenGroupStoryEducationSheet = true, + hasCompletedUsernameOnboarding = true, + phoneNumberSharingMode = AccountData.PhoneNumberSharingMode.EVERYBODY, + preferredReactionEmoji = listOf("a", "b", "c") + ) + ) + + /** + * When using standardFrames you must start recipient ids at 3. + */ + private val standardFrames = arrayOf(defaultBackupInfo, standardAccountData, selfRecipient, releaseNotes) + } + + @Before + fun setup() { + SignalStore.account().setE164(SELF_E164) + SignalStore.account().setAci(SELF_ACI) + SignalStore.account().setPni(SELF_PNI) + SignalStore.account().generateAciIdentityKeyIfNecessary() + SignalStore.account().generatePniIdentityKeyIfNecessary() + } + + @Test + fun accountAndSelf() { + importExport(*standardFrames) + } + + @Test + fun individualRecipients() { + importExport( + *standardFrames, + Recipient( + id = 3, + contact = Contact( + aci = TestRecipientUtils.nextAci().toByteString(), + pni = TestRecipientUtils.nextPni().toByteString(), + username = "coolusername", + e164 = 141255501234, + blocked = true, + hidden = true, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Alexa", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 4, + contact = Contact( + aci = null, + pni = null, + username = null, + e164 = 141255501235, + blocked = true, + hidden = true, + registered = Contact.Registered.NOT_REGISTERED, + unregisteredTimestamp = 1234568927398L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = false, + profileGivenName = "Peter", + profileFamilyName = "Kim", + hideStory = true + ) + ) + ) + } + + @Test + fun groupRecipients() { + importExport( + *standardFrames, + Recipient( + id = 3, + group = Group( + masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(), + whitelisted = true, + hideStory = true, + storySendMode = Group.StorySendMode.ENABLED, + name = "Cool test group" + ) + ), + Recipient( + id = 4, + group = Group( + masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(), + whitelisted = false, + hideStory = false, + storySendMode = Group.StorySendMode.DEFAULT, + name = "Cool test group" + ) + ) + ) + } + + @Test + fun distributionListRecipients() { + importExport( + *standardFrames, + Recipient( + id = 3, + contact = Contact( + aci = TestRecipientUtils.nextAci().toByteString(), + pni = TestRecipientUtils.nextPni().toByteString(), + username = "coolusername", + e164 = 141255501234, + blocked = true, + hidden = true, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Alexa", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 4, + contact = Contact( + aci = null, + pni = null, + username = null, + e164 = 141255501235, + blocked = true, + hidden = true, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Peter", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 5, + contact = Contact( + aci = null, + pni = null, + username = null, + e164 = 141255501236, + blocked = true, + hidden = true, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Father", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 6, + distributionList = DistributionList( + name = "Kim Family", + distributionId = DistributionId.create().asUuid().toByteArray().toByteString(), + allowReplies = true, + deletionTimestamp = 0L, + privacyMode = DistributionList.PrivacyMode.ONLY_WITH, + memberRecipientIds = listOf(3, 4, 5) + ) + ) + ) + } + + @Test + fun deletedDistributionList() { + val alexa = Recipient( + id = 3, + contact = Contact( + aci = TestRecipientUtils.nextAci().toByteString(), + pni = TestRecipientUtils.nextPni().toByteString(), + username = "coolusername", + e164 = 141255501234, + blocked = true, + hidden = true, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Alexa", + profileFamilyName = "Kim", + hideStory = true + ) + ) + import( + *standardFrames, + alexa, + Recipient( + id = 6, + distributionList = DistributionList( + name = "Deleted list", + distributionId = DistributionId.create().asUuid().toByteArray().toByteString(), + allowReplies = true, + deletionTimestamp = 12345L, + privacyMode = DistributionList.PrivacyMode.ONLY_WITH, + memberRecipientIds = listOf(3) + ) + ) + ) + val exported = export() + val expected = exportFrames( + *standardFrames, + alexa + ) + compare(expected, exported) + } + + @Test + fun chatThreads() { + importExport( + *standardFrames, + Recipient( + id = 3, + contact = Contact( + aci = TestRecipientUtils.nextAci().toByteString(), + pni = TestRecipientUtils.nextPni().toByteString(), + username = "coolusername", + e164 = 141255501234, + blocked = false, + hidden = false, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Alexa", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 4, + group = Group( + masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(), + whitelisted = true, + hideStory = true, + storySendMode = Group.StorySendMode.DEFAULT, + 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 + ) + ) + } + + @Test + fun calls() { + val individualCalls = ArrayList() + val groupCalls = ArrayList() + val states = arrayOf(Call.State.MISSED, Call.State.COMPLETED, Call.State.DECLINED_BY_USER, Call.State.DECLINED_BY_NOTIFICATION_PROFILE) + val types = arrayOf(Call.Type.VIDEO_CALL, Call.Type.AD_HOC_CALL, Call.Type.AUDIO_CALL) + var id = 1L + var timestamp = 12345L + + for (state in states) { + for (type in types) { + individualCalls.add( + Call( + callId = id++, + conversationRecipientId = 3, + type = type, + state = state, + timestamp = timestamp++, + ringerRecipientId = 3, + outgoing = true + ) + ) + individualCalls.add( + Call( + callId = id++, + conversationRecipientId = 3, + type = type, + state = state, + timestamp = timestamp++, + ringerRecipientId = selfRecipient.id, + outgoing = false + ) + ) + } + groupCalls.add( + Call( + callId = id++, + conversationRecipientId = 4, + type = Call.Type.GROUP_CALL, + state = state, + timestamp = timestamp++, + ringerRecipientId = 3, + outgoing = true + ) + ) + groupCalls.add( + Call( + callId = id++, + conversationRecipientId = 4, + type = Call.Type.GROUP_CALL, + state = state, + timestamp = timestamp++, + ringerRecipientId = selfRecipient.id, + outgoing = false + ) + ) + } + + importExport( + *standardFrames, + Recipient( + id = 3, + contact = Contact( + aci = TestRecipientUtils.nextAci().toByteString(), + pni = TestRecipientUtils.nextPni().toByteString(), + username = "coolusername", + e164 = 141255501234, + blocked = false, + hidden = false, + registered = Contact.Registered.REGISTERED, + unregisteredTimestamp = 0L, + profileKey = TestRecipientUtils.generateProfileKey().toByteString(), + profileSharing = true, + profileGivenName = "Alexa", + profileFamilyName = "Kim", + hideStory = true + ) + ), + Recipient( + id = 4, + group = Group( + masterKey = TestRecipientUtils.generateGroupMasterKey().toByteString(), + whitelisted = true, + hideStory = true, + storySendMode = Group.StorySendMode.DEFAULT, + name = "Cool test group" + ) + ), + *individualCalls.toArray(), + *groupCalls.toArray() + ) + } + + /** + * Export passed in frames as a backup. Does not automatically include + * any standard frames (e.g. backup header). + */ + private fun exportFrames(vararg objects: Any): ByteArray { + val outputStream = ByteArrayOutputStream() + val writer = EncryptedBackupWriter( + key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(), + aci = SignalStore.account().aci!!, + outputStream = outputStream, + append = { mac -> outputStream.write(mac) } + ) + + writer.use { + for (obj in objects) { + when (obj) { + is BackupInfo -> writer.write(obj) + is AccountData -> writer.write(Frame(account = obj)) + is Recipient -> writer.write(Frame(recipient = obj)) + is Chat -> writer.write(Frame(chat = obj)) + is ChatItem -> writer.write(Frame(chatItem = obj)) + is Call -> writer.write(Frame(call = obj)) + is StickerPack -> writer.write(Frame(stickerPack = obj)) + else -> Assert.fail("invalid object $obj") + } + } + } + return outputStream.toByteArray() + } + + /** + * Exports the passed in frames as a backup and then attempts to + * import them. + */ + private fun import(vararg objects: Any) { + val importData = exportFrames(*objects) + BackupRepository.import(length = importData.size.toLong(), inputStreamFactory = { ByteArrayInputStream(importData) }, selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY)) + } + + /** + * Export our current database as a backup. + */ + private fun export() = BackupRepository.export() + + /** + * Imports the passed in frames and then exports them. + * + * It will do a comparison to assert that the import and export + * are equal. + */ + private fun importExport(vararg objects: Any) { + val outputStream = ByteArrayOutputStream() + val writer = EncryptedBackupWriter( + key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(), + aci = SignalStore.account().aci!!, + outputStream = outputStream, + append = { mac -> outputStream.write(mac) } + ) + + writer.use { + for (obj in objects) { + when (obj) { + is BackupInfo -> writer.write(obj) + is AccountData -> writer.write(Frame(account = obj)) + is Recipient -> writer.write(Frame(recipient = obj)) + is Chat -> writer.write(Frame(chat = obj)) + is ChatItem -> writer.write(Frame(chatItem = obj)) + is Call -> writer.write(Frame(call = obj)) + is StickerPack -> writer.write(Frame(stickerPack = obj)) + else -> Assert.fail("invalid object $obj") + } + } + } + val importData = outputStream.toByteArray() + BackupRepository.import(length = importData.size.toLong(), inputStreamFactory = { ByteArrayInputStream(importData) }, selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY)) + + val export = export() + compare(importData, export) + } + + private fun compare(import: ByteArray, export: ByteArray) { + val selfData = BackupRepository.SelfData(SELF_ACI, SELF_PNI, SELF_E164, SELF_PROFILE_KEY) + val framesImported = readAllFrames(import, selfData) + val framesExported = readAllFrames(export, selfData) + + compareFrameList(framesImported, framesExported) + } + + private fun compareFrameList(framesImported: List, framesExported: List) { + val accountExported = ArrayList() + val accountImported = ArrayList() + val recipientsImported = ArrayList() + val recipientsExported = ArrayList() + val chatsImported = ArrayList() + val chatsExported = ArrayList() + val chatItemsImported = ArrayList() + val chatItemsExported = ArrayList() + val callsImported = ArrayList() + val callsExported = ArrayList() + val stickersImported = ArrayList() + val stickersExported = ArrayList() + + for (f in framesImported) { + when { + f.account != null -> accountExported.add(f.account!!) + f.recipient != null -> recipientsImported.add(f.recipient!!) + f.chat != null -> chatsImported.add(f.chat!!) + f.chatItem != null -> chatItemsImported.add(f.chatItem!!) + f.call != null -> callsImported.add(f.call!!) + f.stickerPack != null -> stickersImported.add(f.stickerPack!!) + } + } + + for (f in framesExported) { + when { + f.account != null -> accountImported.add(f.account!!) + f.recipient != null -> recipientsExported.add(f.recipient!!) + f.chat != null -> chatsExported.add(f.chat!!) + f.chatItem != null -> chatItemsExported.add(f.chatItem!!) + f.call != null -> callsExported.add(f.call!!) + f.stickerPack != null -> stickersExported.add(f.stickerPack!!) + } + } + prettyAssertEquals(accountImported, accountExported) + prettyAssertEquals(recipientsImported, recipientsExported) { it.id } + prettyAssertEquals(chatsImported, chatsExported) { it.id } + prettyAssertEquals(chatItemsImported, chatItemsExported) + prettyAssertEquals(callsImported, callsExported) { it.callId } + prettyAssertEquals(stickersImported, stickersExported) { it.packId } + } + + private fun prettyAssertEquals(import: List, export: List) { + Assert.assertEquals(import.size, export.size) + import.zip(export).forEach { (a1, a2) -> + if (a1 != a2) { + Assert.fail("Items do not match: \n $a1 \n $a2") + } + } + } + + private fun > prettyAssertEquals(import: List, export: List, selector: (T) -> R?) { + if (import.size != export.size) { + var msg = StringBuilder() + for (i in import) { + msg.append(i) + msg.append("\n") + } + for (i in export) { + msg.append(i) + msg.append("\n") + } + Assert.fail(msg.toString()) + } + Assert.assertEquals(import.size, export.size) + val sortedImport = import.sortedBy(selector) + val sortedExport = export.sortedBy(selector) + + prettyAssertEquals(sortedImport, sortedExport) + } + + private fun readAllFrames(import: ByteArray, selfData: BackupRepository.SelfData): List { + val inputFactory = { ByteArrayInputStream(import) } + val frameReader = EncryptedBackupReader( + key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(), + aci = selfData.aci, + streamLength = import.size.toLong(), + dataStream = inputFactory + ) + val frames = ArrayList() + while (frameReader.hasNext()) { + frames.add(frameReader.next()) + } + + return frames + } +} diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt new file mode 100644 index 0000000000..f6788f5e4a --- /dev/null +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/TestRecipientUtils.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2 + +import org.thoughtcrime.securesms.crypto.ProfileKeyUtil +import org.whispersystems.signalservice.api.util.toByteArray +import java.util.UUID +import kotlin.random.Random + +object TestRecipientUtils { + + private var upperGenAci = 13131313L + private var lowerGenAci = 0L + + private var upperGenPni = 12121212L + private var lowerGenPni = 0L + + private var groupMasterKeyRandom = Random(12345) + + fun generateProfileKey(): ByteArray { + return ProfileKeyUtil.createNew().serialize() + } + + fun nextPni(): ByteArray { + synchronized(this) { + lowerGenPni++ + var uuid = UUID(upperGenPni, lowerGenPni) + return uuid.toByteArray() + } + } + + fun nextAci(): ByteArray { + synchronized(this) { + lowerGenAci++ + var uuid = UUID(upperGenAci, lowerGenAci) + return uuid.toByteArray() + } + } + + fun generateGroupMasterKey(): ByteArray { + val masterKey = ByteArray(32) + groupMasterKeyRandom.nextBytes(masterKey) + return masterKey + } +} diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt index ad246536b0..64d480e6d4 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest.kt @@ -57,7 +57,7 @@ class RecipientTableTest { SignalDatabase.recipients.setProfileName(hiddenRecipient, ProfileName.fromParts("Hidden", "Person")) SignalDatabase.recipients.markHidden(hiddenRecipient) - val results = SignalDatabase.recipients.querySignalContacts("Hidden", false)!! + val results = SignalDatabase.recipients.querySignalContacts(RecipientTable.ContactSearchQuery("Hidden", false))!! assertEquals(0, results.count) } @@ -128,7 +128,7 @@ class RecipientTableTest { SignalDatabase.recipients.setProfileName(blockedRecipient, ProfileName.fromParts("Blocked", "Person")) SignalDatabase.recipients.setBlocked(blockedRecipient, true) - val results = SignalDatabase.recipients.querySignalContacts("Blocked", false)!! + val results = SignalDatabase.recipients.querySignalContacts(RecipientTable.ContactSearchQuery("Blocked", false))!! assertEquals(0, results.count) } diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt index 4c13e3d3f4..aba11af7cd 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientTableTest_getAndPossiblyMerge.kt @@ -776,6 +776,18 @@ class RecipientTableTest_getAndPossiblyMerge { expectThreadMergeEvent(E164_A) } + test("merge, e164+pni & e164+aci, pni+aci provided, change number") { + given(E164_A, PNI_A, null) + given(E164_B, null, ACI_A) + + process(null, PNI_A, ACI_A) + + expect(E164_A, PNI_A, ACI_A) + + expectThreadMergeEvent(E164_A) + expectChangeNumberEvent() + } + test("merge, e164 + pni reassigned, aci abandoned") { given(E164_A, PNI_A, ACI_A) given(E164_B, PNI_B, ACI_B) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt index 59c80b39f3..ab4b457930 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/dependencies/InstrumentationApplicationDependencyProvider.kt @@ -37,7 +37,7 @@ import org.whispersystems.signalservice.internal.configuration.SignalSvr2Url * * Handles setting up a mock web server for API calls, and provides mockable versions of [SignalServiceNetworkAccess]. */ -class InstrumentationApplicationDependencyProvider(application: Application, default: ApplicationDependencyProvider) : ApplicationDependencies.Provider by default { +class InstrumentationApplicationDependencyProvider(val application: Application, private val default: ApplicationDependencyProvider) : ApplicationDependencies.Provider by default { private val serviceTrustStore: TrustStore private val uncensoredConfiguration: SignalServiceConfiguration diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt index b4205a7855..f407756aca 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/SignalActivityRule.kt @@ -138,7 +138,7 @@ class SignalActivityRule(private val othersCount: Int = 4, private val createGro val recipientId = RecipientId.from(SignalServiceAddress(aci, "+15555551%03d".format(i))) SignalDatabase.recipients.setProfileName(recipientId, ProfileName.fromParts("Buddy", "#$i")) SignalDatabase.recipients.setProfileKeyIfAbsent(recipientId, ProfileKeyUtil.createNew()) - SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true, true, true, true, true, true, true)) + SignalDatabase.recipients.setCapabilities(recipientId, SignalServiceProfile.Capabilities(true, true, true)) SignalDatabase.recipients.setProfileSharing(recipientId, true) SignalDatabase.recipients.markRegistered(recipientId, aci) val otherIdentity = IdentityKeyUtil.generateIdentityKeyPair() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 23f0c21589..b6a726d5fd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1029,6 +1029,16 @@ android:theme="@style/Theme.Signal.WallpaperCropper" android:exported="false"/> + + + + (Landroid/content/Con HPLandroidx/appcompat/view/menu/ActionMenuItemView;->initialize(Landroidx/appcompat/view/menu/MenuItemImpl;I)V HPLandroidx/appcompat/view/menu/ActionMenuItemView;->onMeasure(II)V HPLandroidx/appcompat/view/menu/ActionMenuItemView;->setIcon(Landroid/graphics/drawable/Drawable;)V -HPLandroidx/appcompat/view/menu/ActionMenuItemView;->setItemInvoker(Landroidx/appcompat/view/menu/MenuBuilder$ItemInvoker;)V HPLandroidx/appcompat/view/menu/ActionMenuItemView;->setTitle(Ljava/lang/CharSequence;)V HPLandroidx/appcompat/view/menu/ActionMenuItemView;->shouldAllowTextWithIcon()Z -HPLandroidx/appcompat/view/menu/ActionMenuItemView;->updateTextButtonVisibility()V HPLandroidx/appcompat/view/menu/BaseMenuPresenter;->createItemView(Landroid/view/ViewGroup;)Landroidx/appcompat/view/menu/MenuView$ItemView; HPLandroidx/appcompat/view/menu/BaseMenuPresenter;->getItemView(Landroidx/appcompat/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View; HPLandroidx/appcompat/view/menu/MenuItemImpl;->applyIconTintIfNecessary(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; @@ -16,112 +14,423 @@ HPLandroidx/appcompat/view/menu/MenuItemImpl;->getTitle()Ljava/lang/CharSequence HPLandroidx/appcompat/view/menu/MenuItemImpl;->getTitleCondensed()Ljava/lang/CharSequence; HPLandroidx/appcompat/view/menu/MenuItemImpl;->getTitleForItemView(Landroidx/appcompat/view/menu/MenuView$ItemView;)Ljava/lang/CharSequence; HPLandroidx/appcompat/view/menu/MenuItemImpl;->getTooltipText()Ljava/lang/CharSequence; -HPLandroidx/appcompat/view/menu/MenuItemImpl;->isEnabled()Z -HPLandroidx/appcompat/view/menu/MenuItemImpl;->setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem; HPLandroidx/appcompat/view/menu/MenuItemImpl;->showsTextAsAction()Z HPLandroidx/appcompat/widget/ActionMenuPresenter;->bindItemView(Landroidx/appcompat/view/menu/MenuItemImpl;Landroidx/appcompat/view/menu/MenuView$ItemView;)V HPLandroidx/appcompat/widget/ActionMenuPresenter;->getItemView(Landroidx/appcompat/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View; HPLandroidx/appcompat/widget/ActionMenuView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroidx/appcompat/widget/ActionMenuView$LayoutParams; +HPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(IIII)V +HPLandroidx/appcompat/widget/LinearLayoutCompat;->layoutVertical(IIII)V +HPLandroidx/appcompat/widget/LinearLayoutCompat;->measureVertical(II)V HPLandroidx/appcompat/widget/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V +HPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasResolvedTargets(II)Z +HPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addHorizontalWrapMaxVariable(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;)V +HPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addHorizontalWrapMinVariable(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;)V +HPLandroidx/constraintlayout/core/widgets/Guideline;->addToSolver(Landroidx/constraintlayout/core/LinearSystem;Z)V +HPLandroidx/constraintlayout/core/widgets/Guideline;->getAnchor(Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;)Landroidx/constraintlayout/core/widgets/ConstraintAnchor; +HPLandroidx/constraintlayout/core/widgets/Guideline;->updateFromSolver(Landroidx/constraintlayout/core/LinearSystem;Z)V HPLandroidx/core/view/ViewGroupKt$descendants$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/core/view/ViewGroupKt$iterator$1;->next()Landroid/view/View; HPLandroidx/core/view/ViewGroupKt$iterator$1;->next()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;->onRelease()V HPLandroidx/fragment/app/FragmentManager;->saveAllStateInternal()Landroid/os/Bundle; HPLandroidx/fragment/app/FragmentStateManager;->saveState()Landroid/os/Bundle; -HPLandroidx/lifecycle/MediatorLiveData;->onInactive()V -HPLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areItemsTheSame(II)Z +HPLandroidx/media3/ui/PlayerView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V 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/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/ConcatAdapter;->findRelativeAdapterPositionIn(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I +HPLandroidx/recyclerview/widget/ConcatAdapter;->getAdapters()Ljava/util/List; +HPLandroidx/recyclerview/widget/ConcatAdapter;->getItemCount()I +HPLandroidx/recyclerview/widget/ConcatAdapterController;->countItemsBefore(Landroidx/recyclerview/widget/NestedAdapterWrapper;)I +HPLandroidx/recyclerview/widget/ConcatAdapterController;->findWrapperAndLocalPosition(I)Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition; +HPLandroidx/recyclerview/widget/ConcatAdapterController;->getCopyOfAdapters()Ljava/util/List; +HPLandroidx/recyclerview/widget/ConcatAdapterController;->getItemViewType(I)I +HPLandroidx/recyclerview/widget/ConcatAdapterController;->getLocalAdapterPosition(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I +HPLandroidx/recyclerview/widget/ConcatAdapterController;->getTotalCount()I +HPLandroidx/recyclerview/widget/ConcatAdapterController;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V +HPLandroidx/recyclerview/widget/ConcatAdapterController;->releaseWrapperAndLocalPosition(Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;)V +HPLandroidx/recyclerview/widget/ListAdapter;->getCurrentList()Ljava/util/List; +HPLandroidx/recyclerview/widget/NestedAdapterWrapper;->getCachedItemCount()I +HPLandroidx/recyclerview/widget/NestedAdapterWrapper;->getItemViewType(I)I +HPLandroidx/recyclerview/widget/RecyclerView;->getChildViewHolder(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; 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;->popFromLayoutStep(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo; -HPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V +HPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->localToGlobal(I)I HPLcom/google/android/material/animation/ArgbEvaluatorCompat;->evaluate(FLjava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer; -HPLcom/google/i18n/phonenumbers/PhoneNumberUtil;->chooseFormattingPatternForNumber(Ljava/util/List;Ljava/lang/String;)Lcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat; -HPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFromCallable;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V +HPLcom/google/android/material/imageview/ShapeableImageView$OutlineProvider;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V +HPLcom/google/android/material/shape/RelativeCornerSize;->getCornerSize(Landroid/graphics/RectF;)F +HPLcom/google/android/material/shape/RelativeCornerSize;->getMaxCornerSize(Landroid/graphics/RectF;)F +HPLcom/google/common/collect/Sets;->intersection(Ljava/util/Set;Ljava/util/Set;)Lcom/google/common/collect/Sets$SetView; +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->onNext(Ljava/lang/Object;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->drain()V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->innerNext(ILjava/lang/Object;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->onNext(Ljava/lang/Object;)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 -HPLj$/util/Optional;->of(Ljava/lang/Object;)Lj$/util/Optional; -HPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->innerSuccess(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;Ljava/lang/Object;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->onNext(Ljava/lang/Object;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;->onNext(Ljava/lang/Object;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->replay(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->isDisposed()Z +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->add(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)Z +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplaySource;->subscribe(Lio/reactivex/rxjava3/core/Observer;)V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->drain()V +HPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->onNext(Ljava/lang/Object;)V +HPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Observable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; +HPLj$/time/Instant;->atZone(Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; +HPLj$/time/LocalDate;->toEpochDay()J +HPLj$/time/LocalDate;->w()Z +HPLj$/time/LocalDateTime;->v()Lj$/time/LocalDate; +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; +HPLj$/util/S;->s(Lj$/util/function/Consumer;)Z +HPLj$/util/stream/Y1;->n(Lj$/util/function/BinaryOperator;)Lj$/util/Optional; +HPLj$/util/stream/h2;->(Lj$/util/stream/i2;Lj$/util/stream/g2;)V +HPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->(Ljava/lang/Class;)V HPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; HPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bind(ILjava/lang/Object;)V +HPLkotlin/sequences/SequencesKt___SequencesJvmKt;->filterIsInstance(Lkotlin/sequences/Sequence;Ljava/lang/Class;)Lkotlin/sequences/Sequence; +HPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V +HPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->readFromSocket()I +HPLorg/conscrypt/SSLUtils;->getEncryptedPacketLength(Ljava/nio/ByteBuffer;)I +HPLorg/signal/core/util/OptionalExtensionsKt;->toOptional(Ljava/lang/Object;)Lj$/util/Optional; +HPLorg/signal/core/util/concurrent/SettableFuture;->(Ljava/lang/Object;)V +HPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda0;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V +HPLorg/signal/core/util/concurrent/SignalExecutors;->$r8$lambda$0Q0afsv1raKIrq3aP-SuMcT2Ad0(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/libsignal/protocol/ecc/ECPublicKey;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLorg/signal/paging/FixedSizePagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean; -HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean; -HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->invoke(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift;)Ljava/lang/Boolean; +HPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)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;->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/AvatarImageView;->disableQuickContact()V +HPLorg/thoughtcrime/securesms/components/ComposeText;->onDraw(Landroid/graphics/Canvas;)V +HPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDate(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/Locale;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V +HPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDeliveryStatus(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->dispatchDraw(Landroid/graphics/Canvas;)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/CornerMask;->mask(Landroid/graphics/Canvas;)V HPLorg/thoughtcrime/securesms/components/Outliner;->draw(Landroid/graphics/Canvas;IIII)V -HPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->isListCommitted()Z -HPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->prependIcon(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; +HPLorg/thoughtcrime/securesms/components/QuoteView;->applyColorTheme()V +HPLorg/thoughtcrime/securesms/components/QuoteView;->dismiss()V +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;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->getLongestLineWidth(Ljava/lang/CharSequence;)F +HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setOverflowText(Ljava/lang/CharSequence;)V +HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setTextColor(I)V +HPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setTextSize(IF)V +HPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->updateFromTextColor()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;->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;->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;->updateOutlineVisibility()V +HPLorg/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 +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getActiveFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Lorg/thoughtcrime/securesms/components/ConversationItemFooter; +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getGiftId()J HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getOpenableGiftProjection(Z)Lorg/thoughtcrime/securesms/util/Projection; HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getSnapshotProjections(Landroid/view/ViewGroup;ZZ)Lorg/thoughtcrime/securesms/util/ProjectionList; +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasExtraText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isFooterVisible(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isStartOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isWithinClusteringTime(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->onMeasure(II)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->readDimen(I)I +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setAuthor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZ)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBodyText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/String;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBubbleState(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setContactPhoto(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Ljava/util/Locale;ZZ)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGroupAuthorColor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGutterSizes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setHasBeenQuoted(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setInteractionState(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMediaAttributes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZZZ)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageSpacing(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setReactions(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setStatusIcons(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setThumbnailCorners(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->shouldInterceptClicks(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->showProjectionArea()V +HPLorg/thoughtcrime/securesms/conversation/ConversationItem;->unbind()V HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->onDrawForeground(Landroid/graphics/Canvas;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setQuoteViewProjection(Lorg/thoughtcrime/securesms/util/Projection;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setVideoPlayerProjection(Lorg/thoughtcrime/securesms/util/Projection;)V +HPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getConversationTimestamp()J +HPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hashCode()I +HPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->onCreateMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V HPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->getLatestTimestamp(Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge;Landroidx/recyclerview/widget/LinearLayoutManager;)Lj$/util/Optional; +HPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->asSingleColor()I +HPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingBodyTextColor(Landroid/content/Context;Z)I +HPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingGroupSenderColor(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)I +HPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->drawShaderMask(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V +HPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)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/mutiselect/ConversationItemAnimator;->animateSlide(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z +HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->isRunning()Z HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->onAnimationFinished(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->cleanPulseAnimators()V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->findAdapterBridge(Landroidx/recyclerview/widget/RecyclerView;)Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge; +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getDifferenceForPart(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->hasRunningPulseRequestAnimators()Z +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->invalidateIfEnterExitAnimatorsAreRunning(Landroidx/recyclerview/widget/RecyclerView;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->resolveMultiselectable(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)Lorg/thoughtcrime/securesms/conversation/mutiselect/Multiselectable; +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateChildOffsets(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateMultiselectPartAnimator(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)V +HPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->hashCode()I +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;->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/ConversationAdapterV2;->getChatColorsData()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getConversationMessage(I)Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getSelectedItems()Ljava/util/Set; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$2;->get()Ljava/lang/Object; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5;->invoke()Ljava/lang/Boolean; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6;->invoke()Ljava/lang/Boolean; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7;->invoke()Ljava/lang/Boolean; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->invoke(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Ljava/lang/Boolean; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->doAfterFirstRender()V +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getViewModel()Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeConversationThreadUi()V HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getHeader(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->hasHeader(I)Z +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->isFirstUnread(I)Z +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->timestamp(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->toEpochDay(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getIdentityRecords$lambda$11(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getIdentityRecords(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lio/reactivex/rxjava3/core/Single; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getReminder$lambda$10(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lj$/util/Optional; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getRequestReviewState$lambda$15(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getRequestReviewState(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;)Lio/reactivex/rxjava3/core/Single; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->apply(Lj$/util/Optional;)Lio/reactivex/rxjava3/core/MaybeSource; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->accept(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->apply(Lkotlin/Unit;Lorg/thoughtcrime/securesms/recipients/Recipient;Lj$/util/Optional;)Lkotlin/Pair; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->apply(Lkotlin/Pair;)Lio/reactivex/rxjava3/core/SingleSource; +HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;Lj$/util/Optional;)Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState; 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/ConversationViewModel;->(JILorg/thoughtcrime/securesms/conversation/colors/ChatColors;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;Lorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;)V HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getChatColorsSnapshot()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +HPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;ZLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;Z)V HPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->equals(Ljava/lang/Object;)Z +HPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/database/model/GroupRecord;ZZZ)V +HPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->equals(Ljava/lang/Object;)Z +HPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(IIILorg/signal/paging/PagedDataSource$CancellationSignal;)Ljava/util/List; +HPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +HPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +HPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch(Ljava/util/List;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData; HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->invoke(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V 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;->isSolidColor()Z +HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners([F)V HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->onMeasure(II)V +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$footerDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +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;->invalidateFooterDrawable(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/V2FooterPositionDelegate;->onPostMeasure()Z -HPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->onUpdate(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/Object;)V +HPLorg/thoughtcrime/securesms/conversationlist/model/Conversation;->equals(Ljava/lang/Object;)Z +HPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->getIdentityRecords(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/identity/IdentityRecordList; +HPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachments(Landroid/database/Cursor;)Ljava/util/List; +HPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$unregisterObserver$17(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HPLorg/thoughtcrime/securesms/database/EmojiSearchTable$setSearchIndex$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)V +HPLorg/thoughtcrime/securesms/database/GroupTable;->getGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZ)Ljava/util/List; +HPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->(Ljava/util/Collection;)V +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isBoostRequest()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isChangeNumber()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isEndSession()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isExpirationTimerUpdate()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isFailed()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isGroupCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isIncomingAudioCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isIncomingVideoCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isJoined()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMessageRequestAccepted()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMissedAudioCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMissedVideoCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoing()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoingAudioCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoingVideoCall()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPendingInsecureSmsFallback()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isProfileChange()Z +HPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isReportedSpam()Z HPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->equals(Ljava/lang/Object;)Z +HPLorg/thoughtcrime/securesms/database/model/IdentityStoreRecord;->toIdentityRecord(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/IdentityRecord; +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getUpdateDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Lorg/thoughtcrime/securesms/database/model/UpdateDescription; +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isBadDecryptType()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isChatSessionRefresh()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isDisplayBodyEmpty(Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isGroupV1MigrationEvent()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityDefault()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityUpdate()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityVerified()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isRateLimited()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSecure()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSessionSwitchoverEventType()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSmsExportType()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isThreadMergeEventType()Z +HPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isUpdate()Z +HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getLinkPreviews()Ljava/util/List; +HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getQuote()Lorg/thoughtcrime/securesms/database/model/Quote; +HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getUpdateDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Lorg/thoughtcrime/securesms/database/model/UpdateDescription; +HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isMediaPending()Z +HPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->withAttachments(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord; +HPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->equals(Ljava/lang/Object;)Z HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->invoke(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->compare(Ljava/lang/Integer;Ljava/lang/Integer;)I +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->setParentRecyclerTranslationY(Landroidx/recyclerview/widget/RecyclerView;)V +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->getPlaybackSet(Ljava/util/Set;II)Ljava/util/Set; +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->performPlaybackUpdate(Landroidx/recyclerview/widget/RecyclerView;)V +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->injectVideoViews(Landroid/content/Context;Landroidx/lifecycle/Lifecycle;Landroid/view/ViewGroup;I)Ljava/util/List; HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->getCurrentHolder(I)Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder; +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->stopAndReleaseAssignedVideos(Ljava/util/Set;)V +HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->update(Landroidx/recyclerview/widget/RecyclerView;Ljava/util/List;Ljava/util/Set;)V HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->updateVideoDisplayPositionAndSize(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4Playable;)V +HPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->getMessageRequestState(Lorg/thoughtcrime/securesms/recipients/Recipient;J)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; +HPLorg/thoughtcrime/securesms/mms/ImageSlide;->isBorderless()Z HPLorg/thoughtcrime/securesms/mms/Slide;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->prettyPrintFormat(Ljava/lang/String;)Ljava/lang/String; +HPLorg/thoughtcrime/securesms/mms/Slide;->getTransferState()I +HPLorg/thoughtcrime/securesms/mms/Slide;->hashCode()I +HPLorg/thoughtcrime/securesms/mms/Slide;->isInProgress()Z +HPLorg/thoughtcrime/securesms/mms/Slide;->isPendingDownload()Z +HPLorg/thoughtcrime/securesms/mms/SlideDeck;->getTextSlide()Lorg/thoughtcrime/securesms/mms/TextSlide; +HPLorg/thoughtcrime/securesms/mms/SlideDeck;->getThumbnailSlides()Ljava/util/List; +HPLorg/thoughtcrime/securesms/profiles/ProfileName;->equals(Ljava/lang/Object;)Z +HPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->clear()V +HPLorg/thoughtcrime/securesms/recipients/Recipient;->hasSameContent(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z +HPLorg/thoughtcrime/securesms/recipients/Recipient;->hasWallpaper()Z +HPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isMessageRequestAccepted(Landroid/content/Context;J)Z HPLorg/thoughtcrime/securesms/util/BubbleUtil;->canBubble(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Long;)Z +HPLorg/thoughtcrime/securesms/util/DateUtils;->getSameDayDateFormat()Ljava/text/SimpleDateFormat; +HPLorg/thoughtcrime/securesms/util/DateUtils;->isSameDay(JJ)Z +HPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate$default(JLj$/time/ZoneId;ILjava/lang/Object;)Lj$/time/LocalDate; +HPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate(JLj$/time/ZoneId;)Lj$/time/LocalDate; HPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->updateActiveState$lambda$7$lambda$6(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;IIIILandroid/animation/ValueAnimator;)V -HPLorg/thoughtcrime/securesms/util/ProjectionList;->close()V +HPLorg/thoughtcrime/securesms/util/MediaUtil;->isLongTextType(Ljava/lang/String;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasAudio(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasDocument(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasExtraText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasLinkPreview(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasOnlyThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasSharedContact(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isBorderless(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isCaptionlessMms(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isEditMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isTextOnly(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isViewOnceMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HPLorg/thoughtcrime/securesms/util/Projection$Corners;->(FFFF)V +HPLorg/thoughtcrime/securesms/util/Projection$Corners;->toRadii()[F HPLorg/thoughtcrime/securesms/util/ProjectionList;->getSize()I HPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->drawAsTopItemDecoration(Landroid/view/View;Landroid/graphics/Canvas;Landroid/view/View;Landroid/view/View;I)V +HPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->layoutIn(Landroid/view/View;Landroid/view/View;)V +HPLorg/thoughtcrime/securesms/util/ViewUtil;->isLtr(Landroid/content/Context;)Z +HPLorg/thoughtcrime/securesms/util/ViewUtil;->isLtr(Landroid/view/View;)Z +HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingEnd(Landroid/view/View;I)V +HPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingStart(Landroid/view/View;I)V +HPLorg/thoughtcrime/securesms/util/ViewUtil;->setTopMargin(Landroid/view/View;IZ)V +HPLorg/thoughtcrime/securesms/util/ViewUtil;->updateLayoutParams(Landroid/view/View;II)V +HPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->setPayload(Ljava/util/List;)V +HPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItem(I)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; +HPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItemViewType(I)I +HPLorg/thoughtcrime/securesms/util/views/NullableStub;->get()Ljava/lang/Object; +HPLorg/thoughtcrime/securesms/util/views/NullableStub;->require()Ljava/lang/Object; +HPLorg/thoughtcrime/securesms/util/views/NullableStub;->resolved()Z +HPLrxdogtag2/RxDogTag;->lambda$installWithBuilder$3(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; 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 @@ -346,7 +655,6 @@ HSPLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V -HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onDetachedFromWindow()V @@ -411,7 +719,6 @@ HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateAppConfiguration(ILandroidx/core/os/LocaleListCompat;Z)Z -HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V HSPLandroidx/appcompat/app/AppCompatViewInflater;->backportAccessibilityAttributes(Landroid/content/Context;Landroid/view/View;Landroid/util/AttributeSet;)V @@ -541,7 +848,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$MenuBuilderCallback;->(Landroidx/appcompat/widget/ActionMenuView;)V @@ -565,12 +871,10 @@ HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->(Landroid/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 HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->setSupportBackgroundTintList(Landroid/content/res/ColorStateList;)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->shouldApplyFrameworkTintUsingColorFilter()Z HSPLandroidx/appcompat/widget/AppCompatButton;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLandroidx/appcompat/widget/AppCompatButton;->drawableStateChanged()V HSPLandroidx/appcompat/widget/AppCompatButton;->getEmojiTextViewHelper()Landroidx/appcompat/widget/AppCompatEmojiTextHelper; HSPLandroidx/appcompat/widget/AppCompatButton;->onTextChanged(Ljava/lang/CharSequence;III)V HSPLandroidx/appcompat/widget/AppCompatButton;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V @@ -622,10 +926,7 @@ HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->loadFromAttributes(Land HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->setEnabled(Z)V 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 -HSPLandroidx/appcompat/widget/AppCompatImageButton;->hasOverlappingRendering()Z HSPLandroidx/appcompat/widget/AppCompatImageButton;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V -HSPLandroidx/appcompat/widget/AppCompatImageButton;->setBackgroundResource(I)V HSPLandroidx/appcompat/widget/AppCompatImageButton;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatImageButton;->setImageResource(I)V HSPLandroidx/appcompat/widget/AppCompatImageHelper;->(Landroid/widget/ImageView;)V @@ -643,19 +944,6 @@ HSPLandroidx/appcompat/widget/AppCompatImageView;->hasOverlappingRendering()Z HSPLandroidx/appcompat/widget/AppCompatImageView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatImageView;->setImageDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatImageView;->setImageResource(I)V -HSPLandroidx/appcompat/widget/AppCompatProgressBarHelper;->()V -HSPLandroidx/appcompat/widget/AppCompatProgressBarHelper;->(Landroid/widget/ProgressBar;)V -HSPLandroidx/appcompat/widget/AppCompatProgressBarHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V -HSPLandroidx/appcompat/widget/AppCompatSeekBar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/appcompat/widget/AppCompatSeekBar;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLandroidx/appcompat/widget/AppCompatSeekBar;->drawableStateChanged()V -HSPLandroidx/appcompat/widget/AppCompatSeekBar;->jumpDrawablesToCurrentState()V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->(Landroid/widget/SeekBar;)V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->applyTickMarkTint()V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->drawableStateChanged()V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->jumpDrawablesToCurrentState()V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V -HSPLandroidx/appcompat/widget/AppCompatSeekBarHelper;->setTickMark(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatTextClassifierHelper$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; HSPLandroidx/appcompat/widget/AppCompatTextClassifierHelper;->(Landroid/widget/TextView;)V HSPLandroidx/appcompat/widget/AppCompatTextHelper$1;->(Landroidx/appcompat/widget/AppCompatTextHelper;IILjava/lang/ref/WeakReference;)V @@ -680,12 +968,10 @@ HSPLandroidx/appcompat/widget/AppCompatTextView;->onLayout(ZIIII)V HSPLandroidx/appcompat/widget/AppCompatTextView;->onMeasure(II)V HSPLandroidx/appcompat/widget/AppCompatTextView;->onTextChanged(Ljava/lang/CharSequence;III)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V -HSPLandroidx/appcompat/widget/AppCompatTextView;->setBackgroundResource(I)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelative(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(IIII)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesRelativeWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V -HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(IIII)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setCompoundDrawablesWithIntrinsicBounds(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setEmojiCompatEnabled(Z)V HSPLandroidx/appcompat/widget/AppCompatTextView;->setFilters([Landroid/text/InputFilter;)V @@ -710,15 +996,10 @@ HSPLandroidx/appcompat/widget/ContentFrameLayout;->onDetachedFromWindow()V HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V -HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I -HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/Insets;)I -HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline2;->m(Landroid/graphics/Insets;)I -HSPLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline3;->m(Landroid/graphics/Insets;)I HSPLandroidx/appcompat/widget/DrawableUtils;->()V HSPLandroidx/appcompat/widget/DrawableUtils;->canSafelyMutateDrawable(Landroid/graphics/drawable/Drawable;)Z HSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z HSPLandroidx/appcompat/widget/ForwardingListener;->(Landroid/view/View;)V HSPLandroidx/appcompat/widget/ForwardingListener;->onViewAttachedToWindow(Landroid/view/View;)V HSPLandroidx/appcompat/widget/LinearLayoutCompat$LayoutParams;->(II)V @@ -729,7 +1010,6 @@ HSPLandroidx/appcompat/widget/LinearLayoutCompat;->checkLayoutParams(Landroid/vi HSPLandroidx/appcompat/widget/LinearLayoutCompat;->drawDividersHorizontal(Landroid/graphics/Canvas;)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams; HSPLandroidx/appcompat/widget/LinearLayoutCompat;->generateLayoutParams(Landroid/util/AttributeSet;)Landroidx/appcompat/widget/LinearLayoutCompat$LayoutParams; -HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getBaseline()I HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getChildrenSkipCount(Landroid/view/View;I)I HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getLocationOffset(Landroid/view/View;)I HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getNextLocationOffset(Landroid/view/View;)I @@ -737,10 +1017,8 @@ HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getVirtualChildAt(I)Landroid/ HSPLandroidx/appcompat/widget/LinearLayoutCompat;->getVirtualChildCount()I HSPLandroidx/appcompat/widget/LinearLayoutCompat;->hasDividerBeforeChildAt(I)Z HSPLandroidx/appcompat/widget/LinearLayoutCompat;->layoutHorizontal(IIII)V -HSPLandroidx/appcompat/widget/LinearLayoutCompat;->layoutVertical(IIII)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->measureChildBeforeLayout(Landroid/view/View;IIIII)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->measureHorizontal(II)V -HSPLandroidx/appcompat/widget/LinearLayoutCompat;->measureVertical(II)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onDraw(Landroid/graphics/Canvas;)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V HSPLandroidx/appcompat/widget/LinearLayoutCompat;->onLayout(ZIIII)V @@ -807,7 +1085,6 @@ HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/c HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[III)Landroidx/appcompat/widget/TintTypedArray; HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V HSPLandroidx/appcompat/widget/Toolbar$$ExternalSyntheticLambda0;->(Landroidx/appcompat/widget/Toolbar;)V -HSPLandroidx/appcompat/widget/Toolbar$$ExternalSyntheticLambda0;->run()V HSPLandroidx/appcompat/widget/Toolbar$1;->(Landroidx/appcompat/widget/Toolbar;)V HSPLandroidx/appcompat/widget/Toolbar$2;->(Landroidx/appcompat/widget/Toolbar;)V HSPLandroidx/appcompat/widget/Toolbar$3;->(Landroidx/appcompat/widget/Toolbar;)V @@ -820,7 +1097,6 @@ HSPLandroidx/appcompat/widget/Toolbar$LayoutParams;->(Landroid/content/Con HSPLandroidx/appcompat/widget/Toolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/Toolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/Toolbar;->addCustomViewsWithGravity(Ljava/util/List;I)V -HSPLandroidx/appcompat/widget/Toolbar;->addMenuProvider(Landroidx/core/view/MenuProvider;)V HSPLandroidx/appcompat/widget/Toolbar;->addSystemView(Landroid/view/View;Z)V HSPLandroidx/appcompat/widget/Toolbar;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z HSPLandroidx/appcompat/widget/Toolbar;->ensureContentInsets()V @@ -839,10 +1115,8 @@ HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetEnd()I HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetLeft()I HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetRight()I HSPLandroidx/appcompat/widget/Toolbar;->getCurrentContentInsetStart()I -HSPLandroidx/appcompat/widget/Toolbar;->getCurrentMenuItems()Ljava/util/ArrayList; HSPLandroidx/appcompat/widget/Toolbar;->getHorizontalMargins(Landroid/view/View;)I HSPLandroidx/appcompat/widget/Toolbar;->getMenu()Landroid/view/Menu; -HSPLandroidx/appcompat/widget/Toolbar;->getMenuInflater()Landroid/view/MenuInflater; HSPLandroidx/appcompat/widget/Toolbar;->getNavigationContentDescription()Ljava/lang/CharSequence; HSPLandroidx/appcompat/widget/Toolbar;->getNavigationIcon()Landroid/graphics/drawable/Drawable; HSPLandroidx/appcompat/widget/Toolbar;->getOverflowIcon()Landroid/graphics/drawable/Drawable; @@ -850,29 +1124,21 @@ HSPLandroidx/appcompat/widget/Toolbar;->getSubtitle()Ljava/lang/CharSequence; HSPLandroidx/appcompat/widget/Toolbar;->getTitle()Ljava/lang/CharSequence; HSPLandroidx/appcompat/widget/Toolbar;->getVerticalMargins(Landroid/view/View;)I HSPLandroidx/appcompat/widget/Toolbar;->getViewListMeasuredWidth(Ljava/util/List;[I)I -HSPLandroidx/appcompat/widget/Toolbar;->invalidateMenu()V HSPLandroidx/appcompat/widget/Toolbar;->isChildOrHidden(Landroid/view/View;)Z HSPLandroidx/appcompat/widget/Toolbar;->layoutChildLeft(Landroid/view/View;I[II)I HSPLandroidx/appcompat/widget/Toolbar;->layoutChildRight(Landroid/view/View;I[II)I HSPLandroidx/appcompat/widget/Toolbar;->measureChildCollapseMargins(Landroid/view/View;IIII[I)I HSPLandroidx/appcompat/widget/Toolbar;->measureChildConstrained(Landroid/view/View;IIIII)V HSPLandroidx/appcompat/widget/Toolbar;->onAttachedToWindow()V -HSPLandroidx/appcompat/widget/Toolbar;->onCreateMenu()V HSPLandroidx/appcompat/widget/Toolbar;->onLayout(ZIIII)V HSPLandroidx/appcompat/widget/Toolbar;->onMeasure(II)V HSPLandroidx/appcompat/widget/Toolbar;->onRtlPropertiesChanged(I)V HSPLandroidx/appcompat/widget/Toolbar;->setBackInvokedCallbackEnabled(Z)V HSPLandroidx/appcompat/widget/Toolbar;->setMenuCallbacks(Landroidx/appcompat/view/menu/MenuPresenter$Callback;Landroidx/appcompat/view/menu/MenuBuilder$Callback;)V -HSPLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(I)V -HSPLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V -HSPLandroidx/appcompat/widget/Toolbar;->setNavigationIcon(I)V -HSPLandroidx/appcompat/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/Toolbar;->setNavigationOnClickListener(Landroid/view/View$OnClickListener;)V HSPLandroidx/appcompat/widget/Toolbar;->setOnMenuItemClickListener(Landroidx/appcompat/widget/Toolbar$OnMenuItemClickListener;)V HSPLandroidx/appcompat/widget/Toolbar;->setPopupTheme(I)V HSPLandroidx/appcompat/widget/Toolbar;->setTitle(Ljava/lang/CharSequence;)V -HSPLandroidx/appcompat/widget/Toolbar;->setTitleTextColor(I)V -HSPLandroidx/appcompat/widget/Toolbar;->setTitleTextColor(Landroid/content/res/ColorStateList;)V HSPLandroidx/appcompat/widget/Toolbar;->shouldCollapse()Z HSPLandroidx/appcompat/widget/Toolbar;->shouldLayout(Landroid/view/View;)Z HSPLandroidx/appcompat/widget/Toolbar;->updateBackInvokedCallbackState()V @@ -980,40 +1246,6 @@ HSPLandroidx/asynclayoutinflater/view/AsyncLayoutInflater;->inflateInternal(ILan HSPLandroidx/asynclayoutinflater/view/AsyncLayoutInflater;->triggerCallbacks(Landroidx/asynclayoutinflater/view/AsyncLayoutInflater$InflateRequest;Landroidx/asynclayoutinflater/view/AsyncLayoutInflater$InflateThread;)V HSPLandroidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl$OutputConfigurationParamsApi24$$ExternalSyntheticBackport1;->m(J)I HSPLandroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReference;Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/cardview/R$styleable;->()V -HSPLandroidx/cardview/widget/CardView$1;->(Landroidx/cardview/widget/CardView;)V -HSPLandroidx/cardview/widget/CardView$1;->getCardBackground()Landroid/graphics/drawable/Drawable; -HSPLandroidx/cardview/widget/CardView$1;->getCardView()Landroid/view/View; -HSPLandroidx/cardview/widget/CardView$1;->getPreventCornerOverlap()Z -HSPLandroidx/cardview/widget/CardView$1;->getUseCompatPadding()Z -HSPLandroidx/cardview/widget/CardView$1;->setCardBackground(Landroid/graphics/drawable/Drawable;)V -HSPLandroidx/cardview/widget/CardView$1;->setShadowPadding(IIII)V -HSPLandroidx/cardview/widget/CardView;->()V -HSPLandroidx/cardview/widget/CardView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLandroidx/cardview/widget/CardView;->access$001(Landroidx/cardview/widget/CardView;IIII)V -HSPLandroidx/cardview/widget/CardView;->getCardBackgroundColor()Landroid/content/res/ColorStateList; -HSPLandroidx/cardview/widget/CardView;->getCardElevation()F -HSPLandroidx/cardview/widget/CardView;->getContentPaddingBottom()I -HSPLandroidx/cardview/widget/CardView;->getContentPaddingLeft()I -HSPLandroidx/cardview/widget/CardView;->getContentPaddingRight()I -HSPLandroidx/cardview/widget/CardView;->getContentPaddingTop()I -HSPLandroidx/cardview/widget/CardView;->getPreventCornerOverlap()Z -HSPLandroidx/cardview/widget/CardView;->getUseCompatPadding()Z -HSPLandroidx/cardview/widget/CardView;->onMeasure(II)V -HSPLandroidx/cardview/widget/CardView;->setContentPadding(IIII)V -HSPLandroidx/cardview/widget/CardViewApi21Impl;->()V -HSPLandroidx/cardview/widget/CardViewApi21Impl;->getBackgroundColor(Landroidx/cardview/widget/CardViewDelegate;)Landroid/content/res/ColorStateList; -HSPLandroidx/cardview/widget/CardViewApi21Impl;->getCardBackground(Landroidx/cardview/widget/CardViewDelegate;)Landroidx/cardview/widget/RoundRectDrawable; -HSPLandroidx/cardview/widget/CardViewApi21Impl;->getElevation(Landroidx/cardview/widget/CardViewDelegate;)F -HSPLandroidx/cardview/widget/CardViewApi21Impl;->initStatic()V -HSPLandroidx/cardview/widget/CardViewApi21Impl;->initialize(Landroidx/cardview/widget/CardViewDelegate;Landroid/content/Context;Landroid/content/res/ColorStateList;FFF)V -HSPLandroidx/cardview/widget/CardViewApi21Impl;->setMaxElevation(Landroidx/cardview/widget/CardViewDelegate;F)V -HSPLandroidx/cardview/widget/CardViewApi21Impl;->updatePadding(Landroidx/cardview/widget/CardViewDelegate;)V -HSPLandroidx/cardview/widget/RoundRectDrawable;->(Landroid/content/res/ColorStateList;F)V -HSPLandroidx/cardview/widget/RoundRectDrawable;->getColor()Landroid/content/res/ColorStateList; -HSPLandroidx/cardview/widget/RoundRectDrawable;->setBackground(Landroid/content/res/ColorStateList;)V -HSPLandroidx/cardview/widget/RoundRectDrawable;->setPadding(FZZ)V -HSPLandroidx/cardview/widget/RoundRectDrawable;->updateBounds(Landroid/graphics/Rect;)V HSPLandroidx/collection/ArrayMap$EntrySet;->(Landroidx/collection/ArrayMap;)V HSPLandroidx/collection/ArrayMap$EntrySet;->iterator()Ljava/util/Iterator; HSPLandroidx/collection/ArrayMap$MapIterator;->(Landroidx/collection/ArrayMap;)V @@ -1113,7 +1345,6 @@ HSPLandroidx/compose/ui/autofill/AndroidAutofill$$ExternalSyntheticApiModelOutli HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/Bitmap$Config; HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt$$ExternalSyntheticApiModelOutline1;->m()Landroid/graphics/Bitmap$Config; HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I -HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticApiModelOutline1;->m()I HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline0;->m()Landroid/os/LocaleList; HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline1;->m(Landroid/os/LocaleList;)I HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline2;->m(Landroid/os/LocaleList;I)Ljava/util/Locale; @@ -1131,15 +1362,11 @@ HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariable(I)Landroid HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariableValue(I)F HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->invert()V HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->remove(Landroidx/constraintlayout/core/SolverVariable;Z)F -HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->use(Landroidx/constraintlayout/core/ArrayRow;Z)F -HSPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V 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 -HSPLandroidx/constraintlayout/core/ArrayRow;->chooseSubjectInVariables(Landroidx/constraintlayout/core/LinearSystem;)Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/ArrayRow;->createRowCentering(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IFLandroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->createRowEqualMatchDimensions(FFFLandroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;)Landroidx/constraintlayout/core/ArrayRow; -HSPLandroidx/constraintlayout/core/ArrayRow;->createRowEquals(Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->createRowEquals(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->createRowGreaterThan(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->createRowLowerThan(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; @@ -1155,17 +1382,15 @@ HSPLandroidx/constraintlayout/core/ArrayRow;->updateFromFinalVariable(Landroidx/ HSPLandroidx/constraintlayout/core/Cache;->()V HSPLandroidx/constraintlayout/core/LinearSystem;->()V HSPLandroidx/constraintlayout/core/LinearSystem;->()V -HSPLandroidx/constraintlayout/core/LinearSystem;->acquireSolverVariable(Landroidx/constraintlayout/core/SolverVariable$Type;Ljava/lang/String;)Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/LinearSystem;->addCentering(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IFLandroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;II)V HSPLandroidx/constraintlayout/core/LinearSystem;->addConstraint(Landroidx/constraintlayout/core/ArrayRow;)V +HSPLandroidx/constraintlayout/core/LinearSystem;->addEquality(Landroidx/constraintlayout/core/SolverVariable;I)V HSPLandroidx/constraintlayout/core/LinearSystem;->addEquality(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;II)Landroidx/constraintlayout/core/ArrayRow; -HSPLandroidx/constraintlayout/core/LinearSystem;->addGreaterBarrier(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IZ)V HSPLandroidx/constraintlayout/core/LinearSystem;->addGreaterThan(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;II)V -HSPLandroidx/constraintlayout/core/LinearSystem;->addLowerBarrier(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IZ)V HSPLandroidx/constraintlayout/core/LinearSystem;->addLowerThan(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;II)V -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; @@ -1208,7 +1433,6 @@ 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 @@ -1223,7 +1447,6 @@ HSPLandroidx/constraintlayout/core/widgets/ChainHead;->(Landroidx/constrai HSPLandroidx/constraintlayout/core/widgets/ChainHead;->define()V HSPLandroidx/constraintlayout/core/widgets/ChainHead;->defineChainProperties()V HSPLandroidx/constraintlayout/core/widgets/ChainHead;->isMatchConstraintEqualityCandidate(Landroidx/constraintlayout/core/widgets/ConstraintWidget;I)Z -HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$1;->()V HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;->()V HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;->(Ljava/lang/String;I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;->values()[Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type; @@ -1232,10 +1455,8 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->connect(Landroidx/ HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getDependents()Ljava/util/HashSet; HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getFinalValue()I HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getMargin()I -HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getOpposite()Landroidx/constraintlayout/core/widgets/ConstraintAnchor; HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getSolverVariable()Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getTarget()Landroidx/constraintlayout/core/widgets/ConstraintAnchor; -HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->hasCenteredDependents()Z HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->hasDependents()Z HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->hasFinalValue()Z HSPLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->isConnected()Z @@ -1251,6 +1472,7 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->addAnchors()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->addFirst()Z +HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->addToSolver(Landroidx/constraintlayout/core/LinearSystem;Z)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->applyConstraints(Landroidx/constraintlayout/core/LinearSystem;ZZZZLandroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/widgets/ConstraintWidget$DimensionBehaviour;ZLandroidx/constraintlayout/core/widgets/ConstraintAnchor;Landroidx/constraintlayout/core/widgets/ConstraintAnchor;IIIIFZZZZZIIIIFZ)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->createObjectVariables(Landroidx/constraintlayout/core/LinearSystem;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getAnchor(Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;)Landroidx/constraintlayout/core/widgets/ConstraintAnchor; @@ -1270,7 +1492,6 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getMinWidth()I HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getParent()Landroidx/constraintlayout/core/widgets/ConstraintWidget; HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getVerticalBiasPercent()F HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getVerticalDimensionBehaviour()Landroidx/constraintlayout/core/widgets/ConstraintWidget$DimensionBehaviour; -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getVerticalMargin()I HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getVisibility()I HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getWidth()I HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getX()I @@ -1279,7 +1500,6 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasBaseline()Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasDanglingDimension(I)Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasDependencies()Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasDimensionOverride()Z -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->hasResolvedTargets(II)Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->immediateConnect(Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;Landroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;II)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->isChainHead(I)Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->isHorizontalSolvingPassDone()Z @@ -1301,7 +1521,6 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setBaselineDistanc HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setCompanionWidget(Ljava/lang/Object;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setDimensionRatio(Ljava/lang/String;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFinalHorizontal(II)V -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFinalLeft(I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFinalTop(I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFinalVertical(II)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFrame(IIII)V @@ -1323,7 +1542,6 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setMinWidth(I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setParent(Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalBiasPercent(F)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalChainStyle(I)V -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalDimension(II)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalDimensionBehaviour(Landroidx/constraintlayout/core/widgets/ConstraintWidget$DimensionBehaviour;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalMatchStyle(IIIF)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalWeight(F)V @@ -1338,8 +1556,6 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addChain(Landroidx/constraintlayout/core/widgets/ConstraintWidget;I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addChildrenToSolver(Landroidx/constraintlayout/core/LinearSystem;)Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addHorizontalChain(Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addHorizontalWrapMaxVariable(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;)V -HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addHorizontalWrapMinVariable(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addMaxWrap(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;Landroidx/constraintlayout/core/SolverVariable;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addMinWrap(Landroidx/constraintlayout/core/widgets/ConstraintAnchor;Landroidx/constraintlayout/core/SolverVariable;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->addVerticalChain(Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V @@ -1363,19 +1579,8 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->setPass(I HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->setRtl(Z)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->updateChildrenFromSolver(Landroidx/constraintlayout/core/LinearSystem;[Z)Z HSPLandroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;->updateHierarchy()V -HSPLandroidx/constraintlayout/core/widgets/Guideline$1;->()V HSPLandroidx/constraintlayout/core/widgets/Guideline;->()V -HSPLandroidx/constraintlayout/core/widgets/Guideline;->addToSolver(Landroidx/constraintlayout/core/LinearSystem;Z)V -HSPLandroidx/constraintlayout/core/widgets/Guideline;->getAnchor(Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type;)Landroidx/constraintlayout/core/widgets/ConstraintAnchor; -HSPLandroidx/constraintlayout/core/widgets/Guideline;->getOrientation()I -HSPLandroidx/constraintlayout/core/widgets/Guideline;->getRelativeBegin()I -HSPLandroidx/constraintlayout/core/widgets/Guideline;->getRelativeEnd()I -HSPLandroidx/constraintlayout/core/widgets/Guideline;->isResolvedVertically()Z -HSPLandroidx/constraintlayout/core/widgets/Guideline;->setFinalValue(I)V -HSPLandroidx/constraintlayout/core/widgets/Guideline;->setGuideBegin(I)V -HSPLandroidx/constraintlayout/core/widgets/Guideline;->setGuideEnd(I)V HSPLandroidx/constraintlayout/core/widgets/Guideline;->setOrientation(I)V -HSPLandroidx/constraintlayout/core/widgets/Guideline;->updateFromSolver(Landroidx/constraintlayout/core/LinearSystem;Z)V HSPLandroidx/constraintlayout/core/widgets/HelperWidget;->()V HSPLandroidx/constraintlayout/core/widgets/HelperWidget;->add(Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V HSPLandroidx/constraintlayout/core/widgets/HelperWidget;->removeAllIds()V @@ -1439,11 +1644,13 @@ HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->(Landroid HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->captureLayoutInfo(IIIIII)V HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->didMeasures()V HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->isSimilarSpec(III)Z +HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->measure(Landroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measure;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->()V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->access$000(Landroidx/constraintlayout/widget/ConstraintLayout;)I HSPLandroidx/constraintlayout/widget/ConstraintLayout;->access$100(Landroidx/constraintlayout/widget/ConstraintLayout;)Ljava/util/ArrayList; +HSPLandroidx/constraintlayout/widget/ConstraintLayout;->applyConstraintsFromLayoutParams(ZLandroid/view/View;Landroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;Landroid/util/SparseArray;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->checkLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Z HSPLandroidx/constraintlayout/widget/ConstraintLayout;->dispatchDraw(Landroid/graphics/Canvas;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams; @@ -1485,8 +1692,6 @@ HSPLandroidx/constraintlayout/widget/ConstraintSet;->applyToInternal(Landroidx/c HSPLandroidx/constraintlayout/widget/ConstraintSet;->clone(Landroid/content/Context;I)V HSPLandroidx/constraintlayout/widget/ConstraintSet;->clone(Landroidx/constraintlayout/widget/ConstraintLayout;)V HSPLandroidx/constraintlayout/widget/Guideline;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/constraintlayout/widget/Guideline;->setGuidelineBegin(I)V -HSPLandroidx/constraintlayout/widget/Guideline;->setGuidelineEnd(I)V HSPLandroidx/constraintlayout/widget/R$styleable;->()V HSPLandroidx/coordinatorlayout/R$styleable;->()V HSPLandroidx/coordinatorlayout/widget/CoordinatorLayout$Behavior;->(Landroid/content/Context;Landroid/util/AttributeSet;)V @@ -1670,10 +1875,6 @@ HSPLandroidx/core/graphics/ColorUtils;->compositeAlpha(II)I HSPLandroidx/core/graphics/ColorUtils;->compositeColors(II)I HSPLandroidx/core/graphics/ColorUtils;->compositeComponent(IIIII)I HSPLandroidx/core/graphics/ColorUtils;->setAlphaComponent(II)I -HSPLandroidx/core/graphics/Insets;->()V -HSPLandroidx/core/graphics/Insets;->(IIII)V -HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; -HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; HSPLandroidx/core/graphics/TypefaceCompat;->()V HSPLandroidx/core/graphics/TypefaceCompat;->create(Landroid/content/Context;Landroid/graphics/Typeface;I)Landroid/graphics/Typeface; HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V @@ -1728,10 +1929,6 @@ 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 @@ -1800,6 +1997,7 @@ HSPLandroidx/core/view/NestedScrollingChildHelper;->isNestedScrollingEnabled()Z HSPLandroidx/core/view/NestedScrollingChildHelper;->setNestedScrollingEnabled(Z)V HSPLandroidx/core/view/NestedScrollingChildHelper;->setNestedScrollingParentForType(ILandroid/view/ViewParent;)V HSPLandroidx/core/view/NestedScrollingChildHelper;->startNestedScroll(II)Z +HSPLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll()V HSPLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll(I)V HSPLandroidx/core/view/NestedScrollingParentHelper;->(Landroid/view/ViewGroup;)V HSPLandroidx/core/view/NestedScrollingParentHelper;->onNestedScrollAccepted(Landroid/view/View;Landroid/view/View;II)V @@ -1845,17 +2043,12 @@ HSPLandroidx/core/view/ViewCompat$Api19Impl;->getAccessibilityLiveRegion(Landroi HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z HSPLandroidx/core/view/ViewCompat$Api19Impl;->notifySubtreeAccessibilityStateChanged(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;I)V -HSPLandroidx/core/view/ViewCompat$Api20Impl;->dispatchApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; HSPLandroidx/core/view/ViewCompat$Api20Impl;->requestApplyInsets(Landroid/view/View;)V HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V -HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; HSPLandroidx/core/view/ViewCompat$Api21Impl;->getElevation(Landroid/view/View;)F HSPLandroidx/core/view/ViewCompat$Api21Impl;->getZ(Landroid/view/View;)F HSPLandroidx/core/view/ViewCompat$Api21Impl;->setBackgroundTintList(Landroid/view/View;Landroid/content/res/ColorStateList;)V HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V -HSPLandroidx/core/view/ViewCompat$Api23Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/View;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat$Api26Impl;->getImportantForAutofill(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat$Api26Impl;->setImportantForAutofill(Landroid/view/View;I)V @@ -1875,7 +2068,6 @@ HSPLandroidx/core/view/ViewCompat$Api30Impl;->getStateDescription(Landroid/view/ HSPLandroidx/core/view/ViewCompat;->()V HSPLandroidx/core/view/ViewCompat;->accessibilityHeadingProperty()Landroidx/core/view/ViewCompat$AccessibilityViewProperty; HSPLandroidx/core/view/ViewCompat;->addAccessibilityAction(Landroid/view/View;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V -HSPLandroidx/core/view/ViewCompat;->dispatchApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/ViewCompat;->ensureAccessibilityDelegateCompat(Landroid/view/View;)V HSPLandroidx/core/view/ViewCompat;->getAccessibilityDelegate(Landroid/view/View;)Landroidx/core/view/AccessibilityDelegateCompat; HSPLandroidx/core/view/ViewCompat;->getAccessibilityDelegateInternal(Landroid/view/View;)Landroid/view/View$AccessibilityDelegate; @@ -1892,7 +2084,6 @@ HSPLandroidx/core/view/ViewCompat;->getMinimumHeight(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat;->getMinimumWidth(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat;->getPaddingEnd(Landroid/view/View;)I HSPLandroidx/core/view/ViewCompat;->getPaddingStart(Landroid/view/View;)I -HSPLandroidx/core/view/ViewCompat;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/ViewCompat;->getStateDescription(Landroid/view/View;)Ljava/lang/CharSequence; HSPLandroidx/core/view/ViewCompat;->getZ(Landroid/view/View;)F HSPLandroidx/core/view/ViewCompat;->hasAccessibilityDelegate(Landroid/view/View;)Z @@ -1904,7 +2095,6 @@ HSPLandroidx/core/view/ViewCompat;->isScreenReaderFocusable(Landroid/view/View;) HSPLandroidx/core/view/ViewCompat;->notifyViewAccessibilityStateChangedIfNeeded(Landroid/view/View;I)V HSPLandroidx/core/view/ViewCompat;->offsetLeftAndRight(Landroid/view/View;I)V HSPLandroidx/core/view/ViewCompat;->offsetTopAndBottom(Landroid/view/View;I)V -HSPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/ViewCompat;->paneTitleProperty()Landroidx/core/view/ViewCompat$AccessibilityViewProperty; HSPLandroidx/core/view/ViewCompat;->postInvalidateOnAnimation(Landroid/view/View;)V HSPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V @@ -1944,7 +2134,6 @@ HSPLandroidx/core/view/ViewGroupKt;->iterator(Landroid/view/ViewGroup;)Ljava/uti HSPLandroidx/core/view/ViewKt$doOnPreDraw$1;->(Lkotlin/jvm/functions/Function1;Landroid/view/View;)V HSPLandroidx/core/view/ViewKt$doOnPreDraw$1;->run()V HSPLandroidx/core/view/ViewKt;->doOnPreDraw(Landroid/view/View;Lkotlin/jvm/functions/Function1;)Landroidx/core/view/OneShotPreDrawListener; -HSPLandroidx/core/view/ViewKt;->isVisible(Landroid/view/View;)Z HSPLandroidx/core/view/ViewParentCompat;->onNestedScrollAccepted(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;II)V HSPLandroidx/core/view/ViewParentCompat;->onStartNestedScroll(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;II)Z HSPLandroidx/core/view/ViewParentCompat;->onStopNestedScroll(Landroid/view/ViewParent;Landroid/view/View;I)V @@ -1954,61 +2143,9 @@ HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$$ExternalSyntheticApiM HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V -HSPLandroidx/core/view/WindowInsetsCompat$Builder;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline5;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline6;->m()Landroid/view/WindowInsets$Builder; -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline8;->m()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->isConsumed()Z -HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline1;->m()Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline3;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V HSPLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I HSPLandroidx/core/view/WindowInsetsCompat$Type;->ime()I HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline0;->m()I -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline1;->m()I -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline2;->m()I -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline6;->m()I -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I -HSPLandroidx/core/view/WindowInsetsCompat;->()V -HSPLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V -HSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I -HSPLandroidx/core/view/WindowInsetsCompat;->isConsumed()Z -HSPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V -HSPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline11;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline3;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline6;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V @@ -2070,6 +2207,7 @@ HSPLandroidx/core/widget/TextViewCompat;->setLineHeight(Landroid/widget/TextView HSPLandroidx/core/widget/TextViewCompat;->wrapCustomSelectionActionModeCallback(Landroid/widget/TextView;Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode$Callback; HSPLandroidx/core/widget/TextViewOnReceiveContentListener;->()V HSPLandroidx/customview/poolingcontainer/PoolingContainer;->()V +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->callPoolingContainerOnReleaseForChildren(Landroid/view/ViewGroup;)V HSPLandroidx/customview/poolingcontainer/PoolingContainer;->setPoolingContainer(Landroid/view/View;Z)V HSPLandroidx/customview/widget/ExploreByTouchHelper$1;->()V HSPLandroidx/customview/widget/ExploreByTouchHelper$2;->()V @@ -2143,10 +2281,8 @@ HSPLandroidx/emoji2/text/SpannableBuilder;->create(Ljava/lang/Class;Ljava/lang/C HSPLandroidx/emoji2/text/SpannableBuilder;->getSpanFlags(Ljava/lang/Object;)I HSPLandroidx/emoji2/text/SpannableBuilder;->getSpanStart(Ljava/lang/Object;)I HSPLandroidx/emoji2/text/SpannableBuilder;->getSpans(IILjava/lang/Class;)[Ljava/lang/Object; -HSPLandroidx/emoji2/text/SpannableBuilder;->getWatcherFor(Ljava/lang/Object;)Landroidx/emoji2/text/SpannableBuilder$WatcherWrapper; HSPLandroidx/emoji2/text/SpannableBuilder;->isWatcher(Ljava/lang/Class;)Z HSPLandroidx/emoji2/text/SpannableBuilder;->isWatcher(Ljava/lang/Object;)Z -HSPLandroidx/emoji2/text/SpannableBuilder;->nextSpanTransition(IILjava/lang/Class;)I HSPLandroidx/emoji2/text/SpannableBuilder;->removeSpan(Ljava/lang/Object;)V HSPLandroidx/emoji2/text/SpannableBuilder;->setSpan(Ljava/lang/Object;III)V HSPLandroidx/emoji2/viewsintegration/EmojiEditTextHelper$HelperInternal19;->(Landroid/widget/EditText;Z)V @@ -2296,7 +2432,6 @@ HSPLandroidx/fragment/app/Fragment;->prepareCallInternal(Landroidx/activity/resu HSPLandroidx/fragment/app/Fragment;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; HSPLandroidx/fragment/app/Fragment;->registerOnPreAttachListener(Landroidx/fragment/app/Fragment$OnPreAttachedListener;)V HSPLandroidx/fragment/app/Fragment;->requireActivity()Landroidx/fragment/app/FragmentActivity; -HSPLandroidx/fragment/app/Fragment;->requireArguments()Landroid/os/Bundle; HSPLandroidx/fragment/app/Fragment;->requireContext()Landroid/content/Context; HSPLandroidx/fragment/app/Fragment;->requireView()Landroid/view/View; HSPLandroidx/fragment/app/Fragment;->restoreChildFragmentState()V @@ -2363,10 +2498,8 @@ HSPLandroidx/fragment/app/FragmentContainer;->instantiate(Landroid/content/Conte HSPLandroidx/fragment/app/FragmentContainerView;->(Landroid/content/Context;)V HSPLandroidx/fragment/app/FragmentContainerView;->(Landroid/content/Context;Landroid/util/AttributeSet;Landroidx/fragment/app/FragmentManager;)V HSPLandroidx/fragment/app/FragmentContainerView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V -HSPLandroidx/fragment/app/FragmentContainerView;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; HSPLandroidx/fragment/app/FragmentContainerView;->dispatchDraw(Landroid/graphics/Canvas;)V HSPLandroidx/fragment/app/FragmentContainerView;->drawChild(Landroid/graphics/Canvas;Landroid/view/View;J)Z -HSPLandroidx/fragment/app/FragmentContainerView;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; HSPLandroidx/fragment/app/FragmentContainerView;->setDrawDisappearingViewsLast(Z)V HSPLandroidx/fragment/app/FragmentController;->(Landroidx/fragment/app/FragmentHostCallback;)V HSPLandroidx/fragment/app/FragmentController;->attachHost(Landroidx/fragment/app/Fragment;)V @@ -2520,7 +2653,6 @@ HSPLandroidx/fragment/app/FragmentStateManager;->create()V HSPLandroidx/fragment/app/FragmentStateManager;->createView()V HSPLandroidx/fragment/app/FragmentStateManager;->ensureInflatedView()V HSPLandroidx/fragment/app/FragmentStateManager;->getFragment()Landroidx/fragment/app/Fragment; -HSPLandroidx/fragment/app/FragmentStateManager;->isFragmentViewChild(Landroid/view/View;)Z HSPLandroidx/fragment/app/FragmentStateManager;->moveToExpectedState()V HSPLandroidx/fragment/app/FragmentStateManager;->pause()V HSPLandroidx/fragment/app/FragmentStateManager;->restoreState(Ljava/lang/ClassLoader;)V @@ -2848,7 +2980,6 @@ HSPLandroidx/lifecycle/SavedStateViewModelFactory;->create(Ljava/lang/Class;Land HSPLandroidx/lifecycle/SavedStateViewModelFactory;->onRequery(Landroidx/lifecycle/ViewModel;)V HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->()V HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->access$getANDROID_VIEWMODEL_SIGNATURE$p()Ljava/util/List; -HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->access$getVIEWMODEL_SIGNATURE$p()Ljava/util/List; HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->findMatchingConstructor(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/reflect/Constructor; HSPLandroidx/lifecycle/Transformations$map$1;->(Landroidx/lifecycle/MediatorLiveData;Lkotlin/jvm/functions/Function1;)V HSPLandroidx/lifecycle/Transformations$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -2895,7 +3026,6 @@ HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->() HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V -HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; HSPLandroidx/lifecycle/ViewModelProvider$OnRequeryFactory;->()V HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V @@ -3753,7 +3883,6 @@ HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$$ExternalSyntheticApiMod HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$$ExternalSyntheticApiModelOutline2;->m(Landroid/media/MediaCodecInfo;)Z HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$$ExternalSyntheticApiModelOutline3;->m(Landroid/media/MediaCodecInfo;)Z HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$CodecKey;->(Ljava/lang/String;ZZ)V -HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$CodecKey;->equals(Ljava/lang/Object;)Z HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$CodecKey;->hashCode()I HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$MediaCodecListCompatV21;->(ZZ)V HSPLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$MediaCodecListCompatV21;->ensureMediaCodecInfosInitialized()V @@ -4496,18 +4625,6 @@ HSPLandroidx/media3/session/SessionTokenImplBase;->getServiceName()Ljava/lang/St HSPLandroidx/media3/session/SessionTokenImplBase;->getType()I HSPLandroidx/media3/session/SessionTokenImplBase;->getUid()I HSPLandroidx/media3/session/SessionTokenImplBase;->isLegacySession()Z -HSPLandroidx/media3/ui/AspectRatioFrameLayout$AspectRatioUpdateDispatcher;->(Landroidx/media3/ui/AspectRatioFrameLayout;)V -HSPLandroidx/media3/ui/AspectRatioFrameLayout$AspectRatioUpdateDispatcher;->(Landroidx/media3/ui/AspectRatioFrameLayout;Landroidx/media3/ui/AspectRatioFrameLayout$1;)V -HSPLandroidx/media3/ui/AspectRatioFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/media3/ui/AspectRatioFrameLayout;->onMeasure(II)V -HSPLandroidx/media3/ui/AspectRatioFrameLayout;->setResizeMode(I)V -HSPLandroidx/media3/ui/PlayerView$ComponentListener;->(Landroidx/media3/ui/PlayerView;)V -HSPLandroidx/media3/ui/PlayerView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/media3/ui/PlayerView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLandroidx/media3/ui/PlayerView;->setResizeMode(I)V -HSPLandroidx/media3/ui/PlayerView;->setResizeModeRaw(Landroidx/media3/ui/AspectRatioFrameLayout;I)V -HSPLandroidx/media3/ui/PlayerView;->updateContentDescription()V -HSPLandroidx/media3/ui/R$styleable;->()V HSPLandroidx/multidex/MultiDex;->()V HSPLandroidx/multidex/MultiDex;->install(Landroid/content/Context;)V HSPLandroidx/multidex/MultiDex;->isVMMultidexCapable(Ljava/lang/String;)Z @@ -4933,53 +5050,6 @@ HSPLandroidx/recyclerview/widget/ChildHelper;->getUnfilteredChildCount()I HSPLandroidx/recyclerview/widget/ChildHelper;->isHidden(Landroid/view/View;)Z HSPLandroidx/recyclerview/widget/ChildHelper;->removeAllViewsUnfiltered()V HSPLandroidx/recyclerview/widget/ChildHelper;->removeViewIfHidden(Landroid/view/View;)Z -HSPLandroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode;->()V -HSPLandroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode;->(Ljava/lang/String;I)V -HSPLandroidx/recyclerview/widget/ConcatAdapter$Config;->()V -HSPLandroidx/recyclerview/widget/ConcatAdapter$Config;->(ZLandroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode;)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->(Landroidx/recyclerview/widget/ConcatAdapter$Config;Ljava/util/List;)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->(Landroidx/recyclerview/widget/ConcatAdapter$Config;[Landroidx/recyclerview/widget/RecyclerView$Adapter;)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->([Landroidx/recyclerview/widget/RecyclerView$Adapter;)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->addAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Z -HSPLandroidx/recyclerview/widget/ConcatAdapter;->findRelativeAdapterPositionIn(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I -HSPLandroidx/recyclerview/widget/ConcatAdapter;->getAdapters()Ljava/util/List; -HSPLandroidx/recyclerview/widget/ConcatAdapter;->getItemCount()I -HSPLandroidx/recyclerview/widget/ConcatAdapter;->getItemViewType(I)I -HSPLandroidx/recyclerview/widget/ConcatAdapter;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V -HSPLandroidx/recyclerview/widget/ConcatAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HSPLandroidx/recyclerview/widget/ConcatAdapter;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;->()V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->(Landroidx/recyclerview/widget/ConcatAdapter;Landroidx/recyclerview/widget/ConcatAdapter$Config;)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->addAdapter(ILandroidx/recyclerview/widget/RecyclerView$Adapter;)Z -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->addAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Z -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->calculateAndUpdateStateRestorationPolicy()V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->computeStateRestorationPolicy()Landroidx/recyclerview/widget/RecyclerView$Adapter$StateRestorationPolicy; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->countItemsBefore(Landroidx/recyclerview/widget/NestedAdapterWrapper;)I -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->findWrapperAndLocalPosition(I)Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->findWrapperFor(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Landroidx/recyclerview/widget/NestedAdapterWrapper; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->getCopyOfAdapters()Ljava/util/List; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->getItemViewType(I)I -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->getLocalAdapterPosition(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->getTotalCount()I -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->getWrapper(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Landroidx/recyclerview/widget/NestedAdapterWrapper; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->hasStableIds()Z -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->indexOfWrapper(Landroidx/recyclerview/widget/RecyclerView$Adapter;)I -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->isAttachedTo(Landroidx/recyclerview/widget/RecyclerView;)Z -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onItemRangeChanged(Landroidx/recyclerview/widget/NestedAdapterWrapper;IILjava/lang/Object;)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onItemRangeInserted(Landroidx/recyclerview/widget/NestedAdapterWrapper;II)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V -HSPLandroidx/recyclerview/widget/ConcatAdapterController;->releaseWrapperAndLocalPosition(Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;)V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager$Companion;->()V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager;->()V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager;->(Landroid/content/Context;)V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager;->onLayoutCompleted(Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager;->scrollToPositionWithOffset(IILkotlin/jvm/functions/Function0;)V -HSPLandroidx/recyclerview/widget/ConversationLayoutManager;->supportsPredictiveItemAnimations()Z HSPLandroidx/recyclerview/widget/DefaultItemAnimator$3;->(Landroidx/recyclerview/widget/DefaultItemAnimator;Ljava/util/ArrayList;)V HSPLandroidx/recyclerview/widget/DefaultItemAnimator$3;->run()V HSPLandroidx/recyclerview/widget/DefaultItemAnimator$5;->(Landroidx/recyclerview/widget/DefaultItemAnimator;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroid/view/View;Landroid/view/ViewPropertyAnimator;)V @@ -5020,6 +5090,7 @@ HSPLandroidx/recyclerview/widget/GapWorker$LayoutPrefetchRegistryImpl;->clearPre HSPLandroidx/recyclerview/widget/GapWorker;->()V HSPLandroidx/recyclerview/widget/GapWorker;->()V HSPLandroidx/recyclerview/widget/GapWorker;->add(Landroidx/recyclerview/widget/RecyclerView;)V +HSPLandroidx/recyclerview/widget/GapWorker;->remove(Landroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/ItemTouchHelper$1;->(Landroidx/recyclerview/widget/ItemTouchHelper;)V HSPLandroidx/recyclerview/widget/ItemTouchHelper$2;->(Landroidx/recyclerview/widget/ItemTouchHelper;)V HSPLandroidx/recyclerview/widget/ItemTouchHelper$2;->onInterceptTouchEvent(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/MotionEvent;)Z @@ -5059,9 +5130,6 @@ 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 @@ -5087,12 +5155,12 @@ 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;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->onLayoutChildren(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->onLayoutCompleted(Landroidx/recyclerview/widget/RecyclerView$State;)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->resolveIsInfinite()Z HSPLandroidx/recyclerview/widget/LinearLayoutManager;->resolveShouldLayoutReverse()V -HSPLandroidx/recyclerview/widget/LinearLayoutManager;->scrollToPositionWithOffset(II)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->setOrientation(I)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->setReverseLayout(Z)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->setStackFromEnd(Z)V @@ -5108,27 +5176,14 @@ HSPLandroidx/recyclerview/widget/LinearLayoutManager;->updateLayoutStateToFillSt HSPLandroidx/recyclerview/widget/ListAdapter$1;->(Landroidx/recyclerview/widget/ListAdapter;)V HSPLandroidx/recyclerview/widget/ListAdapter$1;->onCurrentListChanged(Ljava/util/List;Ljava/util/List;)V HSPLandroidx/recyclerview/widget/ListAdapter;->(Landroidx/recyclerview/widget/DiffUtil$ItemCallback;)V -HSPLandroidx/recyclerview/widget/ListAdapter;->getCurrentList()Ljava/util/List; HSPLandroidx/recyclerview/widget/ListAdapter;->getItem(I)Ljava/lang/Object; HSPLandroidx/recyclerview/widget/ListAdapter;->getItemCount()I HSPLandroidx/recyclerview/widget/ListAdapter;->onCurrentListChanged(Ljava/util/List;Ljava/util/List;)V HSPLandroidx/recyclerview/widget/ListAdapter;->submitList(Ljava/util/List;Ljava/lang/Runnable;)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->(Landroidx/recyclerview/widget/NestedAdapterWrapper;)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->onItemRangeChanged(IILjava/lang/Object;)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->onItemRangeInserted(II)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper;->(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/NestedAdapterWrapper$Callback;Landroidx/recyclerview/widget/ViewTypeStorage;Landroidx/recyclerview/widget/StableIdStorage$StableIdLookup;)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper;->getCachedItemCount()I -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper;->getItemViewType(I)I -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V -HSPLandroidx/recyclerview/widget/NestedAdapterWrapper;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HSPLandroidx/recyclerview/widget/OpReorderer;->(Landroidx/recyclerview/widget/OpReorderer$Callback;)V 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 @@ -5174,13 +5229,11 @@ HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->()V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->bindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->createViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->findRelativeAdapterPositionIn(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)I -HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->getStateRestorationPolicy()Landroidx/recyclerview/widget/RecyclerView$Adapter$StateRestorationPolicy; HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->hasObservers()Z HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->hasStableIds()Z HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->notifyItemRangeChanged(IILjava/lang/Object;)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->notifyItemRangeInserted(II)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;ILjava/util/List;)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->registerAdapterDataObserver(Landroidx/recyclerview/widget/RecyclerView$AdapterDataObserver;)V HSPLandroidx/recyclerview/widget/RecyclerView$Adapter;->setHasStableIds(Z)V @@ -5211,16 +5264,9 @@ HSPLandroidx/recyclerview/widget/RecyclerView$ItemAnimatorRestoreListener;->onAn HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->()V HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->getItemOffsets(Landroid/graphics/Rect;ILandroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V -HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V 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 @@ -5239,8 +5285,8 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->detachAndScrapAtta HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->detachViewAt(I)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->detachViewInternal(ILandroid/view/View;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->dispatchAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView;)V +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->dispatchDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->generateLayoutParams(Landroid/content/Context;Landroid/util/AttributeSet;)Landroidx/recyclerview/widget/RecyclerView$LayoutParams; -HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroidx/recyclerview/widget/RecyclerView$LayoutParams; HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getBaseline()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getBottomDecorationHeight(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getChildAt(I)Landroid/view/View; @@ -5248,26 +5294,19 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getChildCount()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getChildMeasureSpec(IIIIZ)I 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;->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 HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getPaddingLeft()I 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 @@ -5279,6 +5318,8 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->layoutDecoratedWit HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->measureChildWithMargins(Landroid/view/View;II)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onAdapterChanged(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$Adapter;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView;)V +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;)V +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onInitializeAccessibilityEvent(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;Landroid/view/accessibility/AccessibilityEvent;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onInitializeAccessibilityNodeInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V @@ -5294,14 +5335,11 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->requestLayout()V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->scrapOrRecycleView(Landroidx/recyclerview/widget/RecyclerView$Recycler;ILandroid/view/View;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setExactMeasureSpecsFrom(Landroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setMeasureSpecs(II)V -HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setMeasuredDimension(II)V -HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setMeasuredDimension(Landroid/graphics/Rect;II)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setMeasuredDimensionFromChildren(II)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->setRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->shouldMeasureChild(Landroid/view/View;IILandroidx/recyclerview/widget/RecyclerView$LayoutParams;)Z HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->stopSmoothScroller()V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->(Landroid/view/ViewGroup$MarginLayoutParams;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->getViewLayoutPosition()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->isItemChanged()Z HSPLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->isItemRemoved()Z @@ -5318,7 +5356,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->getRecycledView HSPLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->getScrapDataForType(I)Landroidx/recyclerview/widget/RecyclerView$RecycledViewPool$ScrapData; HSPLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->onAdapterChanged(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$Adapter;Z)V HSPLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->runningAverage(JJ)J -HSPLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->setMaxRecycledViews(II)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->(Landroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->attachAccessibilityDelegateOnBind(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->clear()V @@ -5327,7 +5364,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->clearScrap()V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getRecycledViewPool()Landroidx/recyclerview/widget/RecyclerView$RecycledViewPool; HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getScrapCount()I HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getScrapList()Ljava/util/List; -HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getScrapOrCachedViewForId(JIZ)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getScrapOrHiddenOrCachedHolderForPosition(IZ)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getViewForPosition(I)Landroid/view/View; HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->getViewForPosition(IZ)Landroid/view/View; @@ -5337,6 +5373,8 @@ HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->maybeSendPoolingContain HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->offsetPositionRecordsForInsert(II)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->onAdapterChanged(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/RecyclerView$Adapter;Z)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->onAttachedToWindow()V +HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->onDetachedFromWindow()V +HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->poolingContainerDetach(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->poolingContainerDetach(Landroidx/recyclerview/widget/RecyclerView$Adapter;Z)V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->recycleAndClearCachedViews()V HSPLandroidx/recyclerview/widget/RecyclerView$Recycler;->scrapView(Landroid/view/View;)V @@ -5367,7 +5405,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->clearReturnedFromScra HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->clearTmpDetachFlag()V HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getAdapterPosition()I HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getBindingAdapterPosition()I -HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getItemId()J HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getItemViewType()I HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getLayoutPosition()I HSPLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->getUnmodifiedPayloads()Ljava/util/List; @@ -5391,7 +5428,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->(Landroid/content/Context; HSPLandroidx/recyclerview/widget/RecyclerView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/recyclerview/widget/RecyclerView;->access$000(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V HSPLandroidx/recyclerview/widget/RecyclerView;->access$100(Landroidx/recyclerview/widget/RecyclerView;I)V -HSPLandroidx/recyclerview/widget/RecyclerView;->access$500(Landroidx/recyclerview/widget/RecyclerView;II)V HSPLandroidx/recyclerview/widget/RecyclerView;->addItemDecoration(Landroidx/recyclerview/widget/RecyclerView$ItemDecoration;)V HSPLandroidx/recyclerview/widget/RecyclerView;->addItemDecoration(Landroidx/recyclerview/widget/RecyclerView$ItemDecoration;I)V HSPLandroidx/recyclerview/widget/RecyclerView;->addOnChildAttachStateChangeListener(Landroidx/recyclerview/widget/RecyclerView$OnChildAttachStateChangeListener;)V @@ -5425,21 +5461,16 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->findInterceptingOnItemTouchListe HSPLandroidx/recyclerview/widget/RecyclerView;->findMinMaxChildLayoutPositions([I)V HSPLandroidx/recyclerview/widget/RecyclerView;->findNestedRecyclerView(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView; HSPLandroidx/recyclerview/widget/RecyclerView;->generateLayoutParams(Landroid/util/AttributeSet;)Landroid/view/ViewGroup$LayoutParams; -HSPLandroidx/recyclerview/widget/RecyclerView;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams; HSPLandroidx/recyclerview/widget/RecyclerView;->getAccessibilityClassName()Ljava/lang/CharSequence; HSPLandroidx/recyclerview/widget/RecyclerView;->getAdapter()Landroidx/recyclerview/widget/RecyclerView$Adapter; HSPLandroidx/recyclerview/widget/RecyclerView;->getAdapterPositionInRecyclerView(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)I HSPLandroidx/recyclerview/widget/RecyclerView;->getBaseline()I HSPLandroidx/recyclerview/widget/RecyclerView;->getChangedHolderKey(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)J -HSPLandroidx/recyclerview/widget/RecyclerView;->getChildViewHolder(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; HSPLandroidx/recyclerview/widget/RecyclerView;->getChildViewHolderInt(Landroid/view/View;)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HSPLandroidx/recyclerview/widget/RecyclerView;->getDecoratedBoundsWithMarginsInt(Landroid/view/View;Landroid/graphics/Rect;)V HSPLandroidx/recyclerview/widget/RecyclerView;->getFullClassName(Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/recyclerview/widget/RecyclerView;->getItemAnimator()Landroidx/recyclerview/widget/RecyclerView$ItemAnimator; HSPLandroidx/recyclerview/widget/RecyclerView;->getItemDecorInsetsForChild(Landroid/view/View;)Landroid/graphics/Rect; HSPLandroidx/recyclerview/widget/RecyclerView;->getLayoutManager()Landroidx/recyclerview/widget/RecyclerView$LayoutManager; HSPLandroidx/recyclerview/widget/RecyclerView;->getNanoTime()J -HSPLandroidx/recyclerview/widget/RecyclerView;->getRecycledViewPool()Landroidx/recyclerview/widget/RecyclerView$RecycledViewPool; HSPLandroidx/recyclerview/widget/RecyclerView;->getScrollState()I HSPLandroidx/recyclerview/widget/RecyclerView;->getScrollingChildHelper()Landroidx/core/view/NestedScrollingChildHelper; HSPLandroidx/recyclerview/widget/RecyclerView;->hasPendingAdapterUpdates()Z @@ -5447,7 +5478,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->initAdapterManager()V HSPLandroidx/recyclerview/widget/RecyclerView;->initAutofill()V HSPLandroidx/recyclerview/widget/RecyclerView;->initChildrenHelper()V HSPLandroidx/recyclerview/widget/RecyclerView;->invalidateGlows()V -HSPLandroidx/recyclerview/widget/RecyclerView;->invalidateItemDecorations()V HSPLandroidx/recyclerview/widget/RecyclerView;->isAccessibilityEnabled()Z HSPLandroidx/recyclerview/widget/RecyclerView;->isAttachedToWindow()Z HSPLandroidx/recyclerview/widget/RecyclerView;->isComputingLayout()Z @@ -5456,6 +5486,7 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->markKnownViewsInvalid()V HSPLandroidx/recyclerview/widget/RecyclerView;->offsetPositionRecordsForInsert(II)V HSPLandroidx/recyclerview/widget/RecyclerView;->onAttachedToWindow()V HSPLandroidx/recyclerview/widget/RecyclerView;->onChildAttachedToWindow(Landroid/view/View;)V +HSPLandroidx/recyclerview/widget/RecyclerView;->onDetachedFromWindow()V HSPLandroidx/recyclerview/widget/RecyclerView;->onDraw(Landroid/graphics/Canvas;)V HSPLandroidx/recyclerview/widget/RecyclerView;->onEnterLayoutOrScroll()V HSPLandroidx/recyclerview/widget/RecyclerView;->onExitLayoutOrScroll()V @@ -5481,8 +5512,6 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->setAccessibilityDelegateCompat(L HSPLandroidx/recyclerview/widget/RecyclerView;->setAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V HSPLandroidx/recyclerview/widget/RecyclerView;->setAdapterInternal(Landroidx/recyclerview/widget/RecyclerView$Adapter;ZZ)V HSPLandroidx/recyclerview/widget/RecyclerView;->setClipToPadding(Z)V -HSPLandroidx/recyclerview/widget/RecyclerView;->setEdgeEffectFactory(Landroidx/recyclerview/widget/RecyclerView$EdgeEffectFactory;)V -HSPLandroidx/recyclerview/widget/RecyclerView;->setHasFixedSize(Z)V HSPLandroidx/recyclerview/widget/RecyclerView;->setItemAnimator(Landroidx/recyclerview/widget/RecyclerView$ItemAnimator;)V HSPLandroidx/recyclerview/widget/RecyclerView;->setLayoutFrozen(Z)V HSPLandroidx/recyclerview/widget/RecyclerView;->setLayoutManager(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)V @@ -5493,6 +5522,7 @@ HSPLandroidx/recyclerview/widget/RecyclerView;->startInterceptRequestLayout()V HSPLandroidx/recyclerview/widget/RecyclerView;->startNestedScroll(II)Z HSPLandroidx/recyclerview/widget/RecyclerView;->stopGlowAnimations(Landroid/view/MotionEvent;)Z HSPLandroidx/recyclerview/widget/RecyclerView;->stopInterceptRequestLayout(Z)V +HSPLandroidx/recyclerview/widget/RecyclerView;->stopNestedScroll()V HSPLandroidx/recyclerview/widget/RecyclerView;->stopNestedScroll(I)V HSPLandroidx/recyclerview/widget/RecyclerView;->stopScroll()V HSPLandroidx/recyclerview/widget/RecyclerView;->stopScrollersInternal()V @@ -5521,9 +5551,6 @@ HSPLandroidx/recyclerview/widget/SimpleItemAnimator;->dispatchAddStarting(Landro HSPLandroidx/recyclerview/widget/SimpleItemAnimator;->onAddFinished(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V HSPLandroidx/recyclerview/widget/SimpleItemAnimator;->onAddStarting(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V HSPLandroidx/recyclerview/widget/SimpleItemAnimator;->setSupportsChangeAnimations(Z)V -HSPLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage$1;->(Landroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;)V -HSPLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;->()V -HSPLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;->createStableIdLookup()Landroidx/recyclerview/widget/StableIdStorage$StableIdLookup; HSPLandroidx/recyclerview/widget/ViewBoundsCheck$BoundFlags;->()V HSPLandroidx/recyclerview/widget/ViewBoundsCheck$BoundFlags;->addFlags(I)V HSPLandroidx/recyclerview/widget/ViewBoundsCheck$BoundFlags;->boundsMatch()Z @@ -5534,22 +5561,17 @@ HSPLandroidx/recyclerview/widget/ViewBoundsCheck;->(Landroidx/recyclerview HSPLandroidx/recyclerview/widget/ViewBoundsCheck;->findOneViewWithinBoundFlags(IIII)Landroid/view/View; HSPLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->()V HSPLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->()V +HSPLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->drainCache()V HSPLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->obtain()Landroidx/recyclerview/widget/ViewInfoStore$InfoRecord; HSPLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->recycle(Landroidx/recyclerview/widget/ViewInfoStore$InfoRecord;)V HSPLandroidx/recyclerview/widget/ViewInfoStore;->()V HSPLandroidx/recyclerview/widget/ViewInfoStore;->addToPostLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)V HSPLandroidx/recyclerview/widget/ViewInfoStore;->clear()V HSPLandroidx/recyclerview/widget/ViewInfoStore;->getFromOldChangeHolders(J)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; +HSPLandroidx/recyclerview/widget/ViewInfoStore;->onDetach()V HSPLandroidx/recyclerview/widget/ViewInfoStore;->onViewDetached(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V HSPLandroidx/recyclerview/widget/ViewInfoStore;->process(Landroidx/recyclerview/widget/ViewInfoStore$ProcessCallback;)V HSPLandroidx/recyclerview/widget/ViewInfoStore;->removeFromDisappearedInLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->(Landroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;Landroidx/recyclerview/widget/NestedAdapterWrapper;)V -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->globalToLocal(I)I -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->localToGlobal(I)I -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->()V -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->createViewTypeWrapper(Landroidx/recyclerview/widget/NestedAdapterWrapper;)Landroidx/recyclerview/widget/ViewTypeStorage$ViewTypeLookup; -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->getWrapperForGlobalType(I)Landroidx/recyclerview/widget/NestedAdapterWrapper; -HSPLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->obtainViewType(Landroidx/recyclerview/widget/NestedAdapterWrapper;)I HSPLandroidx/savedstate/Recreator$Companion;->()V HSPLandroidx/savedstate/Recreator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLandroidx/savedstate/Recreator;->()V @@ -5625,7 +5647,6 @@ HSPLcom/airbnb/lottie/LottieAnimationView$UserActionTaken;->()V HSPLcom/airbnb/lottie/LottieAnimationView$UserActionTaken;->(Ljava/lang/String;I)V HSPLcom/airbnb/lottie/LottieAnimationView;->()V HSPLcom/airbnb/lottie/LottieAnimationView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLcom/airbnb/lottie/LottieAnimationView;->addValueCallback(Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;)V HSPLcom/airbnb/lottie/LottieAnimationView;->addValueCallback(Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/SimpleLottieValueCallback;)V HSPLcom/airbnb/lottie/LottieAnimationView;->cancelLoaderTask()V HSPLcom/airbnb/lottie/LottieAnimationView;->clearComposition()V @@ -5633,7 +5654,6 @@ HSPLcom/airbnb/lottie/LottieAnimationView;->enableMergePathsForKitKatAndAbove(Z) HSPLcom/airbnb/lottie/LottieAnimationView;->fromRawRes(I)Lcom/airbnb/lottie/LottieTask; HSPLcom/airbnb/lottie/LottieAnimationView;->init(Landroid/util/AttributeSet;I)V HSPLcom/airbnb/lottie/LottieAnimationView;->invalidate()V -HSPLcom/airbnb/lottie/LottieAnimationView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V HSPLcom/airbnb/lottie/LottieAnimationView;->onAttachedToWindow()V HSPLcom/airbnb/lottie/LottieAnimationView;->pauseAnimation()V HSPLcom/airbnb/lottie/LottieAnimationView;->setAnimation(I)V @@ -5826,7 +5846,6 @@ HSPLcom/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation;->getValue(Lco HSPLcom/airbnb/lottie/animation/keyframe/KeyframeAnimation;->(Ljava/util/List;)V HSPLcom/airbnb/lottie/animation/keyframe/PathKeyframe;->(Lcom/airbnb/lottie/LottieComposition;Lcom/airbnb/lottie/value/Keyframe;)V HSPLcom/airbnb/lottie/animation/keyframe/PathKeyframe;->createPath()V -HSPLcom/airbnb/lottie/animation/keyframe/PathKeyframeAnimation;->(Ljava/util/List;)V HSPLcom/airbnb/lottie/animation/keyframe/PointKeyframeAnimation;->(Ljava/util/List;)V HSPLcom/airbnb/lottie/animation/keyframe/PointKeyframeAnimation;->getValue(Lcom/airbnb/lottie/value/Keyframe;F)Landroid/graphics/PointF; HSPLcom/airbnb/lottie/animation/keyframe/PointKeyframeAnimation;->getValue(Lcom/airbnb/lottie/value/Keyframe;F)Ljava/lang/Object; @@ -5960,7 +5979,6 @@ HSPLcom/airbnb/lottie/model/layer/BaseLayer;->invalidateSelf()V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->lambda$setupInOutAnimations$0()V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->onValueChanged()V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->recordRenderTime(F)V -HSPLcom/airbnb/lottie/model/layer/BaseLayer;->removeAnimation(Lcom/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation;)V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->resolveKeyPath(Lcom/airbnb/lottie/model/KeyPath;ILjava/util/List;Lcom/airbnb/lottie/model/KeyPath;)V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->setMatteLayer(Lcom/airbnb/lottie/model/layer/BaseLayer;)V HSPLcom/airbnb/lottie/model/layer/BaseLayer;->setProgress(F)V @@ -6109,6 +6127,7 @@ HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->findName(Ljava/lang/String;L 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 @@ -6172,7 +6191,6 @@ HSPLcom/airbnb/lottie/value/Keyframe;->getStartValueInt()I HSPLcom/airbnb/lottie/value/Keyframe;->isStatic()Z HSPLcom/airbnb/lottie/value/LottieFrameInfo;->()V HSPLcom/airbnb/lottie/value/LottieValueCallback;->()V -HSPLcom/airbnb/lottie/value/LottieValueCallback;->(Ljava/lang/Object;)V HSPLcom/airbnb/lottie/value/LottieValueCallback;->setAnimation(Lcom/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation;)V HSPLcom/airbnb/lottie/value/ScaleXY;->()V HSPLcom/airbnb/lottie/value/ScaleXY;->(FF)V @@ -6222,14 +6240,6 @@ HSPLcom/annimon/stream/Collectors;->toSet()Lcom/annimon/stream/Collector; HSPLcom/annimon/stream/IntPair;->(ILjava/lang/Object;)V HSPLcom/annimon/stream/IntPair;->getFirst()I HSPLcom/annimon/stream/IntPair;->getSecond()Ljava/lang/Object; -HSPLcom/annimon/stream/IntStream$1;->()V -HSPLcom/annimon/stream/IntStream$5;->()V -HSPLcom/annimon/stream/IntStream;->()V -HSPLcom/annimon/stream/IntStream;->(Lcom/annimon/stream/internal/Params;Lcom/annimon/stream/iterator/PrimitiveIterator$OfInt;)V -HSPLcom/annimon/stream/IntStream;->(Lcom/annimon/stream/iterator/PrimitiveIterator$OfInt;)V -HSPLcom/annimon/stream/IntStream;->boxed()Lcom/annimon/stream/Stream; -HSPLcom/annimon/stream/IntStream;->of(I)Lcom/annimon/stream/IntStream; -HSPLcom/annimon/stream/IntStream;->rangeClosed(II)Lcom/annimon/stream/IntStream; HSPLcom/annimon/stream/Objects;->requireNonNull(Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/annimon/stream/Optional;->()V HSPLcom/annimon/stream/Optional;->()V @@ -6246,21 +6256,18 @@ HSPLcom/annimon/stream/Stream;->(Ljava/util/Iterator;)V HSPLcom/annimon/stream/Stream;->allMatch(Lcom/annimon/stream/function/Predicate;)Z HSPLcom/annimon/stream/Stream;->anyMatch(Lcom/annimon/stream/function/Predicate;)Z HSPLcom/annimon/stream/Stream;->collect(Lcom/annimon/stream/Collector;)Ljava/lang/Object; -HSPLcom/annimon/stream/Stream;->empty()Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->filter(Lcom/annimon/stream/function/Predicate;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->filterNot(Lcom/annimon/stream/function/Predicate;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->findFirst()Lcom/annimon/stream/Optional; HSPLcom/annimon/stream/Stream;->forEach(Lcom/annimon/stream/function/Consumer;)V HSPLcom/annimon/stream/Stream;->indexed()Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->indexed(II)Lcom/annimon/stream/Stream; -HSPLcom/annimon/stream/Stream;->limit(J)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->map(Lcom/annimon/stream/function/Function;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->mapIndexed(IILcom/annimon/stream/function/IndexedFunction;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->match(Lcom/annimon/stream/function/Predicate;I)Z HSPLcom/annimon/stream/Stream;->of(Ljava/lang/Iterable;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->of(Ljava/util/Map;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->of([Ljava/lang/Object;)Lcom/annimon/stream/Stream; -HSPLcom/annimon/stream/Stream;->rangeClosed(II)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->reduce(Ljava/lang/Object;Lcom/annimon/stream/function/BiFunction;)Ljava/lang/Object; HSPLcom/annimon/stream/Stream;->sorted()Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->sorted(Ljava/util/Comparator;)Lcom/annimon/stream/Stream; @@ -6286,12 +6293,6 @@ HSPLcom/annimon/stream/iterator/LsaExtIterator;->hasNext()Z HSPLcom/annimon/stream/iterator/LsaExtIterator;->next()Ljava/lang/Object; HSPLcom/annimon/stream/iterator/LsaIterator;->()V HSPLcom/annimon/stream/iterator/LsaIterator;->next()Ljava/lang/Object; -HSPLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->()V -HSPLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->next()Ljava/lang/Integer; -HSPLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->next()Ljava/lang/Object; -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/ObjArray;->([Ljava/lang/Object;)V HSPLcom/annimon/stream/operator/ObjArray;->hasNext()Z HSPLcom/annimon/stream/operator/ObjArray;->nextIteration()Ljava/lang/Object; @@ -6299,8 +6300,6 @@ HSPLcom/annimon/stream/operator/ObjFilter;->(Ljava/util/Iterator;Lcom/anni HSPLcom/annimon/stream/operator/ObjFilter;->hasNext()Z HSPLcom/annimon/stream/operator/ObjFilter;->next()Ljava/lang/Object; HSPLcom/annimon/stream/operator/ObjFilter;->nextIteration()V -HSPLcom/annimon/stream/operator/ObjLimit;->(Ljava/util/Iterator;J)V -HSPLcom/annimon/stream/operator/ObjLimit;->hasNext()Z HSPLcom/annimon/stream/operator/ObjMap;->(Ljava/util/Iterator;Lcom/annimon/stream/function/Function;)V HSPLcom/annimon/stream/operator/ObjMap;->hasNext()Z HSPLcom/annimon/stream/operator/ObjMap;->nextIteration()Ljava/lang/Object; @@ -7260,6 +7259,7 @@ HSPLcom/fasterxml/jackson/core/Base64Variant;->getMaxLineLength()I HSPLcom/fasterxml/jackson/core/Base64Variant;->usesPadding()Z HSPLcom/fasterxml/jackson/core/Base64Variants;->()V HSPLcom/fasterxml/jackson/core/Base64Variants;->getDefaultVariant()Lcom/fasterxml/jackson/core/Base64Variant; +HSPLcom/fasterxml/jackson/core/JacksonException;->(Ljava/lang/String;Ljava/lang/Throwable;)V HSPLcom/fasterxml/jackson/core/JsonEncoding;->()V HSPLcom/fasterxml/jackson/core/JsonEncoding;->(Ljava/lang/String;ILjava/lang/String;ZI)V HSPLcom/fasterxml/jackson/core/JsonFactory$Feature;->()V @@ -7301,6 +7301,8 @@ HSPLcom/fasterxml/jackson/core/JsonGenerator;->()V HSPLcom/fasterxml/jackson/core/JsonGenerator;->canWriteBinaryNatively()Z HSPLcom/fasterxml/jackson/core/JsonLocation;->()V HSPLcom/fasterxml/jackson/core/JsonLocation;->(Ljava/lang/Object;JJII)V +HSPLcom/fasterxml/jackson/core/JsonParseException;->(Lcom/fasterxml/jackson/core/JsonParser;Ljava/lang/String;)V +HSPLcom/fasterxml/jackson/core/JsonParseException;->withRequestPayload(Lcom/fasterxml/jackson/core/util/RequestPayload;)Lcom/fasterxml/jackson/core/JsonParseException; HSPLcom/fasterxml/jackson/core/JsonParser$Feature;->()V HSPLcom/fasterxml/jackson/core/JsonParser$Feature;->(Ljava/lang/String;IZ)V HSPLcom/fasterxml/jackson/core/JsonParser$Feature;->collectDefaults()I @@ -7312,8 +7314,11 @@ HSPLcom/fasterxml/jackson/core/JsonParser$NumberType;->()V HSPLcom/fasterxml/jackson/core/JsonParser$NumberType;->(Ljava/lang/String;I)V HSPLcom/fasterxml/jackson/core/JsonParser;->()V HSPLcom/fasterxml/jackson/core/JsonParser;->(I)V +HSPLcom/fasterxml/jackson/core/JsonParser;->_constructError(Ljava/lang/String;)Lcom/fasterxml/jackson/core/JsonParseException; HSPLcom/fasterxml/jackson/core/JsonParser;->currentName()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/JsonParser;->isEnabled(Lcom/fasterxml/jackson/core/JsonParser$Feature;)Z +HSPLcom/fasterxml/jackson/core/JsonProcessingException;->(Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonLocation;)V +HSPLcom/fasterxml/jackson/core/JsonProcessingException;->(Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonLocation;Ljava/lang/Throwable;)V HSPLcom/fasterxml/jackson/core/JsonStreamContext;->()V HSPLcom/fasterxml/jackson/core/JsonStreamContext;->(II)V HSPLcom/fasterxml/jackson/core/JsonStreamContext;->inArray()Z @@ -7348,9 +7353,11 @@ HSPLcom/fasterxml/jackson/core/base/GeneratorBase;->getOutputContext()Lcom/faste HSPLcom/fasterxml/jackson/core/base/GeneratorBase;->isEnabled(Lcom/fasterxml/jackson/core/JsonGenerator$Feature;)Z 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;->_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; @@ -7362,6 +7369,9 @@ 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;->_getCharDesc(I)Ljava/lang/String; +HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->_reportError(Ljava/lang/String;)V +HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->_reportUnexpectedChar(ILjava/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; @@ -7372,6 +7382,7 @@ HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->isExpectedNumberIntToken HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->isExpectedStartArrayToken()Z HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->isExpectedStartObjectToken()Z HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->skipChildren()Lcom/fasterxml/jackson/core/JsonParser; +HSPLcom/fasterxml/jackson/core/exc/StreamReadException;->(Lcom/fasterxml/jackson/core/JsonParser;Ljava/lang/String;)V HSPLcom/fasterxml/jackson/core/io/CharTypes;->()V HSPLcom/fasterxml/jackson/core/io/CharTypes;->copyHexBytes()[B HSPLcom/fasterxml/jackson/core/io/CharTypes;->copyHexChars()[C @@ -7388,6 +7399,7 @@ HSPLcom/fasterxml/jackson/core/io/IOContext;->allocTokenBuffer()[C HSPLcom/fasterxml/jackson/core/io/IOContext;->allocTokenBuffer(I)[C HSPLcom/fasterxml/jackson/core/io/IOContext;->allocWriteEncodingBuffer()[B HSPLcom/fasterxml/jackson/core/io/IOContext;->constructTextBuffer()Lcom/fasterxml/jackson/core/util/TextBuffer; +HSPLcom/fasterxml/jackson/core/io/IOContext;->getSourceReference()Ljava/lang/Object; HSPLcom/fasterxml/jackson/core/io/IOContext;->isResourceManaged()Z HSPLcom/fasterxml/jackson/core/io/IOContext;->releaseConcatBuffer([C)V HSPLcom/fasterxml/jackson/core/io/IOContext;->releaseReadIOBuffer([B)V @@ -7403,6 +7415,7 @@ HSPLcom/fasterxml/jackson/core/io/NumberInput;->()V HSPLcom/fasterxml/jackson/core/io/NumberInput;->parseInt([CII)I HSPLcom/fasterxml/jackson/core/io/NumberOutput;->()V HSPLcom/fasterxml/jackson/core/io/NumberOutput;->_full3(I[CI)I +HSPLcom/fasterxml/jackson/core/io/NumberOutput;->_leading3(I[BI)I HSPLcom/fasterxml/jackson/core/io/NumberOutput;->_leading3(I[CI)I HSPLcom/fasterxml/jackson/core/io/NumberOutput;->outputInt(I[BI)I HSPLcom/fasterxml/jackson/core/io/NumberOutput;->outputInt(I[CI)I @@ -7466,6 +7479,7 @@ HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipColon()I HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipColon2(Z)I HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipComma(I)I HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipString()V +HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipWSOrEnd()I HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_skipWSOrEnd2()I HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_updateLocation()V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_updateNameLocation()V @@ -7473,6 +7487,7 @@ HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_verifyNoLeadingZero HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->getReadCapabilities()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet; HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->getText()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->getValueAsString()Ljava/lang/String; +HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->nextFieldName()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->nextTextValue()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8JsonGenerator;->()V HSPLcom/fasterxml/jackson/core/json/UTF8JsonGenerator;->(Lcom/fasterxml/jackson/core/io/IOContext;ILcom/fasterxml/jackson/core/ObjectCodec;Ljava/io/OutputStream;C)V @@ -7497,6 +7512,7 @@ HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->(Lcom/fasterxml HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_closeInput()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_closeObjectScope()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_finishString2([CI)V +HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_handleUnexpectedValue(I)Lcom/fasterxml/jackson/core/JsonToken; 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; @@ -7505,7 +7521,6 @@ HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_parseName(I)Ljava/la 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;->_skipColon()I -HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_skipColon2(Z)I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_skipWS()I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_skipWS2()I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_updateLocation()V @@ -7515,8 +7530,8 @@ HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->findName(II)Ljava/lan HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->findName(III)Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->findName(IIII)Ljava/lang/String; 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;->getText()Ljava/lang/String; 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; @@ -7537,14 +7552,12 @@ HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->_writeString2(I)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->close()V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeBinary(Lcom/fasterxml/jackson/core/Base64Variant;[BII)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeBoolean(Z)V -HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeEndArray()V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeEndObject()V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeFieldName(Lcom/fasterxml/jackson/core/SerializableString;)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeFieldName(Ljava/lang/String;)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeNull()V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeNumber(I)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeNumber(J)V -HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeStartArray(Ljava/lang/Object;I)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeStartObject(Ljava/lang/Object;)V HSPLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeString(Ljava/lang/String;)V HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo;->(III[I[Ljava/lang/String;II)V @@ -8413,8 +8426,6 @@ HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->configureFro HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->configureFromStringCreator(Lcom/fasterxml/jackson/databind/introspect/AnnotatedWithParams;)V HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->createFromObjectWith(Lcom/fasterxml/jackson/databind/DeserializationContext;[Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->createUsingDefault(Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/lang/Object; -HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->getArrayDelegateCreator()Lcom/fasterxml/jackson/databind/introspect/AnnotatedWithParams; -HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->getDelegateCreator()Lcom/fasterxml/jackson/databind/introspect/AnnotatedWithParams; HSPLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->getFromObjectArguments(Lcom/fasterxml/jackson/databind/DeserializationConfig;)[Lcom/fasterxml/jackson/databind/deser/SettableBeanProperty; HSPLcom/fasterxml/jackson/databind/deser/std/StringArrayDeserializer;->()V HSPLcom/fasterxml/jackson/databind/deser/std/StringArrayDeserializer;->()V @@ -8720,7 +8731,6 @@ HSPLcom/fasterxml/jackson/databind/introspect/BeanPropertyDefinition;->getNonCon HSPLcom/fasterxml/jackson/databind/introspect/ClassIntrospector;->()V HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->()V HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->(Lcom/fasterxml/jackson/databind/AnnotationIntrospector;)V -HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->_emptyAnnotationMap()Lcom/fasterxml/jackson/databind/introspect/AnnotationMap; HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->collectAnnotations(Lcom/fasterxml/jackson/databind/introspect/AnnotationCollector;[Ljava/lang/annotation/Annotation;)Lcom/fasterxml/jackson/databind/introspect/AnnotationCollector; HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->collectAnnotations([Ljava/lang/annotation/Annotation;)Lcom/fasterxml/jackson/databind/introspect/AnnotationCollector; HSPLcom/fasterxml/jackson/databind/introspect/CollectorBase;->collectDefaultAnnotations(Lcom/fasterxml/jackson/databind/introspect/AnnotationCollector;[Ljava/lang/annotation/Annotation;)Lcom/fasterxml/jackson/databind/introspect/AnnotationCollector; @@ -9137,9 +9147,6 @@ HSPLcom/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap;->untyp HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->()V HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->()V HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->createContextual(Lcom/fasterxml/jackson/databind/SerializerProvider;Lcom/fasterxml/jackson/databind/BeanProperty;)Lcom/fasterxml/jackson/databind/JsonSerializer; -HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serialize(Ljava/lang/Object;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V -HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serialize([Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V -HSPLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serializeContents([Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V HSPLcom/fasterxml/jackson/databind/ser/impl/UnknownSerializer;->()V HSPLcom/fasterxml/jackson/databind/ser/std/ArraySerializerBase;->(Ljava/lang/Class;)V HSPLcom/fasterxml/jackson/databind/ser/std/ArraySerializerBase;->createContextual(Lcom/fasterxml/jackson/databind/SerializerProvider;Lcom/fasterxml/jackson/databind/BeanProperty;)Lcom/fasterxml/jackson/databind/JsonSerializer; @@ -9280,7 +9287,6 @@ HSPLcom/fasterxml/jackson/databind/type/CollectionLikeType;->withHandlersFrom(Lc HSPLcom/fasterxml/jackson/databind/type/CollectionType;->(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/type/TypeBindings;Lcom/fasterxml/jackson/databind/JavaType;[Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;Ljava/lang/Object;Ljava/lang/Object;Z)V HSPLcom/fasterxml/jackson/databind/type/CollectionType;->construct(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/type/TypeBindings;Lcom/fasterxml/jackson/databind/JavaType;[Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/CollectionType; HSPLcom/fasterxml/jackson/databind/type/CollectionType;->refine(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/type/TypeBindings;Lcom/fasterxml/jackson/databind/JavaType;[Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/JavaType; -HSPLcom/fasterxml/jackson/databind/type/CollectionType;->toString()Ljava/lang/String; HSPLcom/fasterxml/jackson/databind/type/LogicalType;->()V HSPLcom/fasterxml/jackson/databind/type/LogicalType;->(Ljava/lang/String;I)V HSPLcom/fasterxml/jackson/databind/type/LogicalType;->values()[Lcom/fasterxml/jackson/databind/type/LogicalType; @@ -9326,7 +9332,6 @@ HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->asKey(Ljava/lang/Class;)L HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->create(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/TypeBindings; HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->create(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/TypeBindings; HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->create(Ljava/lang/Class;[Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/TypeBindings; -HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->createIfNeeded(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/TypeBindings; HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->emptyBindings()Lcom/fasterxml/jackson/databind/type/TypeBindings; HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->findBoundType(Ljava/lang/String;)Lcom/fasterxml/jackson/databind/JavaType; HSPLcom/fasterxml/jackson/databind/type/TypeBindings;->getTypeParameters()Ljava/util/List; @@ -9356,8 +9361,6 @@ HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->_resolveSuperInterfaces(Lc HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->_resolveTypePlaceholders(Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;)Ljava/lang/String; HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->_unknownType()Lcom/fasterxml/jackson/databind/JavaType; HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->_verifyAndResolvePlaceholders(Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/JavaType;)Z -HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->constructCollectionType(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/CollectionType; -HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->constructCollectionType(Ljava/lang/Class;Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/type/CollectionType; HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->constructSpecializedType(Lcom/fasterxml/jackson/databind/JavaType;Ljava/lang/Class;Z)Lcom/fasterxml/jackson/databind/JavaType; HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->constructType(Ljava/lang/reflect/Type;)Lcom/fasterxml/jackson/databind/JavaType; HSPLcom/fasterxml/jackson/databind/type/TypeFactory;->defaultInstance()Lcom/fasterxml/jackson/databind/type/TypeFactory; @@ -10047,13 +10050,10 @@ HSPLcom/google/android/material/button/MaterialButton;->isIconEnd()Z HSPLcom/google/android/material/button/MaterialButton;->isIconStart()Z HSPLcom/google/android/material/button/MaterialButton;->isIconTop()Z HSPLcom/google/android/material/button/MaterialButton;->isUsingOriginalBackground()Z -HSPLcom/google/android/material/button/MaterialButton;->onAttachedToWindow()V HSPLcom/google/android/material/button/MaterialButton;->onCreateDrawableState(I)[I HSPLcom/google/android/material/button/MaterialButton;->onTextChanged(Ljava/lang/CharSequence;III)V -HSPLcom/google/android/material/button/MaterialButton;->refreshDrawableState()V HSPLcom/google/android/material/button/MaterialButton;->resetIconDrawable()V HSPLcom/google/android/material/button/MaterialButton;->setBackgroundTintList(Landroid/content/res/ColorStateList;)V -HSPLcom/google/android/material/button/MaterialButton;->setElevation(F)V HSPLcom/google/android/material/button/MaterialButton;->setInternalBackground(Landroid/graphics/drawable/Drawable;)V HSPLcom/google/android/material/button/MaterialButton;->setSupportBackgroundTintList(Landroid/content/res/ColorStateList;)V HSPLcom/google/android/material/button/MaterialButton;->updateIcon(Z)V @@ -10065,64 +10065,11 @@ HSPLcom/google/android/material/button/MaterialButtonHelper;->getMaskDrawable()L HSPLcom/google/android/material/button/MaterialButtonHelper;->getMaterialShapeDrawable()Lcom/google/android/material/shape/MaterialShapeDrawable; HSPLcom/google/android/material/button/MaterialButtonHelper;->getMaterialShapeDrawable(Z)Lcom/google/android/material/shape/MaterialShapeDrawable; HSPLcom/google/android/material/button/MaterialButtonHelper;->getSurfaceColorStrokeDrawable()Lcom/google/android/material/shape/MaterialShapeDrawable; -HSPLcom/google/android/material/button/MaterialButtonHelper;->isBackgroundOverwritten()Z -HSPLcom/google/android/material/button/MaterialButtonHelper;->isCheckable()Z HSPLcom/google/android/material/button/MaterialButtonHelper;->loadFromAttributes(Landroid/content/res/TypedArray;)V HSPLcom/google/android/material/button/MaterialButtonHelper;->setShapeAppearanceModel(Lcom/google/android/material/shape/ShapeAppearanceModel;)V HSPLcom/google/android/material/button/MaterialButtonHelper;->updateBackground()V HSPLcom/google/android/material/button/MaterialButtonHelper;->updateButtonShape(Lcom/google/android/material/shape/ShapeAppearanceModel;)V HSPLcom/google/android/material/button/MaterialButtonHelper;->wrapDrawableWithInset(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/InsetDrawable; -HSPLcom/google/android/material/card/MaterialCardView;->()V -HSPLcom/google/android/material/card/MaterialCardView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLcom/google/android/material/card/MaterialCardView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLcom/google/android/material/card/MaterialCardView;->isCheckable()Z -HSPLcom/google/android/material/card/MaterialCardView;->isChecked()Z -HSPLcom/google/android/material/card/MaterialCardView;->isDragged()Z -HSPLcom/google/android/material/card/MaterialCardView;->onAttachedToWindow()V -HSPLcom/google/android/material/card/MaterialCardView;->onCreateDrawableState(I)[I -HSPLcom/google/android/material/card/MaterialCardView;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V -HSPLcom/google/android/material/card/MaterialCardView;->onMeasure(II)V -HSPLcom/google/android/material/card/MaterialCardView;->setAncestorContentPadding(IIII)V -HSPLcom/google/android/material/card/MaterialCardView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V -HSPLcom/google/android/material/card/MaterialCardView;->setBackgroundInternal(Landroid/graphics/drawable/Drawable;)V -HSPLcom/google/android/material/card/MaterialCardView;->setCardBackgroundColor(I)V -HSPLcom/google/android/material/card/MaterialCardView;->setClickable(Z)V -HSPLcom/google/android/material/card/MaterialCardViewHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/drawable/InsetDrawable;Landroid/graphics/drawable/Drawable;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper$1;->(Lcom/google/android/material/card/MaterialCardViewHelper;Landroid/graphics/drawable/Drawable;IIII)V -HSPLcom/google/android/material/card/MaterialCardViewHelper$1;->getMinimumHeight()I -HSPLcom/google/android/material/card/MaterialCardViewHelper$1;->getMinimumWidth()I -HSPLcom/google/android/material/card/MaterialCardViewHelper$1;->getPadding(Landroid/graphics/Rect;)Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->()V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->(Lcom/google/android/material/card/MaterialCardView;Landroid/util/AttributeSet;II)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->canClipToOutline()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->createForegroundRippleDrawable()Landroid/graphics/drawable/Drawable; -HSPLcom/google/android/material/card/MaterialCardViewHelper;->createForegroundShapeDrawable()Lcom/google/android/material/shape/MaterialShapeDrawable; -HSPLcom/google/android/material/card/MaterialCardViewHelper;->getBackground()Lcom/google/android/material/shape/MaterialShapeDrawable; -HSPLcom/google/android/material/card/MaterialCardViewHelper;->getClickableForeground()Landroid/graphics/drawable/Drawable; -HSPLcom/google/android/material/card/MaterialCardViewHelper;->getParentCardViewCalculatedCornerPadding()F -HSPLcom/google/android/material/card/MaterialCardViewHelper;->insetDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; -HSPLcom/google/android/material/card/MaterialCardViewHelper;->isCheckable()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->isCheckedIconBottom()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->isCheckedIconEnd()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->loadFromAttributes(Landroid/content/res/TypedArray;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->recalculateCheckedIconPosition(II)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setCardBackgroundColor(Landroid/content/res/ColorStateList;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setCardForegroundColor(Landroid/content/res/ColorStateList;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setChecked(Z)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setChecked(ZZ)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIcon(Landroid/graphics/drawable/Drawable;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIconMargin(I)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIconSize(I)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setShapeAppearanceModel(Lcom/google/android/material/shape/ShapeAppearanceModel;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->setUserContentPadding(IIII)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->shouldAddCornerPaddingInsideCardBackground()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->shouldAddCornerPaddingOutsideCardBackground()Z -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateClickable()V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateContentPadding()V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateElevation()V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateInsetForeground(Landroid/graphics/drawable/Drawable;)V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateRippleColor()V -HSPLcom/google/android/material/card/MaterialCardViewHelper;->updateStroke()V HSPLcom/google/android/material/chip/Chip$$ExternalSyntheticLambda0;->(Lcom/google/android/material/chip/Chip;)V HSPLcom/google/android/material/chip/Chip$1;->(Lcom/google/android/material/chip/Chip;)V HSPLcom/google/android/material/chip/Chip$1;->onFontRetrieved(Landroid/graphics/Typeface;Z)V @@ -10329,21 +10276,9 @@ HSPLcom/google/android/material/floatingactionbutton/FloatingActionButtonImplLol HSPLcom/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop;->requirePreDrawListener()Z HSPLcom/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop;->shouldAddPadding()Z HSPLcom/google/android/material/imageview/ShapeableImageView$OutlineProvider;->(Lcom/google/android/material/imageview/ShapeableImageView;)V -HSPLcom/google/android/material/imageview/ShapeableImageView$OutlineProvider;->getOutline(Landroid/view/View;Landroid/graphics/Outline;)V HSPLcom/google/android/material/imageview/ShapeableImageView;->()V HSPLcom/google/android/material/imageview/ShapeableImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLcom/google/android/material/imageview/ShapeableImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLcom/google/android/material/imageview/ShapeableImageView;->access$000(Lcom/google/android/material/imageview/ShapeableImageView;)Lcom/google/android/material/shape/ShapeAppearanceModel; -HSPLcom/google/android/material/imageview/ShapeableImageView;->access$100(Lcom/google/android/material/imageview/ShapeableImageView;)Lcom/google/android/material/shape/MaterialShapeDrawable; -HSPLcom/google/android/material/imageview/ShapeableImageView;->access$102(Lcom/google/android/material/imageview/ShapeableImageView;Lcom/google/android/material/shape/MaterialShapeDrawable;)Lcom/google/android/material/shape/MaterialShapeDrawable; -HSPLcom/google/android/material/imageview/ShapeableImageView;->access$200(Lcom/google/android/material/imageview/ShapeableImageView;)Landroid/graphics/RectF; -HSPLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingBottom()I -HSPLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingLeft()I -HSPLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingRight()I -HSPLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingTop()I -HSPLcom/google/android/material/imageview/ShapeableImageView;->isContentPaddingRelative()Z -HSPLcom/google/android/material/imageview/ShapeableImageView;->onMeasure(II)V -HSPLcom/google/android/material/imageview/ShapeableImageView;->setPadding(IIII)V HSPLcom/google/android/material/internal/CollapsingTextHelper$1;->(Lcom/google/android/material/internal/CollapsingTextHelper;)V HSPLcom/google/android/material/internal/CollapsingTextHelper$1;->apply(Landroid/graphics/Typeface;)V HSPLcom/google/android/material/internal/CollapsingTextHelper$2;->(Lcom/google/android/material/internal/CollapsingTextHelper;)V @@ -10523,8 +10458,6 @@ HSPLcom/google/android/material/shape/MaterialShapeDrawable;->requiresCompatShad HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setColorFilter(Landroid/graphics/ColorFilter;)V HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setElevation(F)V HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setFillColor(Landroid/content/res/ColorStateList;)V -HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setShadowBitmapDrawingEnable(Z)V -HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setShadowColor(I)V HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setShapeAppearanceModel(Lcom/google/android/material/shape/ShapeAppearanceModel;)V HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setStroke(FI)V HSPLcom/google/android/material/shape/MaterialShapeDrawable;->setStroke(FLandroid/content/res/ColorStateList;)V @@ -10543,8 +10476,6 @@ HSPLcom/google/android/material/shape/MaterialShapeUtils;->setElevation(Landroid HSPLcom/google/android/material/shape/MaterialShapeUtils;->setParentAbsoluteElevation(Landroid/view/View;)V HSPLcom/google/android/material/shape/MaterialShapeUtils;->setParentAbsoluteElevation(Landroid/view/View;Lcom/google/android/material/shape/MaterialShapeDrawable;)V HSPLcom/google/android/material/shape/RelativeCornerSize;->(F)V -HSPLcom/google/android/material/shape/RelativeCornerSize;->getCornerSize(Landroid/graphics/RectF;)F -HSPLcom/google/android/material/shape/RelativeCornerSize;->getMaxCornerSize(Landroid/graphics/RectF;)F HSPLcom/google/android/material/shape/RoundedCornerTreatment;->()V HSPLcom/google/android/material/shape/RoundedCornerTreatment;->getCornerPath(Lcom/google/android/material/shape/ShapePath;FFF)V HSPLcom/google/android/material/shape/ShapeAppearanceModel$Builder;->()V @@ -10787,11 +10718,6 @@ 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 HSPLcom/google/common/collect/UnmodifiableIterator;->()V @@ -11430,7 +11356,6 @@ HSPLcom/mobilecoin/lib/util/Hex;->()V HSPLcom/mobilecoin/lib/util/Hex;->toByteArray(Ljava/lang/String;)[B HSPLcom/pnikosis/materialishprogress/ProgressWheel;->()V HSPLcom/pnikosis/materialishprogress/ProgressWheel;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLcom/pnikosis/materialishprogress/ProgressWheel;->onVisibilityChanged(Landroid/view/View;I)V HSPLcom/pnikosis/materialishprogress/ProgressWheel;->parseAttributes(Landroid/content/res/TypedArray;)V HSPLcom/pnikosis/materialishprogress/ProgressWheel;->setAnimationEnabled()V HSPLcom/pnikosis/materialishprogress/ProgressWheel;->setBarColor(I)V @@ -11449,6 +11374,8 @@ HSPLcom/squareup/wire/Message$Companion;->()V HSPLcom/squareup/wire/Message$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLcom/squareup/wire/Message;->()V HSPLcom/squareup/wire/Message;->(Lcom/squareup/wire/ProtoAdapter;Lokio/ByteString;)V +HSPLcom/squareup/wire/Message;->encode()[B +HSPLcom/squareup/wire/Message;->unknownFields()Lokio/ByteString; HSPLcom/squareup/wire/PackedProtoAdapter;->(Lcom/squareup/wire/ProtoAdapter;)V HSPLcom/squareup/wire/ProtoAdapter$Companion;->()V HSPLcom/squareup/wire/ProtoAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -11456,6 +11383,10 @@ HSPLcom/squareup/wire/ProtoAdapter;->()V HSPLcom/squareup/wire/ProtoAdapter;->(Lcom/squareup/wire/FieldEncoding;Lkotlin/reflect/KClass;Ljava/lang/String;Lcom/squareup/wire/Syntax;)V HSPLcom/squareup/wire/ProtoAdapter;->(Lcom/squareup/wire/FieldEncoding;Lkotlin/reflect/KClass;Ljava/lang/String;Lcom/squareup/wire/Syntax;Ljava/lang/Object;)V HSPLcom/squareup/wire/ProtoAdapter;->(Lcom/squareup/wire/FieldEncoding;Lkotlin/reflect/KClass;Ljava/lang/String;Lcom/squareup/wire/Syntax;Ljava/lang/Object;Ljava/lang/String;)V +HSPLcom/squareup/wire/ProtoAdapter;->decode(Lokio/BufferedSource;)Ljava/lang/Object; +HSPLcom/squareup/wire/ProtoAdapter;->decode([B)Ljava/lang/Object; +HSPLcom/squareup/wire/ProtoAdapter;->encode(Ljava/lang/Object;)[B +HSPLcom/squareup/wire/ProtoAdapter;->encode(Lokio/BufferedSink;Ljava/lang/Object;)V HSPLcom/squareup/wire/ProtoAdapter;->getFieldEncoding$wire_runtime()Lcom/squareup/wire/FieldEncoding; HSPLcom/squareup/wire/ProtoAdapter;->getIdentity()Ljava/lang/Object; HSPLcom/squareup/wire/ProtoAdapter;->getSyntax()Lcom/squareup/wire/Syntax; @@ -11504,7 +11435,24 @@ HSPLcom/squareup/wire/ProtoAdapterKt;->commonStructValue()Lcom/squareup/wire/Pro HSPLcom/squareup/wire/ProtoAdapterKt;->commonUint32()Lcom/squareup/wire/ProtoAdapter; HSPLcom/squareup/wire/ProtoAdapterKt;->commonUint64()Lcom/squareup/wire/ProtoAdapter; HSPLcom/squareup/wire/ProtoAdapterKt;->commonWrapper(Lcom/squareup/wire/ProtoAdapter;Ljava/lang/String;)Lcom/squareup/wire/ProtoAdapter; +HSPLcom/squareup/wire/ProtoReader$Companion;->()V +HSPLcom/squareup/wire/ProtoReader$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/squareup/wire/ProtoReader;->()V +HSPLcom/squareup/wire/ProtoReader;->(Lokio/BufferedSource;)V +HSPLcom/squareup/wire/ProtoReader;->beginMessage()J +HSPLcom/squareup/wire/ProtoReader;->endMessageAndGetUnknownFields(J)Lokio/ByteString; +HSPLcom/squareup/wire/ProtoReader;->nextTag()I HSPLcom/squareup/wire/RepeatedProtoAdapter;->(Lcom/squareup/wire/ProtoAdapter;)V +HSPLcom/squareup/wire/ReverseProtoWriter$Companion;->()V +HSPLcom/squareup/wire/ReverseProtoWriter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/squareup/wire/ReverseProtoWriter$forwardBuffer$2;->()V +HSPLcom/squareup/wire/ReverseProtoWriter$forwardBuffer$2;->()V +HSPLcom/squareup/wire/ReverseProtoWriter$forwardWriter$2;->(Lcom/squareup/wire/ReverseProtoWriter;)V +HSPLcom/squareup/wire/ReverseProtoWriter;->()V +HSPLcom/squareup/wire/ReverseProtoWriter;->()V +HSPLcom/squareup/wire/ReverseProtoWriter;->emitCurrentSegment()V +HSPLcom/squareup/wire/ReverseProtoWriter;->writeBytes(Lokio/ByteString;)V +HSPLcom/squareup/wire/ReverseProtoWriter;->writeTo(Lokio/BufferedSink;)V HSPLcom/squareup/wire/Syntax$Companion;->()V HSPLcom/squareup/wire/Syntax$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLcom/squareup/wire/Syntax;->$values()[Lcom/squareup/wire/Syntax; @@ -11541,7 +11489,6 @@ HSPLio/reactivex/rxjava3/android/schedulers/HandlerScheduler$ScheduledRunnable;- HSPLio/reactivex/rxjava3/android/schedulers/HandlerScheduler$ScheduledRunnable;->run()V HSPLio/reactivex/rxjava3/android/schedulers/HandlerScheduler;->(Landroid/os/Handler;Z)V HSPLio/reactivex/rxjava3/android/schedulers/HandlerScheduler;->createWorker()Lio/reactivex/rxjava3/core/Scheduler$Worker; -HSPLio/reactivex/rxjava3/android/schedulers/HandlerScheduler;->scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/BackpressureStrategy;->()V HSPLio/reactivex/rxjava3/core/BackpressureStrategy;->(Ljava/lang/String;I)V HSPLio/reactivex/rxjava3/core/BackpressureStrategy;->values()[Lio/reactivex/rxjava3/core/BackpressureStrategy; @@ -11555,7 +11502,6 @@ HSPLio/reactivex/rxjava3/core/Flowable;->distinctUntilChanged()Lio/reactivex/rxj HSPLio/reactivex/rxjava3/core/Flowable;->distinctUntilChanged(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->doOnEach(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->doOnNext(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Flowable; -HSPLio/reactivex/rxjava3/core/Flowable;->filter(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->fromFuture(Ljava/util/concurrent/Future;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->interval(JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->interval(JJLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Flowable; @@ -11575,59 +11521,24 @@ HSPLio/reactivex/rxjava3/core/Flowable;->switchMap(Lio/reactivex/rxjava3/functio HSPLio/reactivex/rxjava3/core/Flowable;->switchMap0(Lio/reactivex/rxjava3/functions/Function;IZ)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->throttleLatest(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Flowable;->throttleLatest(JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;Z)Lio/reactivex/rxjava3/core/Flowable; -HSPLio/reactivex/rxjava3/core/Flowable;->toObservable()Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Maybe;->()V -HSPLio/reactivex/rxjava3/core/Maybe;->filter(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Maybe; -HSPLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/core/MaybeObserver;)V -HSPLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/core/Maybe;->subscribeWith(Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLio/reactivex/rxjava3/core/Observable$1;->()V HSPLio/reactivex/rxjava3/core/Observable;->()V -HSPLio/reactivex/rxjava3/core/Observable;->buffer(Lio/reactivex/rxjava3/core/ObservableSource;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->buffer(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->bufferSize()I -HSPLio/reactivex/rxjava3/core/Observable;->combineLatest(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function3;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->combineLatest(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/BiFunction;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->combineLatestArray([Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;I)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->concatArray([Lio/reactivex/rxjava3/core/ObservableSource;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->create(Lio/reactivex/rxjava3/core/ObservableOnSubscribe;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->distinctUntilChanged()Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->distinctUntilChanged(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->doOnEach(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->doOnNext(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->elementAtOrError(J)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Observable;->filter(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->firstOrError()Lio/reactivex/rxjava3/core/Single; -HSPLio/reactivex/rxjava3/core/Observable;->flatMapMaybe(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->flatMapMaybe(Lio/reactivex/rxjava3/functions/Function;Z)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->flatMapSingle(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->flatMapSingle(Lio/reactivex/rxjava3/functions/Function;Z)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->fromArray([Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->fromFuture(Ljava/util/concurrent/Future;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->just(Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->map(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->observeOn(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->observeOn(Lio/reactivex/rxjava3/core/Scheduler;ZI)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->replay(I)Lio/reactivex/rxjava3/observables/ConnectableObservable; -HSPLio/reactivex/rxjava3/core/Observable;->sample(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->sample(JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->scan(Ljava/lang/Object;Lio/reactivex/rxjava3/functions/BiFunction;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->scanWith(Lio/reactivex/rxjava3/functions/Supplier;Lio/reactivex/rxjava3/functions/BiFunction;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->skip(J)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->startWithItem(Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->subscribe()Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/Observable;->subscribe(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/core/Observable;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/Observable;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/Observable;->subscribeOn(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->switchMap(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->switchMap(Lio/reactivex/rxjava3/functions/Function;I)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->switchMapSingle(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->take(J)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->throttleFirst(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->throttleFirst(JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/core/Observable;->throttleLast(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Observable;->toFlowable(Lio/reactivex/rxjava3/core/BackpressureStrategy;)Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/core/Scheduler$PeriodicDirectTask;->(Ljava/lang/Runnable;Lio/reactivex/rxjava3/core/Scheduler$Worker;)V HSPLio/reactivex/rxjava3/core/Scheduler$PeriodicDirectTask;->run()V @@ -11641,22 +11552,16 @@ HSPLio/reactivex/rxjava3/core/Scheduler;->()V HSPLio/reactivex/rxjava3/core/Scheduler;->()V HSPLio/reactivex/rxjava3/core/Scheduler;->computeClockDrift(JLjava/lang/String;)J HSPLio/reactivex/rxjava3/core/Scheduler;->computeNow(Ljava/util/concurrent/TimeUnit;)J -HSPLio/reactivex/rxjava3/core/Scheduler;->scheduleDirect(Ljava/lang/Runnable;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/Scheduler;->schedulePeriodicallyDirect(Ljava/lang/Runnable;JJLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/core/Single;->()V HSPLio/reactivex/rxjava3/core/Single;->blockingGet()Ljava/lang/Object; -HSPLio/reactivex/rxjava3/core/Single;->doOnSuccess(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->error(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->error(Ljava/lang/Throwable;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->flatMap(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Single; -HSPLio/reactivex/rxjava3/core/Single;->flatMapObservable(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/core/Single;->fromCallable(Ljava/util/concurrent/Callable;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->fromFuture(Ljava/util/concurrent/Future;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->just(Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->map(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Single; -HSPLio/reactivex/rxjava3/core/Single;->observeOn(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Single; -HSPLio/reactivex/rxjava3/core/Single;->onErrorComplete()Lio/reactivex/rxjava3/core/Maybe; -HSPLio/reactivex/rxjava3/core/Single;->onErrorComplete(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Maybe; HSPLio/reactivex/rxjava3/core/Single;->onErrorResumeNext(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->onErrorReturn(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/core/Single;->subscribe(Lio/reactivex/rxjava3/core/SingleObserver;)V @@ -11682,7 +11587,6 @@ 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 @@ -11702,9 +11606,6 @@ HSPLio/reactivex/rxjava3/internal/disposables/SequentialDisposable;->update(Lio/ HSPLio/reactivex/rxjava3/internal/functions/Functions$Array2Func;->(Lio/reactivex/rxjava3/functions/BiFunction;)V HSPLio/reactivex/rxjava3/internal/functions/Functions$Array2Func;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLio/reactivex/rxjava3/internal/functions/Functions$Array2Func;->apply([Ljava/lang/Object;)Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->(Lio/reactivex/rxjava3/functions/Function3;)V -HSPLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->apply([Ljava/lang/Object;)Ljava/lang/Object; HSPLio/reactivex/rxjava3/internal/functions/Functions$EmptyAction;->()V HSPLio/reactivex/rxjava3/internal/functions/Functions$EmptyAction;->run()V HSPLio/reactivex/rxjava3/internal/functions/Functions$EmptyConsumer;->()V @@ -11723,12 +11624,10 @@ HSPLio/reactivex/rxjava3/internal/functions/Functions$NullProvider;->()V HSPLio/reactivex/rxjava3/internal/functions/Functions$OnErrorMissingConsumer;->()V HSPLio/reactivex/rxjava3/internal/functions/Functions$TruePredicate;->()V HSPLio/reactivex/rxjava3/internal/functions/Functions;->()V -HSPLio/reactivex/rxjava3/internal/functions/Functions;->alwaysTrue()Lio/reactivex/rxjava3/functions/Predicate; HSPLio/reactivex/rxjava3/internal/functions/Functions;->emptyConsumer()Lio/reactivex/rxjava3/functions/Consumer; HSPLio/reactivex/rxjava3/internal/functions/Functions;->identity()Lio/reactivex/rxjava3/functions/Function; HSPLio/reactivex/rxjava3/internal/functions/Functions;->justSupplier(Ljava/lang/Object;)Lio/reactivex/rxjava3/functions/Supplier; HSPLio/reactivex/rxjava3/internal/functions/Functions;->toFunction(Lio/reactivex/rxjava3/functions/BiFunction;)Lio/reactivex/rxjava3/functions/Function; -HSPLio/reactivex/rxjava3/internal/functions/Functions;->toFunction(Lio/reactivex/rxjava3/functions/Function3;)Lio/reactivex/rxjava3/functions/Function; HSPLio/reactivex/rxjava3/internal/functions/ObjectHelper$BiObjectPredicate;->()V HSPLio/reactivex/rxjava3/internal/functions/ObjectHelper$BiObjectPredicate;->test(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLio/reactivex/rxjava3/internal/functions/ObjectHelper;->()V @@ -11737,11 +11636,9 @@ HSPLio/reactivex/rxjava3/internal/functions/ObjectHelper;->verifyPositive(ILjava HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->afterDownstream()V HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->beforeDownstream()Z -HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->dispose()V HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->transitiveBoundaryFusion(I)I HSPLio/reactivex/rxjava3/internal/observers/BasicIntQueueDisposable;->()V -HSPLio/reactivex/rxjava3/internal/observers/BasicQueueDisposable;->()V HSPLio/reactivex/rxjava3/internal/observers/BlockingMultiObserver;->()V HSPLio/reactivex/rxjava3/internal/observers/BlockingMultiObserver;->blockingGet()Ljava/lang/Object; HSPLio/reactivex/rxjava3/internal/observers/BlockingMultiObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -11760,10 +11657,6 @@ HSPLio/reactivex/rxjava3/internal/observers/LambdaObserver;->isDisposed()Z HSPLio/reactivex/rxjava3/internal/observers/LambdaObserver;->onComplete()V HSPLio/reactivex/rxjava3/internal/observers/LambdaObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/observers/LambdaObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/fuseable/SimplePlainQueue;)V -HSPLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad0;->()V -HSPLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad2;->()V -HSPLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberWip;->()V HSPLio/reactivex/rxjava3/internal/observers/ResumeSingleObserver;->(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/core/SingleObserver;)V HSPLio/reactivex/rxjava3/internal/observers/ResumeSingleObserver;->onError(Ljava/lang/Throwable;)V HSPLio/reactivex/rxjava3/internal/observers/ResumeSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -11808,11 +11701,6 @@ HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach$DoOnEachSu HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach$DoOnEachSubscriber;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach;->(Lio/reactivex/rxjava3/core/Flowable;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach;->subscribeActual(Lorg/reactivestreams/Subscriber;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->(Lio/reactivex/rxjava3/internal/fuseable/ConditionalSubscriber;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->tryOnNext(Ljava/lang/Object;)Z -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter;->(Lio/reactivex/rxjava3/core/Flowable;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter;->subscribeActual(Lorg/reactivestreams/Subscriber;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFromFuture;->(Ljava/util/concurrent/Future;JLjava/util/concurrent/TimeUnit;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFromFuture;->subscribeActual(Lorg/reactivestreams/Subscriber;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableFromObservable$SubscriberObserver;->(Lorg/reactivestreams/Subscriber;)V @@ -11873,9 +11761,7 @@ HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedRepla HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->getHead()Lio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$Node; HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->leaveTransform(Ljava/lang/Object;)Ljava/lang/Object; HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->next(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->removeFirst()V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->replay(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$InnerSubscription;)V -HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->setFirst(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$Node;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$DefaultUnboundedFactory;->()V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$InnerSubscription;->(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$ReplaySubscriber;Lorg/reactivestreams/Subscriber;)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$InnerSubscription;->index()Ljava/lang/Object; @@ -11940,19 +11826,6 @@ HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest$Thro HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest$ThrottleLatestSubscriber;->run()V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest;->(Lio/reactivex/rxjava3/core/Flowable;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;Z)V HSPLio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest;->subscribeActual(Lorg/reactivestreams/Subscriber;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/AbstractMaybeWithUpstream;->(Lio/reactivex/rxjava3/core/MaybeSource;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->hasCustomOnError()Z -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->onComplete()V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->onSuccess(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter;->(Lio/reactivex/rxjava3/core/MaybeSource;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->onSuccess(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver$SwitchMapSingleObserver;->(Lio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver;)V HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver$SwitchMapSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver$SwitchMapSingleObserver;->onSuccess(Ljava/lang/Object;)V @@ -11964,163 +11837,33 @@ HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$Swit HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle;->(Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/functions/Function;Z)V HSPLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/mixed/ScalarXMapZHelper;->tryAsSingle(Ljava/lang/Object;Lio/reactivex/rxjava3/functions/Function;Lio/reactivex/rxjava3/core/Observer;)Z -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)V -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->isDisposed()Z -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onSuccess(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/functions/Function;)V -HSPLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/AbstractObservableWithUpstream;->(Lio/reactivex/rxjava3/core/ObservableSource;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferBoundaryObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Supplier;Lio/reactivex/rxjava3/core/ObservableSource;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Supplier;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;I)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IIZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->drain()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->innerNext(ILjava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->subscribe([Lio/reactivex/rxjava3/core/ObservableSource;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest;->([Lio/reactivex/rxjava3/core/ObservableSource;Ljava/lang/Iterable;Lio/reactivex/rxjava3/functions/Function;IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->drain()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -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 -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->setDisposable(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate;->(Lio/reactivex/rxjava3/core/ObservableOnSubscribe;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged$DistinctUntilChangedObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;Lio/reactivex/rxjava3/functions/BiPredicate;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged$DistinctUntilChangedObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged$DistinctUntilChangedObserver;->requestFusion(I)I HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;Lio/reactivex/rxjava3/functions/BiPredicate;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->(Lio/reactivex/rxjava3/core/SingleObserver;JLjava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle;->(Lio/reactivex/rxjava3/core/ObservableSource;JLjava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFilter$FilterObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFilter$FilterObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFilter;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Predicate;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFilter;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;Z)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->onSuccess(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;Z)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->innerSuccess(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;Z)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->(Lio/reactivex/rxjava3/core/Observer;[Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->poll()Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->requestFusion(I)I -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray;->([Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromFuture;->(Ljava/util/concurrent/Future;JLjava/util/concurrent/TimeUnit;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromFuture;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher;->(Lorg/reactivestreams/Publisher;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableJust;->(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableJust;->get()Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/core/Scheduler$Worker;ZI)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->checkTerminated(ZZLio/reactivex/rxjava3/core/Observer;)Z HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->dispose()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->drainFused()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->drainNormal()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->onComplete()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->poll()Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->requestFusion(I)I HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->run()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->schedule()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/Scheduler;ZI)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->accept(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->accept(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->dispose()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->(Lio/reactivex/rxjava3/observables/ConnectableObservable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->(Lio/reactivex/rxjava3/observables/ConnectableObservable;IJLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->cancel(Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->(Z)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->addLast(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->enterTransform(Ljava/lang/Object;)Ljava/lang/Object; -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; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->isDisposed()Z -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;->(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBufferSupplier;->(IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBufferSupplier;->call()Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBuffer; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBuffer;Ljava/util/concurrent/atomic/AtomicReference;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->add(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)Z -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->isDisposed()Z -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->remove(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->replay()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplaySource;->(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplaySource;->subscribe(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$SizeBoundReplayBuffer;->(IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$SizeBoundReplayBuffer;->truncate()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$UnBoundedFactory;->()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->connect(Lio/reactivex/rxjava3/functions/Consumer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->create(Lio/reactivex/rxjava3/core/ObservableSource;IZ)Lio/reactivex/rxjava3/observables/ConnectableObservable; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->create(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)Lio/reactivex/rxjava3/observables/ConnectableObservable; -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast;->(Lio/reactivex/rxjava3/core/Observer;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->(Lio/reactivex/rxjava3/core/Observer;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed;->(Lio/reactivex/rxjava3/core/ObservableSource;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;Z)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScalarXMap;->tryScalarXMapSubscribe(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)Z HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed$ScanSeedObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/BiFunction;Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed$ScanSeedObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed$ScanSeedObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Supplier;Lio/reactivex/rxjava3/functions/BiFunction;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->(Lio/reactivex/rxjava3/core/Observer;J)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip;->(Lio/reactivex/rxjava3/core/ObservableSource;J)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeOnObserver;->(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeOnObserver;->dispose()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeOnObserver;->onComplete()V @@ -12131,33 +11874,11 @@ HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$Sub HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeTask;->run()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/Scheduler;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;JI)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->cancel()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->drain()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;IZ)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->(Lio/reactivex/rxjava3/core/Observer;J)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onComplete()V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake;->(Lio/reactivex/rxjava3/core/ObservableSource;J)V -HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableTake;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed$DebounceTimedObserver;->(Lio/reactivex/rxjava3/core/Observer;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler$Worker;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed$DebounceTimedObserver;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed$DebounceTimedObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed;->(Lio/reactivex/rxjava3/core/ObservableSource;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->(Lio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;Lio/reactivex/rxjava3/core/SingleObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->onSuccess(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/functions/Consumer;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleError;->(Lio/reactivex/rxjava3/functions/Supplier;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleError;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver;->(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/core/SingleObserver;)V @@ -12179,14 +11900,6 @@ HSPLio/reactivex/rxjava3/internal/operators/single/SingleMap$MapSingleObserver;- HSPLio/reactivex/rxjava3/internal/operators/single/SingleMap$MapSingleObserver;->onSuccess(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleMap;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/functions/Function;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleMap;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->(Lio/reactivex/rxjava3/core/SingleObserver;Lio/reactivex/rxjava3/core/Scheduler;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->onSuccess(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->run()V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/core/Scheduler;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorComplete;->(Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/functions/Predicate;)V -HSPLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorComplete;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn$OnErrorReturn;->(Lio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn;Lio/reactivex/rxjava3/core/SingleObserver;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn$OnErrorReturn;->onError(Ljava/lang/Throwable;)V HSPLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn$OnErrorReturn;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -12333,11 +12046,6 @@ HSPLio/reactivex/rxjava3/internal/subscriptions/SubscriptionHelper;->setOnce(Lja HSPLio/reactivex/rxjava3/internal/subscriptions/SubscriptionHelper;->setOnce(Ljava/util/concurrent/atomic/AtomicReference;Lorg/reactivestreams/Subscription;J)Z HSPLio/reactivex/rxjava3/internal/subscriptions/SubscriptionHelper;->validate(J)Z HSPLio/reactivex/rxjava3/internal/subscriptions/SubscriptionHelper;->validate(Lorg/reactivestreams/Subscription;Lorg/reactivestreams/Subscription;)Z -HSPLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->()V -HSPLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->(Ljava/lang/String;I)V -HSPLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->asSupplier()Lio/reactivex/rxjava3/functions/Supplier; -HSPLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->get()Ljava/lang/Object; -HSPLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->get()Ljava/util/List; HSPLio/reactivex/rxjava3/internal/util/AtomicThrowable;->()V HSPLio/reactivex/rxjava3/internal/util/BackpressureHelper;->add(Ljava/util/concurrent/atomic/AtomicLong;J)J HSPLio/reactivex/rxjava3/internal/util/BackpressureHelper;->addCancel(Ljava/util/concurrent/atomic/AtomicLong;J)J @@ -12345,9 +12053,6 @@ HSPLio/reactivex/rxjava3/internal/util/BackpressureHelper;->addCap(JJ)J HSPLio/reactivex/rxjava3/internal/util/BackpressureHelper;->produced(Ljava/util/concurrent/atomic/AtomicLong;J)J HSPLio/reactivex/rxjava3/internal/util/BackpressureHelper;->producedCancel(Ljava/util/concurrent/atomic/AtomicLong;J)J HSPLio/reactivex/rxjava3/internal/util/BlockingHelper;->verifyNonBlocking()V -HSPLio/reactivex/rxjava3/internal/util/EndConsumerHelper;->setOnce(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/disposables/Disposable;Ljava/lang/Class;)Z -HSPLio/reactivex/rxjava3/internal/util/ErrorMode;->()V -HSPLio/reactivex/rxjava3/internal/util/ErrorMode;->(Ljava/lang/String;I)V HSPLio/reactivex/rxjava3/internal/util/ExceptionHelper$Termination;->()V HSPLio/reactivex/rxjava3/internal/util/ExceptionHelper$Termination;->fillInStackTrace()Ljava/lang/Throwable; HSPLio/reactivex/rxjava3/internal/util/ExceptionHelper;->()V @@ -12376,7 +12081,6 @@ HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$onErrorStub$1;->()V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$onErrorStub$1;->()V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$onNextStub$1;->()V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$onNextStub$1;->()V -HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Action$0;->(Lkotlin/jvm/functions/Function0;)V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Consumer$0;->(Lkotlin/jvm/functions/Function1;)V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Consumer$0;->accept(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->()V @@ -12384,16 +12088,7 @@ HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->asConsumer(Lkotlin/jvm/functions HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->asOnCompleteAction(Lkotlin/jvm/functions/Function0;)Lio/reactivex/rxjava3/functions/Action; HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->asOnErrorConsumer(Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/functions/Consumer; HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Flowable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Observable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Single;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Flowable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Observable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Single;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLio/reactivex/rxjava3/observables/ConnectableObservable;->()V -HSPLio/reactivex/rxjava3/observables/ConnectableObservable;->refCount()Lio/reactivex/rxjava3/core/Observable; -HSPLio/reactivex/rxjava3/observers/DisposableObserver;->()V -HSPLio/reactivex/rxjava3/observers/DisposableObserver;->onStart()V -HSPLio/reactivex/rxjava3/observers/DisposableObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLio/reactivex/rxjava3/observers/SerializedObserver;->(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/observers/SerializedObserver;->(Lio/reactivex/rxjava3/core/Observer;Z)V HSPLio/reactivex/rxjava3/observers/SerializedObserver;->emitLoop()V @@ -12409,17 +12104,14 @@ HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->initNewThreadScheduler(Lio/reac HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->initSingleScheduler(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->isFailOnNonBlockingScheduler()Z HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/core/Flowable;)Lio/reactivex/rxjava3/core/Flowable; -HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/core/Maybe;)Lio/reactivex/rxjava3/core/Maybe; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/core/Observable;)Lio/reactivex/rxjava3/core/Observable; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/core/Single;)Lio/reactivex/rxjava3/core/Single; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/flowables/ConnectableFlowable;)Lio/reactivex/rxjava3/flowables/ConnectableFlowable; -HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/observables/ConnectableObservable;)Lio/reactivex/rxjava3/observables/ConnectableObservable; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onComputationScheduler(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onIoScheduler(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSchedule(Ljava/lang/Runnable;)Ljava/lang/Runnable; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSingleScheduler(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSubscribe(Lio/reactivex/rxjava3/core/Flowable;Lorg/reactivestreams/Subscriber;)Lorg/reactivestreams/Subscriber; -HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSubscribe(Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSubscribe(Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/core/Observer;)Lio/reactivex/rxjava3/core/Observer; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSubscribe(Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/core/SingleObserver;)Lio/reactivex/rxjava3/core/SingleObserver; HSPLio/reactivex/rxjava3/plugins/RxJavaPlugins;->setErrorHandler(Lio/reactivex/rxjava3/functions/Consumer;)V @@ -12446,16 +12138,6 @@ HSPLio/reactivex/rxjava3/processors/BehaviorProcessor;->onNext(Ljava/lang/Object HSPLio/reactivex/rxjava3/processors/BehaviorProcessor;->setCurrent(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/processors/BehaviorProcessor;->subscribeActual(Lorg/reactivestreams/Subscriber;)V HSPLio/reactivex/rxjava3/processors/FlowableProcessor;->()V -HSPLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->(Lorg/reactivestreams/Subscriber;Lio/reactivex/rxjava3/processors/PublishProcessor;)V -HSPLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->isCancelled()Z -HSPLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->request(J)V -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->()V -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->()V -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->add(Lio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;)Z -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->create()Lio/reactivex/rxjava3/processors/PublishProcessor; -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->onNext(Ljava/lang/Object;)V -HSPLio/reactivex/rxjava3/processors/PublishProcessor;->subscribeActual(Lorg/reactivestreams/Subscriber;)V HSPLio/reactivex/rxjava3/schedulers/Schedulers$ComputationTask;->()V HSPLio/reactivex/rxjava3/schedulers/Schedulers$IOTask;->()V HSPLio/reactivex/rxjava3/schedulers/Schedulers$NewThreadHolder;->()V @@ -12509,14 +12191,13 @@ HSPLj$/time/Duration;->()V HSPLj$/time/Duration;->(JI)V HSPLj$/time/Duration;->d(JI)Lj$/time/Duration; HSPLj$/time/Duration;->f(J)Lj$/time/Duration; -HSPLj$/time/Duration;->g(J)Lj$/time/Duration; HSPLj$/time/Duration;->ofMillis(J)Lj$/time/Duration; +HSPLj$/time/Duration;->ofSeconds(J)Lj$/time/Duration; HSPLj$/time/Duration;->ofSeconds(JJ)Lj$/time/Duration; HSPLj$/time/Duration;->toDays()J HSPLj$/time/Instant;->()V HSPLj$/time/Instant;->(JI)V HSPLj$/time/Instant;->atOffset(Lj$/time/ZoneOffset;)Lj$/time/OffsetDateTime; -HSPLj$/time/Instant;->atZone(Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; HSPLj$/time/Instant;->getEpochSecond()J HSPLj$/time/Instant;->getNano()I HSPLj$/time/Instant;->n(JI)Lj$/time/Instant; @@ -12528,7 +12209,6 @@ HSPLj$/time/LocalDate;->(III)V HSPLj$/time/LocalDate;->getLong(Lj$/time/temporal/TemporalField;)J HSPLj$/time/LocalDate;->o(III)Lj$/time/LocalDate; HSPLj$/time/LocalDate;->q(Lj$/time/temporal/TemporalField;)I -HSPLj$/time/LocalDate;->toEpochDay()J HSPLj$/time/LocalDate;->x(III)Lj$/time/LocalDate; HSPLj$/time/LocalDate;->z(J)Lj$/time/LocalDate; HSPLj$/time/LocalDateTime;->()V @@ -12540,7 +12220,6 @@ HSPLj$/time/LocalDateTime;->j(Lj$/time/temporal/m;)Ljava/lang/Object; HSPLj$/time/LocalDateTime;->ofInstant(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/LocalDateTime; HSPLj$/time/LocalDateTime;->r(Lj$/time/LocalDate;Lj$/time/LocalTime;)Lj$/time/LocalDateTime; HSPLj$/time/LocalDateTime;->s(JILj$/time/ZoneOffset;)Lj$/time/LocalDateTime; -HSPLj$/time/LocalDateTime;->v()Lj$/time/LocalDate; HSPLj$/time/LocalTime;->()V HSPLj$/time/LocalTime;->(IIII)V HSPLj$/time/LocalTime;->n(IIII)Lj$/time/LocalTime; @@ -12559,10 +12238,6 @@ 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;->c(JJ)J HSPLj$/time/a;->d(Lsun/misc/Unsafe;Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z HSPLj$/time/a;->e(JJ)J @@ -12727,6 +12402,7 @@ HSPLj$/util/Optional;->empty()Lj$/util/Optional; HSPLj$/util/Optional;->get()Ljava/lang/Object; HSPLj$/util/Optional;->isPresent()Z HSPLj$/util/Optional;->map(Lj$/util/function/Function;)Lj$/util/Optional; +HSPLj$/util/Optional;->of(Ljava/lang/Object;)Lj$/util/Optional; HSPLj$/util/Optional;->ofNullable(Ljava/lang/Object;)Lj$/util/Optional; HSPLj$/util/Optional;->orElse(Ljava/lang/Object;)Ljava/lang/Object; HSPLj$/util/S;->([Ljava/lang/Object;III)V @@ -12752,9 +12428,9 @@ 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; HSPLj$/util/concurrent/ConcurrentHashMap;->containsKey(Ljava/lang/Object;)Z HSPLj$/util/concurrent/ConcurrentHashMap;->entrySet()Ljava/util/Set; HSPLj$/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; @@ -12764,8 +12440,7 @@ HSPLj$/util/concurrent/ConcurrentHashMap;->keySet()Ljava/util/Set; HSPLj$/util/concurrent/ConcurrentHashMap;->mappingCount()J HSPLj$/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLj$/util/concurrent/ConcurrentHashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLj$/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; -HSPLj$/util/concurrent/ConcurrentHashMap;->replaceNode(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLj$/util/concurrent/ConcurrentHashMap;->putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; HSPLj$/util/concurrent/ConcurrentHashMap;->resizeStamp(I)I HSPLj$/util/concurrent/ConcurrentHashMap;->setTabAt([Lj$/util/concurrent/l;ILj$/util/concurrent/l;)V HSPLj$/util/concurrent/ConcurrentHashMap;->size()I @@ -12774,7 +12449,6 @@ HSPLj$/util/concurrent/ConcurrentHashMap;->sumCount()J HSPLj$/util/concurrent/ConcurrentHashMap;->tabAt([Lj$/util/concurrent/l;I)Lj$/util/concurrent/l; HSPLj$/util/concurrent/ConcurrentHashMap;->tableSizeFor(I)I HSPLj$/util/concurrent/ConcurrentHashMap;->transfer([Lj$/util/concurrent/l;[Lj$/util/concurrent/l;)V -HSPLj$/util/concurrent/ConcurrentHashMap;->treeifyBin([Lj$/util/concurrent/l;I)V HSPLj$/util/concurrent/a;->([Lj$/util/concurrent/l;IILj$/util/concurrent/ConcurrentHashMap;)V HSPLj$/util/concurrent/a;->hasNext()Z HSPLj$/util/concurrent/b;->(Lj$/util/concurrent/ConcurrentHashMap;)V @@ -12790,19 +12464,7 @@ HSPLj$/util/concurrent/i;->iterator()Ljava/util/Iterator; HSPLj$/util/concurrent/l;->(ILjava/lang/Object;Ljava/lang/Object;Lj$/util/concurrent/l;)V HSPLj$/util/concurrent/p;->([Lj$/util/concurrent/l;III)V HSPLj$/util/concurrent/p;->b()Lj$/util/concurrent/l; -HSPLj$/util/concurrent/q;->()V -HSPLj$/util/concurrent/q;->(Lj$/util/concurrent/r;)V -HSPLj$/util/concurrent/q;->a(Ljava/lang/Object;I)Lj$/util/concurrent/l; -HSPLj$/util/concurrent/q;->c(Lj$/util/concurrent/r;Lj$/util/concurrent/r;)Lj$/util/concurrent/r; -HSPLj$/util/concurrent/q;->e()V -HSPLj$/util/concurrent/q;->f(ILjava/lang/Object;Ljava/lang/Object;)Lj$/util/concurrent/r; -HSPLj$/util/concurrent/q;->h(Lj$/util/concurrent/r;Lj$/util/concurrent/r;)Lj$/util/concurrent/r; -HSPLj$/util/concurrent/q;->i(Lj$/util/concurrent/r;Lj$/util/concurrent/r;)Lj$/util/concurrent/r; -HSPLj$/util/concurrent/q;->j(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLj$/util/concurrent/r;->(ILjava/lang/Object;Ljava/lang/Object;Lj$/util/concurrent/r;Lj$/util/concurrent/r;)V -HSPLj$/util/concurrent/r;->b(ILjava/lang/Object;Ljava/lang/Class;)Lj$/util/concurrent/r; HSPLj$/util/concurrent/v;->()V -HSPLj$/util/concurrent/v;->a(Lsun/misc/Unsafe;Ljava/lang/Object;J)I HSPLj$/util/concurrent/v;->b()Ljava/lang/reflect/Field; HSPLj$/util/concurrent/v;->c()Lsun/misc/Unsafe; HSPLj$/util/d;->(Ljava/util/Map;)V @@ -12991,11 +12653,14 @@ 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;->isEmpty()Z 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$IteratorImpl;->hasNext()Z +HSPLkotlin/collections/AbstractList$IteratorImpl;->next()Ljava/lang/Object; HSPLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->iterator()Ljava/util/Iterator; @@ -13058,10 +12723,10 @@ HSPLkotlin/collections/ArraysKt;->plus([Ljava/lang/Object;Ljava/lang/Object;)[Lj HSPLkotlin/collections/ArraysKt;->plus([Ljava/lang/Object;[Ljava/lang/Object;)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/ArraysKt;->toMutableSet([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/ArraysKt;->zip([Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt__ArraysJVMKt;->copyOfRangeToIndexCheck(II)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([B[BIIIILjava/lang/Object;)[B HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object; HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B @@ -13083,7 +12748,6 @@ HSPLkotlin/collections/ArraysKt___ArraysKt;->map([Ljava/lang/Object;Lkotlin/jvm/ HSPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableSet([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; HSPLkotlin/collections/ArraysKt___ArraysKt;->zip([Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List; @@ -13091,7 +12755,6 @@ HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/I HSPLkotlin/collections/CollectionsKt;->addAll(Ljava/util/Collection;[Ljava/lang/Object;)Z HSPLkotlin/collections/CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence; HSPLkotlin/collections/CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I -HSPLkotlin/collections/CollectionsKt;->chunked(Ljava/lang/Iterable;I)Ljava/util/List; HSPLkotlin/collections/CollectionsKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I HSPLkotlin/collections/CollectionsKt;->contains(Ljava/lang/Iterable;Ljava/lang/Object;)Z HSPLkotlin/collections/CollectionsKt;->emptyList()Ljava/util/List; @@ -13131,7 +12794,6 @@ HSPLkotlin/collections/CollectionsKt;->sumOfFloat(Ljava/lang/Iterable;)F HSPLkotlin/collections/CollectionsKt;->toIntArray(Ljava/util/Collection;)[I HSPLkotlin/collections/CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; HSPLkotlin/collections/CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; HSPLkotlin/collections/CollectionsKt;->windowed$default(Ljava/lang/Iterable;IIZILjava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt;->withIndex(Ljava/lang/Iterable;)Ljava/lang/Iterable; @@ -13165,7 +12827,6 @@ HSPLkotlin/collections/CollectionsKt___CollectionsKt$withIndex$1;->(Ljava/ HSPLkotlin/collections/CollectionsKt___CollectionsKt$withIndex$1;->invoke()Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt$withIndex$1;->invoke()Ljava/util/Iterator; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->chunked(Ljava/lang/Iterable;I)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->contains(Ljava/lang/Iterable;Ljava/lang/Object;)Z HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filter(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List; @@ -13176,6 +12837,7 @@ 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; @@ -13195,7 +12857,6 @@ HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Col 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; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->windowed$default(Ljava/lang/Iterable;IIZILjava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->windowed(Ljava/lang/Iterable;IIZ)Ljava/util/List; @@ -13210,7 +12871,6 @@ HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z HSPLkotlin/collections/EmptyList;->getSize()I HSPLkotlin/collections/EmptyList;->isEmpty()Z HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; -HSPLkotlin/collections/EmptyList;->listIterator()Ljava/util/ListIterator; HSPLkotlin/collections/EmptyList;->listIterator(I)Ljava/util/ListIterator; HSPLkotlin/collections/EmptyList;->size()I HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; @@ -13221,10 +12881,8 @@ HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Void; HSPLkotlin/collections/EmptyMap;->getEntries()Ljava/util/Set; -HSPLkotlin/collections/EmptyMap;->getSize()I HSPLkotlin/collections/EmptyMap;->getValues()Ljava/util/Collection; HSPLkotlin/collections/EmptyMap;->isEmpty()Z -HSPLkotlin/collections/EmptyMap;->size()I HSPLkotlin/collections/EmptyMap;->values()Ljava/util/Collection; HSPLkotlin/collections/EmptySet;->()V HSPLkotlin/collections/EmptySet;->()V @@ -13252,7 +12910,6 @@ HSPLkotlin/collections/MapsKt;->linkedMapOf([Lkotlin/Pair;)Ljava/util/LinkedHash 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; @@ -13265,7 +12922,6 @@ HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; 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 @@ -13393,9 +13049,6 @@ HSPLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Object;Lja HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V HSPLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; -HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V @@ -14970,6 +14623,7 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$Kind;->(Ljava HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$Kind;->getNumber()I HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$Kind;->values()[Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class$Kind; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->()V +HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->(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$Class;->(Z)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Class;->getConstructor(I)Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor; @@ -15713,7 +15367,6 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readBytes()Lkot HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readDouble()D HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readEnum()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readFloat()F -HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readInt32()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readRawByte()B HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readRawLittleEndian32()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readRawLittleEndian64()J @@ -15773,10 +15426,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()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 @@ -15836,6 +15487,7 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/LiteralByteString;->toString(Ljava HSPLkotlin/reflect/jvm/internal/impl/protobuf/RopeByteString;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/RopeByteString;->concatenate(Lkotlin/reflect/jvm/internal/impl/protobuf/ByteString;Lkotlin/reflect/jvm/internal/impl/protobuf/ByteString;)Lkotlin/reflect/jvm/internal/impl/protobuf/ByteString; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->(I)V +HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$1;->makeImmutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap$EmptySet$2;->()V @@ -16302,6 +15954,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; @@ -16357,6 +16010,7 @@ HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeseria 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; @@ -16619,6 +16273,7 @@ HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComp HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->equals(Ljava/lang/Object;)Z HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$KeyWithComputation;->hashCode()I HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValue;->postCompute(Ljava/lang/Object;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;->(Lkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager;Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/impl/storage/LockBasedStorageManager$LockBasedLazyValueWithPostCompute;->invoke()Ljava/lang/Object; @@ -16970,7 +16625,6 @@ HSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/c HSPLkotlin/sequences/SequenceScope;->()V HSPLkotlin/sequences/SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt;->filter(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; -HSPLkotlin/sequences/SequencesKt;->filterIsInstance(Lkotlin/sequences/Sequence;Ljava/lang/Class;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object; @@ -16994,8 +16648,6 @@ HSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;) HSPLkotlin/sequences/SequencesKt__SequencesKt;->constrainOnce(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Lkotlin/jvm/functions/Function0;)Lkotlin/sequences/Sequence; -HSPLkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1;->(Ljava/lang/Class;)V -HSPLkotlin/sequences/SequencesKt___SequencesJvmKt;->filterIsInstance(Lkotlin/sequences/Sequence;Ljava/lang/Class;)Lkotlin/sequences/Sequence; HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; @@ -17115,7 +16767,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;->findAnyOf$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/util/Collection;IZZ)Lkotlin/Pair; 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 @@ -17137,6 +16788,7 @@ HSPLkotlin/text/StringsKt__StringsKt;->splitToSequence$default(Ljava/lang/CharSe HSPLkotlin/text/StringsKt__StringsKt;->splitToSequence(Ljava/lang/CharSequence;[Ljava/lang/String;ZI)Lkotlin/sequences/Sequence; HSPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z +HSPLkotlin/text/StringsKt__StringsKt;->substring(Ljava/lang/CharSequence;Lkotlin/ranges/IntRange;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringAfter(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->substringBeforeLast(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; @@ -17273,7 +16925,6 @@ 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 @@ -17299,10 +16950,8 @@ 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 @@ -17348,7 +16997,6 @@ 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 @@ -17358,6 +17006,7 @@ 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; @@ -17384,13 +17033,11 @@ 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;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/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;->isMainThread()Z HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isOpen()Z HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnly()Z @@ -17402,7 +17049,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/Su HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; -HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->queryWithFactory(Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; @@ -17442,12 +17088,14 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getWritableDatabase()Lnet/ 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 HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindString(ILjava/lang/String;)V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->clearBindings()V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getBindArgs()[Ljava/lang/Object; HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getColumnNames()[Ljava/lang/String; +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;->getSql()Ljava/lang/String; @@ -17472,14 +17120,12 @@ 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 HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfNoTransaction()V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfTransactionMarkedSuccessful()V HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V -HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->executeInsert()J HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->executeUpdateDelete()I HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->simpleQueryForLong()J HSPLnet/zetetic/database/sqlcipher/SQLiteStatementInfo;->()V @@ -17632,7 +17278,6 @@ HSPLokhttp3/HttpUrl;->()V HSPLokhttp3/HttpUrl;->(Lokhttp3/HttpUrl$Builder;)V HSPLokhttp3/HttpUrl;->canonicalize(Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)Ljava/lang/String; HSPLokhttp3/HttpUrl;->canonicalize(Ljava/lang/String;Ljava/lang/String;ZZZZ)Ljava/lang/String; -HSPLokhttp3/HttpUrl;->canonicalize(Lokio/Buffer;Ljava/lang/String;IILjava/lang/String;ZZZZLjava/nio/charset/Charset;)V HSPLokhttp3/HttpUrl;->defaultPort(Ljava/lang/String;)I HSPLokhttp3/HttpUrl;->encodedFragment()Ljava/lang/String; HSPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String; @@ -17651,7 +17296,6 @@ HSPLokhttp3/HttpUrl;->pathSegmentsToString(Ljava/lang/StringBuilder;Ljava/util/L HSPLokhttp3/HttpUrl;->percentDecode(Ljava/lang/String;IIZ)Ljava/lang/String; HSPLokhttp3/HttpUrl;->percentDecode(Ljava/lang/String;Z)Ljava/lang/String; HSPLokhttp3/HttpUrl;->percentDecode(Ljava/util/List;Z)Ljava/util/List; -HSPLokhttp3/HttpUrl;->percentDecode(Lokio/Buffer;Ljava/lang/String;IIZ)V HSPLokhttp3/HttpUrl;->port()I HSPLokhttp3/HttpUrl;->queryStringToNamesAndValues(Ljava/lang/String;)Ljava/util/List; HSPLokhttp3/HttpUrl;->redact()Ljava/lang/String; @@ -18002,6 +17646,7 @@ HSPLokhttp3/internal/tls/OkHostnameVerifier;->verifyHostname(Ljava/lang/String;L HSPLokhttp3/internal/ws/RealWebSocket$1;->(Lokhttp3/internal/ws/RealWebSocket;)V HSPLokhttp3/internal/ws/RealWebSocket$2;->(Lokhttp3/internal/ws/RealWebSocket;Lokhttp3/Request;)V HSPLokhttp3/internal/ws/RealWebSocket$2;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V +HSPLokhttp3/internal/ws/RealWebSocket$Close;->(ILokio/ByteString;J)V HSPLokhttp3/internal/ws/RealWebSocket;->()V HSPLokhttp3/internal/ws/RealWebSocket;->(Lokhttp3/Request;Lokhttp3/WebSocketListener;Ljava/util/Random;J)V HSPLokhttp3/internal/ws/RealWebSocket;->checkResponse(Lokhttp3/Response;)V @@ -18009,6 +17654,7 @@ HSPLokhttp3/internal/ws/RealWebSocket;->close(ILjava/lang/String;)Z HSPLokhttp3/internal/ws/RealWebSocket;->close(ILjava/lang/String;J)Z HSPLokhttp3/internal/ws/RealWebSocket;->connect(Lokhttp3/OkHttpClient;)V HSPLokhttp3/internal/ws/RealWebSocket;->failWebSocket(Ljava/lang/Exception;Lokhttp3/Response;)V +HSPLokhttp3/internal/ws/RealWebSocket;->runWriter()V HSPLokhttp3/internal/ws/WebSocketProtocol;->closeCodeExceptionMessage(I)Ljava/lang/String; HSPLokhttp3/internal/ws/WebSocketProtocol;->validateCloseCode(I)V HSPLokio/AsyncTimeout$Companion;->()V @@ -18053,13 +17699,15 @@ 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;->getByte(J)B 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 +HSPLokio/Buffer;->readByteArray()[B HSPLokio/Buffer;->readByteArray(J)[B HSPLokio/Buffer;->readByteString()Lokio/ByteString; HSPLokio/Buffer;->readByteString(J)Lokio/ByteString; @@ -18070,13 +17718,10 @@ HSPLokio/Buffer;->readIntLe()I HSPLokio/Buffer;->readShort()S HSPLokio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String; HSPLokio/Buffer;->readString(Ljava/nio/charset/Charset;)Ljava/lang/String; -HSPLokio/Buffer;->readUtf8()Ljava/lang/String; HSPLokio/Buffer;->readUtf8(J)Ljava/lang/String; HSPLokio/Buffer;->setSize$okio(J)V HSPLokio/Buffer;->size()J -HSPLokio/Buffer;->skip(J)V HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; -HSPLokio/Buffer;->write(Lokio/Buffer;J)V HSPLokio/Buffer;->write([B)Lokio/Buffer; HSPLokio/Buffer;->write([BII)Lokio/Buffer; HSPLokio/Buffer;->writeAll(Lokio/Source;)J @@ -18088,7 +17733,6 @@ HSPLokio/Buffer;->writeString(Ljava/lang/String;Ljava/nio/charset/Charset;)Lokio HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;)Lokio/Buffer; HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/Buffer; HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;II)Lokio/BufferedSink; -HSPLokio/Buffer;->writeUtf8CodePoint(I)Lokio/Buffer; HSPLokio/ByteString$Companion;->()V HSPLokio/ByteString$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; @@ -18141,6 +17785,7 @@ 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; @@ -18380,7 +18025,6 @@ HSPLorg/conscrypt/ConscryptEngine;->singleDstBuffer(Ljava/nio/ByteBuffer;)[Ljava HSPLorg/conscrypt/ConscryptEngine;->singleSrcBuffer(Ljava/nio/ByteBuffer;)[Ljava/nio/ByteBuffer; HSPLorg/conscrypt/ConscryptEngine;->transitionTo(I)V HSPLorg/conscrypt/ConscryptEngine;->unwrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult; -HSPLorg/conscrypt/ConscryptEngine;->unwrap([Ljava/nio/ByteBuffer;II[Ljava/nio/ByteBuffer;II)Ljavax/net/ssl/SSLEngineResult; HSPLorg/conscrypt/ConscryptEngine;->unwrap([Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult; HSPLorg/conscrypt/ConscryptEngine;->verifyCertificateChain([[BLjava/lang/String;)V HSPLorg/conscrypt/ConscryptEngine;->wrap(Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;)Ljavax/net/ssl/SSLEngineResult; @@ -18399,8 +18043,8 @@ 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 HSPLorg/conscrypt/ConscryptEngineSocket$SSLOutputStream;->(Lorg/conscrypt/ConscryptEngineSocket;)V HSPLorg/conscrypt/ConscryptEngineSocket$SSLOutputStream;->access$200(Lorg/conscrypt/ConscryptEngineSocket$SSLOutputStream;Ljava/nio/ByteBuffer;)V @@ -18782,7 +18426,6 @@ HSPLorg/conscrypt/SSLUtils;->concat([[Ljava/lang/String;)[Ljava/lang/String; HSPLorg/conscrypt/SSLUtils;->decodeX509Certificate(Ljava/security/cert/CertificateFactory;[B)Ljava/security/cert/X509Certificate; HSPLorg/conscrypt/SSLUtils;->decodeX509CertificateChain([[B)[Ljava/security/cert/X509Certificate; HSPLorg/conscrypt/SSLUtils;->getCertificateFactory()Ljava/security/cert/CertificateFactory; -HSPLorg/conscrypt/SSLUtils;->getEncryptedPacketLength(Ljava/nio/ByteBuffer;)I HSPLorg/conscrypt/SSLUtils;->getEncryptedPacketLength([Ljava/nio/ByteBuffer;I)I HSPLorg/conscrypt/SSLUtils;->toProtocolString([B)Ljava/lang/String; HSPLorg/conscrypt/SSLUtils;->unsignedByte(B)S @@ -18800,7 +18443,6 @@ HSPLorg/greenrobot/eventbus/EventBus;->addInterfaces(Ljava/util/List;[Ljava/lang HSPLorg/greenrobot/eventbus/EventBus;->builder()Lorg/greenrobot/eventbus/EventBusBuilder; HSPLorg/greenrobot/eventbus/EventBus;->getDefault()Lorg/greenrobot/eventbus/EventBus; HSPLorg/greenrobot/eventbus/EventBus;->getStickyEvent(Ljava/lang/Class;)Ljava/lang/Object; -HSPLorg/greenrobot/eventbus/EventBus;->isRegistered(Ljava/lang/Object;)Z HSPLorg/greenrobot/eventbus/EventBus;->lookupAllEventTypes(Ljava/lang/Class;)Ljava/util/List; HSPLorg/greenrobot/eventbus/EventBus;->post(Ljava/lang/Object;)V HSPLorg/greenrobot/eventbus/EventBus;->postSingleEvent(Ljava/lang/Object;Lorg/greenrobot/eventbus/EventBus$PostingThreadState;)V @@ -18832,7 +18474,6 @@ HSPLorg/greenrobot/eventbus/SubscriberMethodFinder;->getMethodsAndRelease(Lorg/g HSPLorg/greenrobot/eventbus/SubscriberMethodFinder;->getSubscriberInfo(Lorg/greenrobot/eventbus/SubscriberMethodFinder$FindState;)Lorg/greenrobot/eventbus/meta/SubscriberInfo; HSPLorg/greenrobot/eventbus/SubscriberMethodFinder;->prepareFindState()Lorg/greenrobot/eventbus/SubscriberMethodFinder$FindState; HSPLorg/greenrobot/eventbus/Subscription;->(Ljava/lang/Object;Lorg/greenrobot/eventbus/SubscriberMethod;)V -HSPLorg/greenrobot/eventbus/Subscription;->equals(Ljava/lang/Object;)Z HSPLorg/greenrobot/eventbus/ThreadMode;->()V HSPLorg/greenrobot/eventbus/ThreadMode;->(Ljava/lang/String;I)V HSPLorg/signal/aesgcmprovider/AesGcmProvider;->()V @@ -18898,7 +18539,6 @@ HSPLorg/signal/core/util/CharacterIterable$CharacterIterator;->next()Ljava/lang/ HSPLorg/signal/core/util/CharacterIterable;->-$$Nest$fgetstring(Lorg/signal/core/util/CharacterIterable;)Ljava/lang/String; HSPLorg/signal/core/util/CharacterIterable;->(Ljava/lang/String;)V HSPLorg/signal/core/util/CharacterIterable;->iterator()Ljava/util/Iterator; -HSPLorg/signal/core/util/CollectionsExtensionsKt;->flatten(Ljava/util/List;)Ljava/util/Map; HSPLorg/signal/core/util/Conversions;->longTo4ByteArray([BIJ)I HSPLorg/signal/core/util/CryptoUtil;->hmacSha256([B[B)[B HSPLorg/signal/core/util/CursorExtensionsKt;->isNull(Landroid/database/Cursor;Ljava/lang/String;)Z @@ -18909,6 +18549,7 @@ HSPLorg/signal/core/util/CursorExtensionsKt;->optionalLong(Landroid/database/Cur HSPLorg/signal/core/util/CursorExtensionsKt;->optionalString(Landroid/database/Cursor;Ljava/lang/String;)Lj$/util/Optional; HSPLorg/signal/core/util/CursorExtensionsKt;->readToSingleInt$default(Landroid/database/Cursor;IILjava/lang/Object;)I HSPLorg/signal/core/util/CursorExtensionsKt;->readToSingleInt(Landroid/database/Cursor;I)I +HSPLorg/signal/core/util/CursorExtensionsKt;->readToSingleLong$default(Landroid/database/Cursor;JILjava/lang/Object;)J HSPLorg/signal/core/util/CursorExtensionsKt;->readToSingleLong(Landroid/database/Cursor;J)J HSPLorg/signal/core/util/CursorExtensionsKt;->readToSingleObject(Landroid/database/Cursor;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; HSPLorg/signal/core/util/CursorExtensionsKt;->requireBlob(Landroid/database/Cursor;Ljava/lang/String;)[B @@ -18961,7 +18602,6 @@ HSPLorg/signal/core/util/InsertBuilderPart1;->values([Lkotlin/Pair;)Lorg/signal/ HSPLorg/signal/core/util/InsertBuilderPart2;->(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;Landroid/content/ContentValues;)V HSPLorg/signal/core/util/InsertBuilderPart2;->run$default(Lorg/signal/core/util/InsertBuilderPart2;IILjava/lang/Object;)J HSPLorg/signal/core/util/InsertBuilderPart2;->run(I)J -HSPLorg/signal/core/util/ListUtil;->chunk(Ljava/util/List;I)Ljava/util/List; HSPLorg/signal/core/util/MapUtil;->mapOrDefault(Ljava/util/Map;Ljava/lang/Object;Lj$/util/function/Function;Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/signal/core/util/MemoryTracker$$ExternalSyntheticLambda1;->(Lorg/signal/core/util/MemoryTracker;)V HSPLorg/signal/core/util/MemoryTracker$AppHeapUsage;->(JJJ)V @@ -18970,8 +18610,6 @@ HSPLorg/signal/core/util/MemoryTracker;->()V HSPLorg/signal/core/util/MemoryTracker;->getAppJvmHeapUsage()Lorg/signal/core/util/MemoryTracker$AppHeapUsage; HSPLorg/signal/core/util/MemoryTracker;->start()V HSPLorg/signal/core/util/OptionalExtensionsKt;->or(Lj$/util/Optional;Lj$/util/Optional;)Lj$/util/Optional; -HSPLorg/signal/core/util/OptionalExtensionsKt;->orNull(Lj$/util/Optional;)Ljava/lang/Object; -HSPLorg/signal/core/util/OptionalExtensionsKt;->toOptional(Ljava/lang/Object;)Lj$/util/Optional; HSPLorg/signal/core/util/PendingIntentFlags;->()V HSPLorg/signal/core/util/PendingIntentFlags;->()V HSPLorg/signal/core/util/PendingIntentFlags;->immutable()I @@ -18998,7 +18636,6 @@ HSPLorg/signal/core/util/SelectBuilderPart3;->orderBy(Ljava/lang/String;)Lorg/si HSPLorg/signal/core/util/SelectBuilderPart3;->run()Landroid/database/Cursor; HSPLorg/signal/core/util/SelectBuilderPart4a;->(Landroidx/sqlite/db/SupportSQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V HSPLorg/signal/core/util/SelectBuilderPart4a;->limit(I)Lorg/signal/core/util/SelectBuilderPart5; -HSPLorg/signal/core/util/SelectBuilderPart4a;->limit(Ljava/lang/String;)Lorg/signal/core/util/SelectBuilderPart5; HSPLorg/signal/core/util/SelectBuilderPart4a;->run()Landroid/database/Cursor; HSPLorg/signal/core/util/SelectBuilderPart4b;->(Landroidx/sqlite/db/SupportSQLiteDatabase;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V HSPLorg/signal/core/util/SelectBuilderPart4b;->orderBy(Ljava/lang/String;)Lorg/signal/core/util/SelectBuilderPart5; @@ -19008,34 +18645,14 @@ HSPLorg/signal/core/util/SetUtil;->newHashSet([Ljava/lang/Object;)Ljava/util/Has HSPLorg/signal/core/util/ShakeDetector$SamplePool;->()V HSPLorg/signal/core/util/ShakeDetector$SampleQueue;->()V HSPLorg/signal/core/util/ShakeDetector;->(Lorg/signal/core/util/ShakeDetector$Listener;)V -HSPLorg/signal/core/util/SqlUtil$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function1;)V -HSPLorg/signal/core/util/SqlUtil$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/signal/core/util/SqlUtil$CollectionOperator;->$values()[Lorg/signal/core/util/SqlUtil$CollectionOperator; -HSPLorg/signal/core/util/SqlUtil$CollectionOperator;->()V -HSPLorg/signal/core/util/SqlUtil$CollectionOperator;->(Ljava/lang/String;ILjava/lang/String;)V -HSPLorg/signal/core/util/SqlUtil$CollectionOperator;->getSql()Ljava/lang/String; HSPLorg/signal/core/util/SqlUtil$Query;->(Ljava/lang/String;[Ljava/lang/String;)V HSPLorg/signal/core/util/SqlUtil$Query;->getWhere()Ljava/lang/String; HSPLorg/signal/core/util/SqlUtil$Query;->getWhereArgs()[Ljava/lang/String; -HSPLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->(Ljava/lang/String;)V -HSPLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->invoke(Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->$r8$lambda$zW4YXJaIlJT3vPgMCfyiQ3eZdqc(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; HSPLorg/signal/core/util/SqlUtil;->()V HSPLorg/signal/core/util/SqlUtil;->()V -HSPLorg/signal/core/util/SqlUtil;->access$buildSingleCustomCollectionQuery(Lorg/signal/core/util/SqlUtil;Ljava/lang/String;Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->appendArg([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String; HSPLorg/signal/core/util/SqlUtil;->buildArgs(J)[Ljava/lang/String; HSPLorg/signal/core/util/SqlUtil;->buildArgs([Ljava/lang/Object;)[Ljava/lang/String; -HSPLorg/signal/core/util/SqlUtil;->buildCollectionQuery$default(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;ILorg/signal/core/util/SqlUtil$CollectionOperator;ILjava/lang/Object;)Ljava/util/List; -HSPLorg/signal/core/util/SqlUtil;->buildCollectionQuery(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;ILorg/signal/core/util/SqlUtil$CollectionOperator;)Ljava/util/List; -HSPLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery$lambda$11(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;)Ljava/util/List; -HSPLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;I)Ljava/util/List; HSPLorg/signal/core/util/SqlUtil;->buildQuery(Ljava/lang/String;[Ljava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->buildSingleCollectionQuery$default(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;Lorg/signal/core/util/SqlUtil$CollectionOperator;ILjava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->buildSingleCollectionQuery(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;Lorg/signal/core/util/SqlUtil$CollectionOperator;)Lorg/signal/core/util/SqlUtil$Query; -HSPLorg/signal/core/util/SqlUtil;->buildSingleCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; HSPLorg/signal/core/util/SqlUtil;->buildTrueUpdateQuery(Ljava/lang/String;[Ljava/lang/String;Landroid/content/ContentValues;)Lorg/signal/core/util/SqlUtil$Query; HSPLorg/signal/core/util/SqlUtil;->tableExists(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)Z HSPLorg/signal/core/util/Stopwatch$Split;->(JJLjava/lang/String;)V @@ -19060,7 +18677,6 @@ HSPLorg/signal/core/util/StringUtil;->()V HSPLorg/signal/core/util/StringUtil;->isEmpty(Ljava/lang/String;)Z HSPLorg/signal/core/util/StringUtil;->isolateBidi(Ljava/lang/String;)Ljava/lang/String; HSPLorg/signal/core/util/StringUtil;->replace(Ljava/lang/CharSequence;CLjava/lang/String;)Ljava/lang/CharSequence; -HSPLorg/signal/core/util/StringUtil;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; HSPLorg/signal/core/util/StringUtil;->trimToFit(Ljava/lang/String;I)Ljava/lang/String; HSPLorg/signal/core/util/ThreadUtil;->()V HSPLorg/signal/core/util/ThreadUtil;->assertMainThread()V @@ -19070,7 +18686,6 @@ HSPLorg/signal/core/util/ThreadUtil;->isMainThread()Z HSPLorg/signal/core/util/ThreadUtil;->postToMain(Ljava/lang/Runnable;)V HSPLorg/signal/core/util/ThreadUtil;->runOnMain(Ljava/lang/Runnable;)V HSPLorg/signal/core/util/ThreadUtil;->sleep(J)V -HSPLorg/signal/core/util/ToolbarExtensionsKt;->setActionItemTint(Landroidx/appcompat/widget/Toolbar;I)V HSPLorg/signal/core/util/UpdateAllBuilderPart1;->(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;)V HSPLorg/signal/core/util/UpdateAllBuilderPart1;->values([Lkotlin/Pair;)Lorg/signal/core/util/UpdateAllBuilderPart2; HSPLorg/signal/core/util/UpdateAllBuilderPart2;->(Landroidx/sqlite/db/SupportSQLiteDatabase;Ljava/lang/String;Landroid/content/ContentValues;)V @@ -19109,7 +18724,6 @@ HSPLorg/signal/core/util/concurrent/DeadlockDetector;->start()V HSPLorg/signal/core/util/concurrent/FutureMapTransformer;->(Lorg/signal/core/util/concurrent/ListenableFuture;Lorg/signal/core/util/concurrent/FutureTransformers$Transformer;)V HSPLorg/signal/core/util/concurrent/FutureMapTransformer;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; HSPLorg/signal/core/util/concurrent/FutureTransformers;->map(Lorg/signal/core/util/concurrent/ListenableFuture;Lorg/signal/core/util/concurrent/FutureTransformers$Transformer;)Lorg/signal/core/util/concurrent/ListenableFuture; -HSPLorg/signal/core/util/concurrent/LatestPrioritizedSerialExecutor;->(Ljava/util/concurrent/Executor;)V HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->()V HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->add(Lio/reactivex/rxjava3/disposables/Disposable;)Lorg/signal/core/util/concurrent/LifecycleDisposable; HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->bindTo(Landroidx/lifecycle/Lifecycle;)Lorg/signal/core/util/concurrent/LifecycleDisposable; @@ -19120,22 +18734,13 @@ HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->onResume(Landroidx/lif HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->onStart(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/signal/core/util/concurrent/LifecycleDisposable;->plusAssign(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLorg/signal/core/util/concurrent/LifecycleDisposableKt;->addTo(Lio/reactivex/rxjava3/disposables/Disposable;Lorg/signal/core/util/concurrent/LifecycleDisposable;)Lio/reactivex/rxjava3/disposables/Disposable; -HSPLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1;->(Ljava/lang/Object;)V -HSPLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1;->invoke(Ljava/lang/Object;)V -HSPLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$2;->(Ljava/lang/Object;)V -HSPLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$3;->(Ljava/lang/Object;)V HSPLorg/signal/core/util/concurrent/RxExtensions;->safeBlockingGet(Lio/reactivex/rxjava3/core/Single;)Ljava/lang/Object; -HSPLorg/signal/core/util/concurrent/RxExtensions;->subscribeWithSubject(Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/subjects/Subject;Lio/reactivex/rxjava3/disposables/CompositeDisposable;)Lio/reactivex/rxjava3/subjects/Subject; HSPLorg/signal/core/util/concurrent/SettableFuture;->()V -HSPLorg/signal/core/util/concurrent/SettableFuture;->(Ljava/lang/Object;)V HSPLorg/signal/core/util/concurrent/SettableFuture;->get()Ljava/lang/Object; HSPLorg/signal/core/util/concurrent/SettableFuture;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; 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 @@ -19148,11 +18753,9 @@ 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; @@ -19243,7 +18846,6 @@ 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; @@ -19284,8 +18886,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;->forMethodStart(Ljava/lang/String;JJLjava/util/Map;)Lorg/signal/core/util/tracing/TracePacket; HSPLorg/signal/core/util/tracing/Tracer;->forSynchronization(J)Lorg/signal/core/util/tracing/TracePacket; @@ -19293,7 +18893,6 @@ HSPLorg/signal/core/util/tracing/Tracer;->forTrack(JLjava/lang/String;)Lorg/sign HSPLorg/signal/core/util/tracing/Tracer;->forTrackId(J)Lorg/signal/core/util/tracing/TracePacket; 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;->toByteArray(Ljava/util/UUID;)[B @@ -19332,6 +18931,8 @@ HSPLorg/signal/libsignal/internal/Native;->loadLibrary()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 +HSPLorg/signal/libsignal/net/Network$Environment;->()V +HSPLorg/signal/libsignal/net/Network$Environment;->(Ljava/lang/String;II)V HSPLorg/signal/libsignal/protocol/IdentityKey;->(Lorg/signal/libsignal/protocol/ecc/ECPublicKey;)V HSPLorg/signal/libsignal/protocol/IdentityKey;->([B)V HSPLorg/signal/libsignal/protocol/IdentityKey;->serialize()[B @@ -19427,19 +19028,14 @@ 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 @@ -19450,28 +19046,22 @@ 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;->buildDataNeededLog(ILjava/lang/String;)Ljava/lang/String; -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; @@ -19500,7 +19090,6 @@ 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 @@ -19556,7 +19145,7 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda24;->< HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda24;->run()V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda25;->()V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda25;->run()V -HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda26;->()V +HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda26;->(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda26;->run()V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda27;->()V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda27;->run()V @@ -19651,37 +19240,37 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda8;->ru HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda9;->(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda9;->run()V HSPLorg/thoughtcrime/securesms/ApplicationContext$1;->(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$-Us13jCXTd2iOM0Y6BraEZ1Ael8()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$-wHBiLBDa8OJf1k67fcIsduxfzw(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$1vBGBwM2yUq7VyFaTDG10uWDuPc(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$3QS0qrAN7nliLfSi63lQeukrNXw(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$66l9coKQ_660ADutlicH4GeEP6I(Lorg/thoughtcrime/securesms/ApplicationContext;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$6C1lVL7dG_-wAqmFY6Az_Qc88wU()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$6_YWJVxHZo1viw16tbrU7MDbDJg(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$6huj-CNiUCq08incBeS5_VdKXcY(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$6jOUg8y8V8AjFQVDC73SAPGSCaQ(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$74GuULvxFktNDe6rV-VHuIqPVJg(Lorg/thoughtcrime/securesms/ApplicationContext;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$756GRBWa1Aau89i28RRggcoVTsg()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$7zPKdwtEmk03-CX6PmLruPNQaJU()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$8LAgI8pE7DigK3aYaz2Nk9lcfrc(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$AGPtfUzlxykaeQb2_And4XR5_cI()V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$AT704sPxWjxGd8P7Knkz-CNN53E(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$BM9zXNQo3VjL7z8V2jLaBOSk3xM(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$C38kbsmhoy45H7BvcAkMdNLosx8(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$CadNTUODZG2Ef63Ub7A1il6CBD0(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$EhXD2bA_njJxvcXV3OctyCch4wQ()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$Euao8MtJ5sFx1Uzh_MqEQ-p_wco()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$GzI-Jr48663DXUZ6ABZXYlOQuSQ(Lorg/thoughtcrime/securesms/ApplicationContext;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$Fx-d1Nr9YoqUcyvu6Ylhfae3_S4(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$H1VD3W_hLtRQIh7BCwmVe1JId7M(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$HAbYs3d3-yBwCTZTjClId9asWMo(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$JFFOXPLm4n83iu1CrQCwt8Rt1vs(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$QTEjfsRccjaeTw0od8y5UGofLnw()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$QoPhFlm0XNA9Pq0eqhx6SpS3Yf8(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$RIVst1BPIo-PfHpYnrmNZ6n5IC4()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$RhzI01M6WPCcwVqZ9bQRQL3rEFk(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$VPmvaBBdqqvvVsnAcF1XPhfNAwg(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$Wc-lTVXx_Cj3iM16JtR6Ju_gG5s(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$WhOpCGkNoE806tpRKQr4cnlCHgs()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$XEBpgM6g0m715OxGVQde5BV4obs()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$YPJbusS4_A6ryTaa4uhXIPJboWA(Lorg/thoughtcrime/securesms/ApplicationContext;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$ZhjuV8Lhq7-N7j7v4C0qcJLkuKs(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$Ziq45AtHm7EBURq_Andgbc-2PQA(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$avxGAGkfv3Ev4XZkSUGrF0ov8Xw(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$bErCCzC-UcRA-wciaIM0aFj_fYc(Lorg/thoughtcrime/securesms/ApplicationContext;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$bISWquam07woR6Zo_SGN-pGcVHo(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$cQnTp954Na4k9YavnTCgv-5QUVQ()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$dXZkn_yX1EofCAblV1XQ5RabFZk(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$gsuXSdfhwRFZebO53F99f8IHmAg(Lorg/thoughtcrime/securesms/ApplicationContext;)V @@ -19691,17 +19280,17 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$kC2GAeM9RoAdu5aL5 HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$ltM0LNCO0IpxItflkQs1-OW5yWo(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$nCL1qFe_6GUmC6LRVpbNvqPnxzs(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$nYPlff79P2l-muLhW8EMuKgR50w(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$oBwElCRwdRH0K-dD4FNR2zBIlik()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$ot12xp6xNVtSSQ4GK9tV7IySHoM(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$ruqqX1Z0LLWOgajy7Wtjs5N3iks(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$uRzpmm1efLVUhJMEHNtyfP7BiA8(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$vq13xoFA2KFXFtE5Jlx3i42fU-8(Lorg/thoughtcrime/securesms/ApplicationContext;)V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$y2wfEuKgd8zQpNdKJyo7v3d1ZLs(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; +HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$xQ9ZfcE66PEynu9uNL9k6bEaLXs(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$zLJvo83whBob1hm-1YvxiH4EKqg(Lorg/thoughtcrime/securesms/ApplicationContext;)V HSPLorg/thoughtcrime/securesms/ApplicationContext;->$r8$lambda$zNA2sxapNn8tnXiST4flFZyy97A()[B HSPLorg/thoughtcrime/securesms/ApplicationContext;->()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->attachBaseContext(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->beginJobLoop()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->checkBuildExpiration()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->cleanAvatarStorage()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->ensureProfileUploaded()V @@ -19726,9 +19315,9 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext;->initializeRx()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->initializeScheduledMessageManager()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->initializeSecurityProvider()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->initializeTrimThreadsByDateManager()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$initializeLogging$26()V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$initializeLogging$25()V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$initializeRx$26(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$initializeRx$27(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; -HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$initializeRx$28(Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Scheduler; HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$0()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$1()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$10()V @@ -19745,7 +19334,6 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$2()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$20()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$21()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$22()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$23()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$3()[B HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$4()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$5()V @@ -19753,7 +19341,7 @@ HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$6()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$7()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$8()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onCreate$9()V -HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onForeground$24()V +HSPLorg/thoughtcrime/securesms/ApplicationContext;->lambda$onForeground$23()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->onCreate()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->onForeground()V HSPLorg/thoughtcrime/securesms/ApplicationContext;->startAnrDetector()V @@ -19832,25 +19420,21 @@ 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;->isInProgress()Z -HSPLorg/thoughtcrime/securesms/attachments/Attachment;->isPermanentlyFailed()Z HSPLorg/thoughtcrime/securesms/attachments/Attachment;->isSticker()Z HSPLorg/thoughtcrime/securesms/attachments/AttachmentCreator;->()V HSPLorg/thoughtcrime/securesms/attachments/AttachmentCreator;->()V HSPLorg/thoughtcrime/securesms/attachments/AttachmentId$Creator;->()V 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/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;IJ)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;->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; @@ -19923,12 +19507,8 @@ HSPLorg/thoughtcrime/securesms/avatar/TextAvatarDrawable;->draw(Landroid/graphic HSPLorg/thoughtcrime/securesms/avatar/TextAvatarDrawable;->draw(Landroid/text/Layout;Landroid/graphics/Canvas;FF)V HSPLorg/thoughtcrime/securesms/avatar/TextAvatarDrawable;->getOpacity()I HSPLorg/thoughtcrime/securesms/avatar/TextAvatarDrawable;->getStartX(Landroid/text/StaticLayout;)F -HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView$WhenMappings;->()V HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->()V HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -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/badges/BadgeImageView;->()V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->clearDrawable()V @@ -19936,14 +19516,6 @@ HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->getGlideRequestManager()L HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->setBadge(Lorg/thoughtcrime/securesms/badges/models/Badge;Lcom/bumptech/glide/RequestManager;)V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->setBadgeFromRecipient(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->setBadgeFromRecipient(Lorg/thoughtcrime/securesms/recipients/Recipient;Lcom/bumptech/glide/RequestManager;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$Companion;->()V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->()V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V HSPLorg/thoughtcrime/securesms/blurhash/Base83;->()V HSPLorg/thoughtcrime/securesms/blurhash/Base83;->isValid(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/blurhash/BlurHash$1;->()V @@ -19951,48 +19523,9 @@ 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 -HSPLorg/thoughtcrime/securesms/components/AnimatingToggle;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/AnimatingToggle;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLorg/thoughtcrime/securesms/components/AnimatingToggle;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/AudioView;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/AudioView;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/components/AudioView;I)V -HSPLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda4;->run()V -HSPLorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener-IA;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;)V -HSPLorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener-IA;)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->$r8$lambda$ttH02xbblnAnQbQdy9cXzPNafwQ(Lorg/thoughtcrime/securesms/components/AudioView;I)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->()V -HSPLorg/thoughtcrime/securesms/components/AudioView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->lambda$setTint$3(I)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->onAttachedToWindow()V -HSPLorg/thoughtcrime/securesms/components/AudioView;->setProgressAndPlayBackgroundTint(I)V -HSPLorg/thoughtcrime/securesms/components/AudioView;->setTint(I)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/AvatarImageView;Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions$Builder;->-$$Nest$fgetfixedSize(Lorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions$Builder;)I HSPLorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions$Builder;->-$$Nest$fgetquickContactEnabled(Lorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions$Builder;)Z @@ -20014,13 +19547,11 @@ HSPLorg/thoughtcrime/securesms/components/AvatarImageView$RedownloadRequestListe HSPLorg/thoughtcrime/securesms/components/AvatarImageView$RedownloadRequestListener;->(Lorg/thoughtcrime/securesms/components/AvatarImageView$RedownloadRequestListener-IA;)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->()V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->disableQuickContact()V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->initialize(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions;)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;Z)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;ZZ)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setAvatarClickHandler(Lorg/thoughtcrime/securesms/recipients/Recipient;Z)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$QueryStart;->(IZ)V HSPLorg/thoughtcrime/securesms/components/ComposeText;->()V @@ -20028,99 +19559,25 @@ HSPLorg/thoughtcrime/securesms/components/ComposeText;->(Landroid/content/ 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;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;->onDraw(Landroid/graphics/Canvas;)V -HSPLorg/thoughtcrime/securesms/components/ComposeText;->onMeasure(II)V HSPLorg/thoughtcrime/securesms/components/ComposeText;->onSelectionChanged(II)V -HSPLorg/thoughtcrime/securesms/components/ComposeText;->setHint(Ljava/lang/String;)V -HSPLorg/thoughtcrime/securesms/components/ComposeText;->setHintWithChecks(Ljava/lang/CharSequence;)V -HSPLorg/thoughtcrime/securesms/components/ComposeText;->setMediaListener(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V -HSPLorg/thoughtcrime/securesms/components/ComposeText;->setMessageSendType(Lorg/thoughtcrime/securesms/conversation/MessageSendType;)V HSPLorg/thoughtcrime/securesms/components/ComposeTextStyleWatcher;->()V HSPLorg/thoughtcrime/securesms/components/ComposeTextStyleWatcher;->()V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda0;->(I)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/components/ConversationItemFooter;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda2;->onLayoutChange(Landroid/view/View;IIIIIIII)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->$r8$lambda$rILpFw6OPAVn7dsgVBus6R0qlZk(Lorg/thoughtcrime/securesms/components/ConversationItemFooter;Landroid/view/View;IIIIIIII)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->buildMessageId(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)J -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->disableBubbleBackground()V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->getDateView()Landroid/view/View; -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->getPlaybackSpeedToggleTouchDelegateRect()Landroid/graphics/Rect; -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->hideAudioDurationViews()V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->init(Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->lambda$init$0(Landroid/view/View;IIIIIIII)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->notifyTouchDelegateChanged(Landroid/graphics/Rect;Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentAudioDuration(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDate(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/Locale;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentDeliveryStatus(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentInsecureIndicator(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentSimInfo(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentTimer(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setIconColor(I)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setMessageRecord(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/Locale;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setOnTouchDelegateChangedListener(Lorg/thoughtcrime/securesms/components/ConversationItemFooter$OnTouchDelegateChangedListener;)V -HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setOnlyShowSendingStatus(ZLorg/thoughtcrime/securesms/database/model/MessageRecord;)V -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;->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/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 -HSPLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setWallpaperEnabled(Z)V -HSPLorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;->onFinishInflate()V HSPLorg/thoughtcrime/securesms/components/CornerMask;->(Landroid/view/View;)V HSPLorg/thoughtcrime/securesms/components/CornerMask;->setRadii(IIII)V -HSPLorg/thoughtcrime/securesms/components/CornerMask;->setRadius(I)V HSPLorg/thoughtcrime/securesms/components/CornerMask;->setTopLeftRadius(I)V HSPLorg/thoughtcrime/securesms/components/CornerMask;->setTopRightRadius(I)V HSPLorg/thoughtcrime/securesms/components/DeliveryStatusView$State;->$values()[Lorg/thoughtcrime/securesms/components/DeliveryStatusView$State; @@ -20133,71 +19590,31 @@ HSPLorg/thoughtcrime/securesms/components/DeliveryStatusView;->setNone()V HSPLorg/thoughtcrime/securesms/components/DeliveryStatusView;->setTint(I)V HSPLorg/thoughtcrime/securesms/components/DeliveryStatusView;->updateContentDescription()V HSPLorg/thoughtcrime/securesms/components/ExpirationTimerView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/ExpirationTimerView;->stopAnimation()V -HSPLorg/thoughtcrime/securesms/components/FromTextView;->()V HSPLorg/thoughtcrime/securesms/components/FromTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;ZLjava/lang/String;)V -HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;ZLjava/lang/String;Z)V -HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Z)V -HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;ZLjava/lang/String;)V -HSPLorg/thoughtcrime/securesms/components/HidingLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +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/InputAwareConstraintLayout;->()V HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->setFragmentManager(Landroidx/fragment/app/FragmentManager;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda8;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$RecordTime;->(Landroid/widget/TextView;Landroid/view/View;JLjava/lang/Runnable;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel$RecordTime;->(Landroid/widget/TextView;Landroid/view/View;JLjava/lang/Runnable;Lorg/thoughtcrime/securesms/components/InputPanel$RecordTime-IA;)V -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;->onFinishInflate()V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->setHideForMessageRequestState(Z)V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->setMediaKeyboardToggleMode(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->setMediaListener(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->setWallpaperEnabled(Z)V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->showMediaKeyboardToggle(Z)V -HSPLorg/thoughtcrime/securesms/components/InputPanel;->updateVisibility()V HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$$ExternalSyntheticLambda1;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$Companion;->()V HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$KeyboardInsetAnimator;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$KeyboardInsetAnimator;->getAnimating()Z HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$keyboardGuideline$2;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$keyboardGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$keyboardGuideline$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$navigationBarGuideline$2;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$navigationBarGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$navigationBarGuideline$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentEndGuideline$2;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentEndGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentEndGuideline$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentStartGuideline$2;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentStartGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentStartGuideline$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuideline$2;->(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuideline$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->$r8$lambda$wNlRlegYRZAGLCv-uS3_baE_8zg(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->()V HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->_init_$lambda$0(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->applyInsets(Landroidx/core/graphics/Insets;Landroidx/core/graphics/Insets;)V -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getKeyboardGuideline()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getNavigationBarGuideline()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getParentEndGuideline()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getParentStartGuideline()Landroidx/constraintlayout/widget/Guideline; -HSPLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getStatusBarGuideline()Landroidx/constraintlayout/widget/Guideline; HSPLorg/thoughtcrime/securesms/components/LinkPreviewView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/LinkPreviewView;)V HSPLorg/thoughtcrime/securesms/components/LinkPreviewView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/LinkPreviewView;->init(Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/LinkPreviewView;->setCloseClickedListener(Lorg/thoughtcrime/securesms/components/LinkPreviewView$CloseClickedListener;)V HSPLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState$Creator;->()V HSPLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->()V HSPLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->()V @@ -20208,25 +19625,13 @@ HSPLorg/thoughtcrime/securesms/components/Material3SearchToolbar$$ExternalSynthe HSPLorg/thoughtcrime/securesms/components/Material3SearchToolbar$special$$inlined$addTextChangedListener$default$1;->(Landroid/view/View;Lorg/thoughtcrime/securesms/components/Material3SearchToolbar;)V HSPLorg/thoughtcrime/securesms/components/Material3SearchToolbar;->()V HSPLorg/thoughtcrime/securesms/components/Material3SearchToolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$FloatingRecordButton;->(Landroid/content/Context;Landroid/widget/ImageView;)V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$LockDropTarget;->(Landroid/content/Context;Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->$values()[Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State; -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->()V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->onFinishInflate()V -HSPLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->setHandler(Lorg/thoughtcrime/securesms/audio/AudioRecordingHandler;)V HSPLorg/thoughtcrime/securesms/components/Outliner;->()V -HSPLorg/thoughtcrime/securesms/components/Outliner;->setColor(I)V -HSPLorg/thoughtcrime/securesms/components/Outliner;->setRadii(IIII)V -HSPLorg/thoughtcrime/securesms/components/Outliner;->setStrokeWidth(F)V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;)V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->()V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->getCurrentLabel()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->setPlaybackSpeedListener(Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$PlaybackSpeedListener;)V HSPLorg/thoughtcrime/securesms/components/QuoteView$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/components/QuoteView;)V HSPLorg/thoughtcrime/securesms/components/QuoteView$MessageType;->$values()[Lorg/thoughtcrime/securesms/components/QuoteView$MessageType; HSPLorg/thoughtcrime/securesms/components/QuoteView$MessageType;->-$$Nest$smfromCode(I)Lorg/thoughtcrime/securesms/components/QuoteView$MessageType; @@ -20236,69 +19641,11 @@ HSPLorg/thoughtcrime/securesms/components/QuoteView$MessageType;->fromCode(I)Lor HSPLorg/thoughtcrime/securesms/components/QuoteView$MessageType;->values()[Lorg/thoughtcrime/securesms/components/QuoteView$MessageType; HSPLorg/thoughtcrime/securesms/components/QuoteView;->()V HSPLorg/thoughtcrime/securesms/components/QuoteView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/QuoteView;->applyColorTheme()V -HSPLorg/thoughtcrime/securesms/components/QuoteView;->dismiss()V HSPLorg/thoughtcrime/securesms/components/QuoteView;->initialize(Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/QuoteView;->isStoryReply()Z HSPLorg/thoughtcrime/securesms/components/QuoteView;->setMessageType(Lorg/thoughtcrime/securesms/components/QuoteView$MessageType;)V -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$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 -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -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$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; -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->()V -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lio/reactivex/rxjava3/disposables/CompositeDisposable;)V -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;->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 @@ -20316,10 +19663,6 @@ HSPLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onCreate(Landroid HSPLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onPause(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onStart(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->getProgressDrawable()Landroid/graphics/drawable/Drawable; -HSPLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->init()V -HSPLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V HSPLorg/thoughtcrime/securesms/components/emoji/AnimatingImageSpan;->(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable$Callback;)V HSPLorg/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel;->(ILjava/util/List;)V HSPLorg/thoughtcrime/securesms/components/emoji/Emoji;->(Ljava/util/List;)V @@ -20361,43 +19704,27 @@ HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSynthetic HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda2;->run()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda3;->(Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->$r8$lambda$5IPAQraRDnd37oqJyWeDCIArE8A(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Ljava/lang/String;)Ljava/lang/Float; HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->$r8$lambda$9VxJG--rce_LMrBbBVi5JkyJelM(Ljava/lang/Runnable;Landroid/view/View;)Lkotlin/Unit; HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->$r8$lambda$PicvuNf_O0Zy5LBsFpj6-AJMdsI(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->applyWidthMeasureRoundingFix(I)I HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->drawSpecialRenderers(Landroid/graphics/Canvas;Lorg/thoughtcrime/securesms/components/mention/MentionRendererDelegate;Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;)V -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->ellipsizeAnyTextForMaxLength()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->ellipsizeEmojiTextForMaxLines()V -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->getLastLineWidth()I -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->getLongestLineWidth(Ljava/lang/CharSequence;)F HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->hasMetricAffectingSpan(Ljava/lang/CharSequence;)Z HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->isEllipsizedAtEnd()Z -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->isJumbomoji()Z -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->isSingleLine()Z HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->lambda$ellipsizeEmojiTextForMaxLines$2()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->lambda$ellipsizeEmojiTextForMaxLines$3(Ljava/lang/Runnable;Landroid/view/View;)Lkotlin/Unit; -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->lambda$getLongestLineWidth$0(Ljava/lang/String;)Ljava/lang/Float; HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->onDraw(Landroid/graphics/Canvas;)V 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 HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->useSystemEmoji()Z -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiToggle$1;->()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiToggle;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiToggle;->initialize()V -HSPLorg/thoughtcrime/securesms/components/emoji/EmojiToggle;->setStickerMode(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiToggle;->setToMedia()V -HSPLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->()V -HSPLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->(Landroid/content/Context;Ljava/lang/String;)V -HSPLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->getPersistedCache()Ljava/util/LinkedHashSet; HSPLorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView$$ExternalSyntheticLambda0;->(IILorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView;)V HSPLorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView$$ExternalSyntheticLambda0;->run()V HSPLorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView;->$r8$lambda$4Klqi0f0CTTxkCnsSD7H1XDP4BU(IILorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView;)V @@ -20415,7 +19742,6 @@ HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->$r8$lambd HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->(Lorg/thoughtcrime/securesms/emoji/EmojiCategory;Ljava/util/List;Landroid/net/Uri;)V HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->(Lorg/thoughtcrime/securesms/emoji/EmojiCategory;[Ljava/lang/String;Landroid/net/Uri;)V HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->getDisplayEmoji()Ljava/util/List; -HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->getEmoji()Ljava/util/List; HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->getIconAttr()I HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->getSpriteUri()Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->lambda$new$0(Ljava/lang/String;)Lorg/thoughtcrime/securesms/components/emoji/Emoji; @@ -20461,7 +19787,6 @@ HSPLorg/thoughtcrime/securesms/components/mention/MentionRenderer$SingleLineMent HSPLorg/thoughtcrime/securesms/components/mention/MentionRenderer;->(II)V HSPLorg/thoughtcrime/securesms/components/mention/MentionRendererDelegate;->(Landroid/content/Context;I)V HSPLorg/thoughtcrime/securesms/components/mention/MentionRendererDelegate;->draw(Landroid/graphics/Canvas;Landroid/text/Spanned;Landroid/text/Layout;)V -HSPLorg/thoughtcrime/securesms/components/mention/MentionRendererDelegate;->setTint(I)V HSPLorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher;->()V HSPLorg/thoughtcrime/securesms/components/menu/ActionItem;->()V HSPLorg/thoughtcrime/securesms/components/menu/ActionItem;->(ILjava/lang/CharSequence;ILjava/lang/Runnable;)V @@ -20473,16 +19798,6 @@ HSPLorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar;->( HSPLorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar;->present(Ljava/util/List;)V HSPLorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar;->setItems(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->()V -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->resolveTheme(ZZZ)Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->$values()[Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->()V -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->(Ljava/lang/String;IIII)V -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getBackgroundColor(Landroid/content/Context;)I -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getBarColor(Landroid/content/Context;)I -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getForegroundColor(Landroid/content/Context;)I -HSPLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->resolveTheme(ZZZ)Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; HSPLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;J)V HSPLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;->(Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1;)V HSPLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;->onAnimationEnd(Landroid/animation/Animator;)V @@ -20509,6 +19824,7 @@ HSPLorg/thoughtcrime/securesms/components/reminder/OutdatedBuildReminder;->isEli HSPLorg/thoughtcrime/securesms/components/reminder/PushRegistrationReminder;->isEligible()Z HSPLorg/thoughtcrime/securesms/components/reminder/ServiceOutageReminder;->isEligible(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/components/reminder/UnauthorizedReminder;->isEligible(Landroid/content/Context;)Z +HSPLorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion$WhenMappings;->()V HSPLorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion;->()V HSPLorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion;->isEligible()Z @@ -20568,83 +19884,6 @@ HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->acce HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->access$stopAnimating(Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;)V 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 @@ -20761,7 +20000,6 @@ HSPLorg/thoughtcrime/securesms/contacts/ContactRepository;->(Landroid/cont HSPLorg/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto;->asDrawable(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/colors/AvatarColor;)Landroid/graphics/drawable/Drawable; HSPLorg/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto;->asDrawable(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/colors/AvatarColor;Z)Landroid/graphics/drawable/Drawable; -HSPLorg/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto;->asSmallDrawable(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/colors/AvatarColor;Z)Landroid/graphics/drawable/Drawable; HSPLorg/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto;->hashCode()I HSPLorg/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto;->openInputStream(Landroid/content/Context;)Ljava/io/InputStream; @@ -20900,32 +20138,6 @@ HSPLorg/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition;->( HSPLorg/thoughtcrime/securesms/conversation/ClipProjectionDrawable;->()V HSPLorg/thoughtcrime/securesms/conversation/ClipProjectionDrawable;->(Landroid/graphics/drawable/Drawable;)V HSPLorg/thoughtcrime/securesms/conversation/ClipProjectionDrawable;->setProjections(Ljava/util/Set;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZ)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZZZ)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->isHidden()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->isMessageRequestAccepted()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->(Lorg/thoughtcrime/securesms/recipients/Recipient;JJIIIILorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILjava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->getGroupMemberAcis()Ljava/util/List; -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->getMessageRequestData()Lorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData; -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->getStartPosition()I -HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->getThreadSize()I -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/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; -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getConversationScreenType()Lorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType; -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDistributionType()I -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getStartingPosition()I -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getThreadId()J -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getWallpaper()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isFirstTimeInSelfCreatedGroup()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isWithSearchOpen()Z HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Builder;->(Landroid/content/Context;Ljava/lang/Class;Lorg/thoughtcrime/securesms/recipients/RecipientId;JLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Builder;->(Landroid/content/Context;Ljava/lang/Class;Lorg/thoughtcrime/securesms/recipients/RecipientId;JLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Builder-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Builder;->build()Landroid/content/Intent; @@ -20938,7 +20150,6 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScre HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->from(I)Lorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType; HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->isInBubble()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->isInPopup()Z HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->values()[Lorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType; HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents;->-$$Nest$smcheckThreadId(J)J HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents;->()V @@ -20950,7 +20161,6 @@ 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$$ExternalSyntheticLambda6;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda9;->(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 @@ -20973,8 +20183,6 @@ 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 @@ -20983,141 +20191,18 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClic HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener-IA;)V 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 -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->forceFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getActiveFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Lorg/thoughtcrime/securesms/components/ConversationItemFooter; -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBodyBubbleCorners(IIII)Lorg/thoughtcrime/securesms/util/Projection$Corners; -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getDefaultBubbleColor(Z)I -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getDefaultTopMarginForRecord(Lorg/thoughtcrime/securesms/database/model/MessageRecord;II)I -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->getRoot()Landroid/view/ViewGroup; -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasAudio(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasDocument(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasExtraText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasLinkPreview(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasOnlyThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasSharedContact(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasSticker(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->initializeAttributes()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isBorderless(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isCaptionlessMms(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isCondensedMode()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isContentCondensed()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isFooterVisible(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isSingularMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isStartOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Z)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isStoryReaction(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isViewOnceMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->isWithinClusteringTime(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->onFinishInflate()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->onMeasure(II)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->readDimen(I)I -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->readDimen(Landroid/content/Context;I)I -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setAuthor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZ)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBodyText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/String;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setBubbleState(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setContactPhoto(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setEventListener(Lorg/thoughtcrime/securesms/BindableConversationItem$EventListener;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Ljava/util/Locale;ZZ)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGroupAuthorColor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGroupMessageStatus(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGutterSizes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setHasBeenQuoted(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setHasBeenScheduled(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setInteractionState(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMediaAttributes(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;ZZZZ)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setMessageSpacing(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setOnClickListener(Landroid/view/View$OnClickListener;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setOutlinerRadii(Lorg/thoughtcrime/securesms/components/Outliner;IIII)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setParentScrolling(Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setReactions(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setStatusIcons(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setStoryReactionLabel(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->setThumbnailCorners(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->shouldDrawBodyBubbleOutline(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->shouldInterceptClicks(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->unbind()V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$$ExternalSyntheticBackport0;->m(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$$ExternalSyntheticLambda2;->()V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->getProjections()Ljava/util/Set; HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->init()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->onSizeChanged(IIII)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setBackground(Landroid/graphics/drawable/Drawable;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setOnSizeChangedListener(Lorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$OnSizeChangedListener;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setOutliners(Ljava/util/List;)V -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 -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/CharSequence;Ljava/util/List;ZLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/CharSequence;Ljava/util/List;ZLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;Lorg/thoughtcrime/securesms/conversation/ConversationMessage-IA;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->equals(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getBottomButton()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getConversationTimestamp()J -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getFormattedDate(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getMessageRecord()Lorg/thoughtcrime/securesms/database/model/MessageRecord; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getMultiselectCollection()Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getThreadRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hasBeenQuoted()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hasStyleLinks()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hashCode()I -HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->isTextOnly(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->(Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Callback;Lorg/signal/core/util/concurrent/LifecycleDisposable;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->(Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Callback;Lorg/signal/core/util/concurrent/LifecycleDisposable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->onCreateMenu(Landroid/view/Menu;Landroid/view/MenuInflater;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->(Lorg/thoughtcrime/securesms/recipients/Recipient;ZLio/reactivex/rxjava3/core/Observable;ZZZZIJLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Z)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component1()Lorg/thoughtcrime/securesms/recipients/Recipient; -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component10()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component11()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component2()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component3()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component4()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component5()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component6()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component7()Z -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component8()I -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component9()J -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->access$getTAG$p()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/conversation/ConversationRepository;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationRepository;->()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationRepository;->getConversationData(JLorg/thoughtcrime/securesms/recipients/Recipient;I)Lorg/thoughtcrime/securesms/conversation/ConversationData; -HSPLorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter;->(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter$EventListener;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Landroid/view/View$OnClickListener;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->clearExpiring()V HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->onFinishInflate()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setIndividualRecipientTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setOnStoryRingClickListener(Landroid/view/View$OnClickListener;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setRecipientTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setStoryRingFromState(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setTitle(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->updateSubtitleVisibility()V -HSPLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->updateVerifiedSubtitleVisibility()V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$GroupDataManager$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$GroupDataManager;)V @@ -21132,24 +20217,6 @@ 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;->()V -HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;Landroid/content/Context;Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->ignoreViewReveals()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType$Creator;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->$values()[Lorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType; -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->()V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;)V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->getButtonDrawableRes()I -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->getComposeHintRes()I -HSPLorg/thoughtcrime/securesms/conversation/MessageSendType;->getTitleRes()I HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result$Companion;->getNO_STYLE()Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; @@ -21158,21 +20225,11 @@ HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->()V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->(ZLorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button;)V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->(ZLorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->access$getNO_STYLE$cp()Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; -HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->getBottomButton()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button; -HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->getHasStyleLinks()Z -HSPLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->none()Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; HSPLorg/thoughtcrime/securesms/conversation/MessageStyler;->()V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler;->()V HSPLorg/thoughtcrime/securesms/conversation/MessageStyler;->style$default(Ljava/lang/Object;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Landroid/text/Spannable;ZILjava/lang/Object;)Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; HSPLorg/thoughtcrime/securesms/conversation/MessageStyler;->style(Ljava/lang/Object;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Landroid/text/Spannable;)Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; HSPLorg/thoughtcrime/securesms/conversation/MessageStyler;->style(Ljava/lang/Object;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Landroid/text/Spannable;Z)Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; -HSPLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->()V -HSPLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->()V -HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;)V -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/clicklisteners/AttachmentCancelClickListener$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener;->()V @@ -21214,8 +20271,6 @@ 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 @@ -21225,115 +20280,17 @@ HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$LinearGradient;->< HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$LinearGradient;->(F[I[F)V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id;Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$LinearGradient;Ljava/lang/Integer;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->asSingleColor()I HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->equals(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->getChatBubbleMask()Landroid/graphics/drawable/Drawable; -HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->isGradient()Z HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->withId(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id;)Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColorsPalette$Bubbles;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColorsPalette$Bubbles;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColorsPalette$Bubbles;->getDefault()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer$onGroupMembershipChanged$$inlined$sortedBy$1;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->()V -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getDefaultColor(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)I -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingBodyTextColor(Landroid/content/Context;Z)I -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingFooterIconColor(Landroid/content/Context;Z)I -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingFooterTextColor(Landroid/content/Context;Z)I -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingGroupSenderColor(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)I -HSPLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->onGroupMembershipChanged(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$edgeEffectFactory$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->drawShaderMask(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$scrollListener$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->()V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getChatColors$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getNoLayerXfermode$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Landroid/graphics/PorterDuffXfermode; -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getUseLayer$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Z -HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->setChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)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 -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->isRunning()Z -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->getMmsParts(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord;)Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->getParts(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->fromSet(Ljava/util/Set;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->(Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->toSet()Ljava/util/Set; -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 -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->consumePulseRequest(Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawFocusShadeOverIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawFocusShadeUnderIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawPulseShadeOverIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->findAdapterBridge(Landroidx/recyclerview/widget/RecyclerView;)Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getCurrentSelection(Landroidx/recyclerview/widget/RecyclerView;)Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getDifferenceForPart(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->hasRunningPulseRequestAnimators()Z -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->invalidateIfEnterExitAnimatorsAreRunning(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->invalidateIfPulseRequestAnimatorsAreRunning(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onResume(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onStart(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->resolveMultiselectable(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)Lorg/thoughtcrime/securesms/conversation/mutiselect/Multiselectable; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateChildOffsets(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->updateMultiselectPartAnimator(Ljava/util/Set;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->hashCode()I -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->hashCode()I -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->()V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$1;->(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->()V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;Lorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;Lorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->()V -HSPLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->(Lorg/thoughtcrime/securesms/database/RecipientTable;)V -HSPLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->(Lorg/thoughtcrime/securesms/database/RecipientTable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener$$ExternalSyntheticLambda0;->(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener;->(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onResume(Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onStart(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -21348,87 +20305,7 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->() HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onCreate(Landroid/os/Bundle;Z)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onPreCreate()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onResume()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->replaceFragment()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$ContactShareEditor;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$ContactShareEditor;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$GifSearch;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$GifSearch;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaCapture;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaCapture;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaGallery;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaGallery;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaSelection;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaSelection;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectContact;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectContact;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectFile;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectFile;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectLocation;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectLocation;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$cameraLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$contactShareLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$gifSearchLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaGalleryLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaSelectionLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectContactLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectFileLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectLocationLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;->(Landroidx/fragment/app/Fragment;Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Callbacks;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda5;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V -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;->getBindable()Lorg/thoughtcrime/securesms/BindableConversationItem; -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$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;->$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 -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->(Landroidx/lifecycle/LifecycleOwner;Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->_init_$lambda$4(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->_init_$lambda$6(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getColorizer$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getCondensedMode$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getHasWallpaper$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getInlineContent$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getLifecycleOwner$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Landroidx/lifecycle/LifecycleOwner; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$get_selected$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Ljava/util/HashSet; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->consumePulseRequest()Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge$PulseRequest; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getClickListener()Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getColorizer()Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getConversationMessage(I)Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getDisplayMode()Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getNextMessage(I)Lorg/thoughtcrime/securesms/database/model/MessageRecord; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getPreviousMessage(I)Lorg/thoughtcrime/securesms/database/model/MessageRecord; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getRequestManager()Lcom/bumptech/glide/RequestManager; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getSearchQuery()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getSelectedItems()Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->hasWallpaper()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->isMessageRequestAccepted()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->isParentInScroll()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onHasWallpaperChanged(Z)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->setMessageRequestAccepted(Z)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->setMessageRequestIsAccepted(Z)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reminderStub$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reviewBannerStub$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$unverifiedBannerStub$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;)V @@ -21437,28 +20314,9 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;-> HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda11;->onLayoutChange(Landroid/view/View;IIIIIIII)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda24;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ActionModeCallback;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ActivityResultCallbacks;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$AttachmentManagerListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationItemClickListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->getSnapshot()Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot; -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$ScrollListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->setToolbarMargin(I)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroidx/appcompat/widget/Toolbar;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener;->onGlobalLayout()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$WhenMappings;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$args$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$args$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$args$2;->invoke()Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; @@ -21468,97 +20326,33 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$2;-> HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$3;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGroupViewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGroupViewModel$2;->invoke()Landroidx/lifecycle/ViewModelProvider$Factory; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGroupViewModel$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationRecipientRepository$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationRecipientRepository$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationRecipientRepository$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$draftViewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$1;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$2;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$3;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$4;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$inlineQueryController$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$jumpAndPulseScrollStrategy$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2;->invoke()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestViewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$motionEventRelay$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$moveToStartPosition$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->accept(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->accept(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->accept(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->accept(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->apply(Ljava/lang/Object;)Ljava/lang/Object; -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;->(Landroid/view/View;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)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 -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke$lambda$1(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Ljava/util/List;Lkotlin/jvm/internal/Ref$BooleanRef;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->(Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->invoke()Landroidx/lifecycle/ViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->invoke()Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$conversationToolbarOnScrollHelper$1;->(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$conversationToolbarOnScrollHelper$1;->get()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->invoke(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$reactionDelegate$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$recentEmojis$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$recentEmojis$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$registerForResults$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$registerForResults$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$scheduledMessagesStub$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$searchViewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1;->(Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1;->invoke()Landroidx/lifecycle/ViewModelStore; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$2;->(Lkotlin/jvm/functions/Function0;Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$2;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$3;->(Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$3;->invoke()Landroidx/lifecycle/ViewModelProvider$Factory; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$3;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$4;->(Landroidx/fragment/app/Fragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$5;->(Lkotlin/jvm/functions/Function0;Landroidx/fragment/app/Fragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$6;->(Landroidx/fragment/app/Fragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$1;->(Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$1;->invoke()Landroidx/fragment/app/Fragment; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$1;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$2;->(Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$2;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$2;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$3;->(Lkotlin/Lazy;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$3;->invoke()Landroidx/lifecycle/ViewModelStore; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$3;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$4;->(Lkotlin/jvm/functions/Function0;Lkotlin/Lazy;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$4;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$4;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$6;->(Lkotlin/jvm/functions/Function0;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$7;->(Lkotlin/Lazy;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$8;->(Lkotlin/jvm/functions/Function0;Lkotlin/Lazy;)V @@ -21566,145 +20360,16 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inl HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$stickerViewModel$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$stickerViewModel$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$voiceNotePlayerListener$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->$r8$lambda$YDQLzyHN5FWBrQEkaTYrdZ0__OI(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/View;IIIIIIII)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getAdapter$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getArgs(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getBinding(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getColorizer$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getConversationItemDecorations$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getConversationRecipientRepository(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getGroupCallViewModel(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getMessageRequestRepository(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getScrollToPositionDelegate$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getThreadHeaderMarginDecoration$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getViewModel(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$moveToStartPosition(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/ConversationData;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$presentInputReadyState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$updateMessageRequestAcceptedState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Z)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getArgs()Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getBinding()Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getComposeText()Lorg/thoughtcrime/securesms/components/ComposeText; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getContainer()Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getConversationGroupViewModel()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getConversationRecipientRepository()Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getGroupCallViewModel()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getInputPanel()Lorg/thoughtcrime/securesms/components/InputPanel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getKeyboardPagerViewModel()Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getMessageRequestRepository()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getViewModel()Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeConversationThreadUi()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeGiphyMp4()Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeMediaKeyboard()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->invalidateOptionsMenu()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->moveToStartPosition(Lorg/thoughtcrime/securesms/conversation/ConversationData;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->observeConversationThread()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onCreate(Landroid/os/Bundle;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onResume()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onViewCreated$lambda$0(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/View;IIIIIIII)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onViewCreated(Landroid/view/View;Landroid/os/Bundle;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onViewStateRestored(Landroid/os/Bundle;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentActionBarMenu()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentConversationTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentInputReadyState(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentNavigationIconForNormal()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentStoryRing()V -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$UnreadState$None;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->(ZZ)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getItemOffsets(Landroid/graphics/Rect;Landroid/view/View;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->hasHeader(I)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->isFirstUnread(I)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setCurrentItems(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setFirstUnreadCount(I)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setHasWallpaper(Z)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->timestamp(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->toEpochDay(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->updateUnreadState(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$$ExternalSyntheticLambda0;->(J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->apply(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/ObservableSource; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->$r8$lambda$C1ukP4YSsuxMkwIfGNrqsHmBxh0(J)Lorg/thoughtcrime/securesms/recipients/RecipientId; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->(J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke$lambda$0(J)Lorg/thoughtcrime/securesms/recipients/RecipientId; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->$r8$lambda$NvFETYLxPBjE2XjrolSGmoCr9vc(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply$lambda$0(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lio/reactivex/rxjava3/core/SingleSource; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->invoke()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->()V -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$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->(II)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->getMentions()I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->getUnread()I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->apply(Lkotlin/Unit;)Ljava/lang/Integer; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->apply(I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$98QfcuQyzMi7mf2qZrmWDK7X98k(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$SEmY6z8BVO3vpDRoIUBmm8tqjes(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->(Landroid/content/Context;Z)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->access$getUnreadCount(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->access$getUnreadMentionsCount(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getConversationThreadState$lambda$0(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getConversationThreadState(JI)Lio/reactivex/rxjava3/core/Single; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getIdentityRecords$lambda$11(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getIdentityRecords(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lio/reactivex/rxjava3/core/Single; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getMessageCounts(J)Lio/reactivex/rxjava3/core/Flowable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getUnreadCount(J)I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getUnreadMentionsCount(J)I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->(ZZZIZ)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->(ZZZIZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->copy$default(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;ZZZIZILjava/lang/Object;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->copy(ZZZIZ)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->(Lorg/signal/paging/ObservablePagedData;Lorg/thoughtcrime/securesms/conversation/ConversationData;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->getItems()Lorg/signal/paging/ObservablePagedData; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->getMeta()Lorg/thoughtcrime/securesms/conversation/ConversationData; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->(Landroid/app/Activity;Landroid/view/View;Lkotlin/jvm/functions/Function0;Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getActiveColorSet()Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$ColorSet; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getActiveToolbarColor(Z)I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getInactiveColorSet()Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$ColorSet; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getInactiveToolbarColor(Z)I HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inlined$viewModels$default$1;->(Landroidx/fragment/app/Fragment;)V @@ -21714,410 +20379,10 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inl HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inlined$viewModels$default$5;->(Landroidx/fragment/app/Fragment;Lkotlin/Lazy;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips;->(Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->(Ljava/util/List;ZZZ)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->(Ljava/util/List;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->getTypists()Ljava/util/List; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->(Lcom/bumptech/glide/RequestManager;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->getItemCount()I -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->accept(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->accept(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->apply(Lkotlin/Unit;Lorg/thoughtcrime/securesms/recipients/Recipient;Lj$/util/Optional;)Lkotlin/Pair; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->apply(Lkotlin/Pair;)Lio/reactivex/rxjava3/core/SingleSource; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;)Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda0;->subscribe(Lio/reactivex/rxjava3/core/ObservableEmitter;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda1;->(Lorg/signal/paging/PagingController;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda2;->(Lorg/signal/paging/PagingController;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda3;->(Lorg/signal/paging/PagingController;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->$r8$lambda$-cDP_eKfgHXjbVxKWQM3akAxvQw(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lio/reactivex/rxjava3/core/ObservableEmitter;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply$lambda$4(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lio/reactivex/rxjava3/core/ObservableEmitter;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)Lio/reactivex/rxjava3/core/ObservableSource; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->test(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->()V -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; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;Lj$/util/Optional;)Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->apply(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;Landroid/graphics/Rect;)Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->()V -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$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; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lio/reactivex/rxjava3/core/ObservableSource; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->(JILorg/thoughtcrime/securesms/conversation/colors/ChatColors;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;Lorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getHasMessageRequestStateSubject$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lio/reactivex/rxjava3/subjects/BehaviorSubject; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getIdentityRecordsStore$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lorg/thoughtcrime/securesms/util/rx/RxStore; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getRepository$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$get_conversationThreadState$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lio/reactivex/rxjava3/subjects/Subject; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$setRecipientSnapshot$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->canShowAsBubble(Landroid/content/Context;)Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getConversationThreadState()Lio/reactivex/rxjava3/core/Single; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getInputReadyState()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getMessageRequestState()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getPagingController()Lorg/signal/paging/ProxyPagingController; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getRecipientSnapshot()Lorg/thoughtcrime/securesms/recipients/Recipient; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getStoryRingState()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getThreadId()J -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getWallpaperSnapshot()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->isPushAvailable()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->onChatBoundsChanged(Landroid/graphics/Rect;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->updateIdentityRecordsInBackground()V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView$inflater$2;->(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->clear()V -HSPLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->setWallpaperEnabled(Z)V -HSPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;ZLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;Z)V -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;ZZ)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; -HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isAnnouncementGroup()Ljava/lang/Boolean; -HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isClientExpired()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isRequestingMember()Ljava/lang/Boolean; -HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isUnauthorized()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->shouldShowInviteToSignal()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;->(ZZLjava/lang/String;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;->getValue()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->invoke()Lorg/thoughtcrime/securesms/recipients/Recipient; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->(Landroid/content/Context;JLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->(Landroid/content/Context;JLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->access$getThreadId$p(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;)J -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getKey(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getKey(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey; -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; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageBackedKey;->(J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageBackedKey;->hashCode()I -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda0;->(Ljava/util/concurrent/Callable;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda1;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda2;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda2;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda3;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda3;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda4;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda4;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda5;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda5;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda6;->(Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda6;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda7;->(Ljava/util/List;Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda7;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->(Ljava/util/Map;Ljava/util/Set;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/lang/String;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getAttachments()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getCalls()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getHasBeenQuoted()Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getMentionsById()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getPayments()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getReactions()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getTimeLog()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->(Ljava/lang/Object;J)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getDuration()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getDurationNanos()J -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getResult()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$Cs9l2XA1WNP95TiUSxohh7ra3Ww(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$FrUVeLhot38doVCglQFObvc5AaY(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$RMAc6YctMyIBPxCbXNgRTW89bsw(Ljava/util/List;Landroid/app/Application;)Lkotlin/Unit; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$VVeGNqSH8Ds974z_DCkG6lrE4Vk(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$f-lfvLq_IbuaQLneolXX3ub4kj4(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$tRT3GzOp1DPXuQw76v5coP2Wv1s(Ljava/util/List;)Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$xdS5DH5tLLZB1PgnkW3I8tIGiDw(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$y9zmNO5eO3RqgCXAGsDgImftxNM(Ljava/util/concurrent/Callable;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$1(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$10(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$11(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$15(Ljava/util/List;Landroid/app/Application;)Lkotlin/Unit; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$2(Ljava/util/List;)Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$3(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$4(Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch(Ljava/util/List;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->submitTimed$lambda$23(Ljava/util/concurrent/Callable;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->submitTimed(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->updateModelsWithData(Ljava/util/List;Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->updateWithData(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;)Lorg/thoughtcrime/securesms/database/model/MessageRecord; -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeaderKey;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeaderKey;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZ)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->copy(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZ)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getActiveV2Group()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getOngoingCall()Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getRecipientId()Lorg/thoughtcrime/securesms/recipients/RecipientId; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->apply(Lkotlin/Unit;Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$Companion;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->test(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->apply(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Ljava/lang/Boolean; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V -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$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;->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$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 -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->test(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z -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;->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 -HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->(Landroidx/recyclerview/widget/RecyclerView;)V -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;->getOpacity()I -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/ShrinkWrapLinearLayout;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->addOnMeasureListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnMeasureListener;)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$$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;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda7;->(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$footerDrawable$1;->(Ljava/lang/Object;)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;->()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;->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;->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;->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/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/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/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 HSPLorg/thoughtcrime/securesms/conversationlist/ConversationFilterBehavior;->()V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationFilterBehavior;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationFilterBehavior;->onStartNestedScroll(Landroidx/coordinatorlayout/widget/CoordinatorLayout;Landroid/view/View;Landroid/view/View;Landroid/view/View;II)Z @@ -22294,6 +20559,7 @@ HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onCre HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onCreateView(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;Landroid/os/Bundle;)Landroid/view/View; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onFirstRender()V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onMegaphoneChanged(Lorg/thoughtcrime/securesms/megaphone/Megaphone;)V +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onMegaphoneCompleted(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onPause()V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onPostSubmitList(I)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onPrepareOptionsMenu(Landroid/view/Menu;)V @@ -22322,7 +20588,7 @@ HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->$r8$lambd HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->()V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->bind(Landroidx/lifecycle/LifecycleOwner;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;Lcom/bumptech/glide/RequestManager;Ljava/util/Locale;Ljava/util/Set;Lorg/thoughtcrime/securesms/conversationlist/model/ConversationSet;)V -HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->bindThread(Landroidx/lifecycle/LifecycleOwner;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;Lcom/bumptech/glide/RequestManager;Ljava/util/Locale;Ljava/util/Set;Lorg/thoughtcrime/securesms/conversationlist/model/ConversationSet;Ljava/lang/String;)V +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->bindThread(Landroidx/lifecycle/LifecycleOwner;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;Lcom/bumptech/glide/RequestManager;Ljava/util/Locale;Ljava/util/Set;Lorg/thoughtcrime/securesms/conversationlist/model/ConversationSet;Ljava/lang/String;Z)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->createFinalBodyWithMediaIcon(Landroid/content/Context;Ljava/lang/CharSequence;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;Lcom/bumptech/glide/RequestManager;ILorg/thoughtcrime/securesms/glide/GlideLiveDataTarget;)Landroidx/lifecycle/LiveData; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->getThreadDisplayBody(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;Lcom/bumptech/glide/RequestManager;ILorg/thoughtcrime/securesms/glide/GlideLiveDataTarget;)Landroidx/lifecycle/LiveData; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListItem;->lambda$bindThread$1(Ljava/util/Locale;Lorg/thoughtcrime/securesms/database/model/ThreadRecord;)V @@ -22411,6 +20677,10 @@ HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$megaph HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$megaphoneState$1;->()V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$megaphoneState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$megaphoneState$1;->invoke(Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$ConversationListState;)Lorg/thoughtcrime/securesms/megaphone/Megaphone; +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onMegaphoneCompleted$1;->()V +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onMegaphoneCompleted$1;->()V +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onMegaphoneCompleted$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onMegaphoneCompleted$1;->invoke(Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$ConversationListState;)Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$ConversationListState; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onVisible$1$1;->(Lorg/thoughtcrime/securesms/megaphone/Megaphone;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onVisible$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onVisible$1$1;->invoke(Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$ConversationListState;)Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$ConversationListState; @@ -22449,6 +20719,7 @@ HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->getN HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->getPinnedCount()I HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->getSelectedState()Lio/reactivex/rxjava3/core/Flowable; HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->getWebSocketState()Lio/reactivex/rxjava3/core/Observable; +HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->onMegaphoneCompleted(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->onMegaphoneVisible(Lorg/thoughtcrime/securesms/megaphone/Megaphone;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->onVisible$lambda$0(Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;Lorg/thoughtcrime/securesms/megaphone/Megaphone;)V HSPLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->onVisible()V @@ -22524,7 +20795,6 @@ HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation$Type;->(Ljava/lang/String;I)V HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation$Type;->values()[Lorg/thoughtcrime/securesms/conversationlist/model/Conversation$Type; HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation;->(Lorg/thoughtcrime/securesms/database/model/ThreadRecord;)V -HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation;->equals(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation;->getThreadRecord()Lorg/thoughtcrime/securesms/database/model/ThreadRecord; HSPLorg/thoughtcrime/securesms/conversationlist/model/Conversation;->getType()Lorg/thoughtcrime/securesms/conversationlist/model/Conversation$Type; HSPLorg/thoughtcrime/securesms/conversationlist/model/ConversationFilter;->$values()[Lorg/thoughtcrime/securesms/conversationlist/model/ConversationFilter; @@ -22629,12 +20899,6 @@ HSPLorg/thoughtcrime/securesms/crypto/ReentrantSessionLock;->()V HSPLorg/thoughtcrime/securesms/crypto/ReentrantSessionLock;->(Ljava/lang/String;I)V HSPLorg/thoughtcrime/securesms/crypto/ReentrantSessionLock;->acquire()Lorg/whispersystems/signalservice/api/SignalSessionLock$Lock; HSPLorg/thoughtcrime/securesms/crypto/SenderKeyUtil;->clearAllState()V -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda1;->()V -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda2;->()V -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda3;->()V -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache;Ljava/lang/String;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache$$ExternalSyntheticLambda3;->run()V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache;->$r8$lambda$7HwivD63yrsET6yjsVpd_w19Vyg(Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache;Ljava/lang/String;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V @@ -22646,7 +20910,6 @@ HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache;- HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->()V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/IdentityTable;)V -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->getIdentityRecords(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/identity/IdentityRecordList; HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->saveIdentity(Lorg/signal/libsignal/protocol/SignalProtocolAddress;Lorg/signal/libsignal/protocol/IdentityKey;)Z HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->saveIdentity(Lorg/signal/libsignal/protocol/SignalProtocolAddress;Lorg/signal/libsignal/protocol/IdentityKey;Z)Lorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore$SaveResult; HSPLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;->saveIdentityWithoutSideEffects(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/whispersystems/signalservice/api/push/ServiceId;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V @@ -22655,7 +20918,6 @@ HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore$SaveResult; HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore$SaveResult;->(Ljava/lang/String;I)V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->(Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore;Lj$/util/function/Supplier;)V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->getIdentityKeyPair()Lorg/signal/libsignal/protocol/IdentityKeyPair; -HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->getIdentityRecords(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/identity/IdentityRecordList; HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->saveIdentity(Lorg/signal/libsignal/protocol/SignalProtocolAddress;Lorg/signal/libsignal/protocol/IdentityKey;)Z HSPLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->saveIdentityWithoutSideEffects(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/whispersystems/signalservice/api/push/ServiceId;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V HSPLorg/thoughtcrime/securesms/crypto/storage/SignalKyberPreKeyStore;->()V @@ -22699,14 +20961,10 @@ HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->access$getVisualHashSt HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->deleteAbandonedPreuploadedAttachments()I HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachment(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachment(Lorg/thoughtcrime/securesms/attachments/AttachmentId;)Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; -HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachments(Landroid/database/Cursor;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachmentsForMessage(J)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachmentsForMessages(Ljava/util/Collection;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->getVisualHashStringOrNull(Lorg/thoughtcrime/securesms/attachments/Attachment;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->hasStickerAttachments()Z HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->insertAttachment(JLorg/thoughtcrime/securesms/attachments/Attachment;Z)Lorg/thoughtcrime/securesms/attachments/AttachmentId; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->insertAttachmentsForMessage(JLjava/util/List;Ljava/util/List;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->readAttachment(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->readAttachments(Landroid/database/Cursor;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->readStickerLocator(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/stickers/StickerLocator; HSPLorg/thoughtcrime/securesms/database/AttachmentTable;->setTransferProgressPermanentFailure(Lorg/thoughtcrime/securesms/attachments/AttachmentId;J)V @@ -22726,11 +20984,18 @@ HSPLorg/thoughtcrime/securesms/database/CallTable$Event;->$values()[Lorg/thought HSPLorg/thoughtcrime/securesms/database/CallTable$Event;->()V HSPLorg/thoughtcrime/securesms/database/CallTable$Event;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/database/CallTable$Event;->access$getCode$p(Lorg/thoughtcrime/securesms/database/CallTable$Event;)I +HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState$Serializer;->()V +HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState$Serializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState$Serializer;->serialize(Lorg/thoughtcrime/securesms/database/CallTable$ReadState;)Ljava/lang/Integer; +HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState;->$values()[Lorg/thoughtcrime/securesms/database/CallTable$ReadState; +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;->()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; HSPLorg/thoughtcrime/securesms/database/CallTable;->getLatestRingingCalls()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/CallTable;->getOldestDeletionTimestamp()J +HSPLorg/thoughtcrime/securesms/database/CallTable;->getUnreadMissedCallCount()J HSPLorg/thoughtcrime/securesms/database/CallTable;->markRingingCallsAsMissed()V HSPLorg/thoughtcrime/securesms/database/CdsTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/CdsTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -22745,26 +21010,15 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->()V HSPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->onDelete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->onQuery(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->onSql(Ljava/lang/String;[Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda10;->run()V +HSPLorg/thoughtcrime/securesms/database/DatabaseMonitor;->onUpdate(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V 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$$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 -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda24;->run()V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda28;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda28;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda29;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;J)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda29;->run()V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda30;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda30;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda37;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda37;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda40;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Ljava/lang/Runnable;)V @@ -22773,18 +21027,12 @@ 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$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$mv9tymw4eNQuLtAMo52Pot0i2c4(Lorg/thoughtcrime/securesms/database/DatabaseObserver;J)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$nM9Xevlg3i5jd4hhWqCSJ8V0APs(Lorg/thoughtcrime/securesms/database/DatabaseObserver;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$oXFDlhvhHFY1OBIQHYp3Oanmq-k(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$wnm9BEANNc03FZmWKcqOLSgrT_U(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$wtkgxGON7fTcqqEso3BleXuYIA8(Lorg/thoughtcrime/securesms/database/DatabaseObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$zacSulZCbj18KAJ4fsL5guxghT4(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->(Landroid/app/Application;)V @@ -22794,14 +21042,8 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyConversa HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyRecipientChanged$34(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyStoryObservers$35(Lorg/thoughtcrime/securesms/recipients/RecipientId;)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 -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerMessageUpdateObserver$10(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerNotificationProfileObserver$12(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -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 @@ -22810,16 +21052,8 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyRecipientChange HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifySet(Ljava/util/Set;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyStoryObservers(Lorg/thoughtcrime/securesms/recipients/RecipientId;)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 -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMessageInsertObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V -HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMessageUpdateObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerNotificationProfileObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -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; @@ -22884,10 +21118,6 @@ HSPLorg/thoughtcrime/securesms/database/GroupTable;->access$getTYPED_GROUP_PROJE HSPLorg/thoughtcrime/securesms/database/GroupTable;->getAllGroupV2Ids()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/GroupTable;->getGroup(Lorg/signal/core/util/SqlUtil$Query;)Lj$/util/Optional; HSPLorg/thoughtcrime/securesms/database/GroupTable;->getGroup(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/database/GroupTable;->getGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;Z)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/GroupTable;->getGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZ)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/GroupTable;->getPushGroupNamesContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/GroupTable;->getPushGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/IdentityTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/IdentityTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus$Companion;->()V @@ -23011,6 +21241,7 @@ HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable$Companion;->getDEFA HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable$Companion;->getLONGER_LIFESPAN()J HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable$insert$1;->(Ljava/util/List;J)V HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable$insert$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable$insert$1;->invoke(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)Ljava/lang/Integer; HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable;->()V HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable;->(Lorg/thoughtcrime/securesms/database/LogDatabase;)V HSPLorg/thoughtcrime/securesms/database/LogDatabase$LogTable;->access$getDEFAULT_LIFESPAN$cp()J @@ -23056,9 +21287,7 @@ HSPLorg/thoughtcrime/securesms/database/MegaphoneDatabase;->onOpen(Lnet/zetetic/ HSPLorg/thoughtcrime/securesms/database/MentionTable;->()V HSPLorg/thoughtcrime/securesms/database/MentionTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/MentionTable;->getMentionsForMessage(J)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/MentionTable;->getMentionsForMessages(Ljava/util/Collection;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/database/MentionTable;->insert(JJLjava/util/Collection;)V -HSPLorg/thoughtcrime/securesms/database/MentionTable;->readMentions(Landroid/database/Cursor;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/database/MentionUtil$$ExternalSyntheticLambda4;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/database/MentionUtil$UpdatedBodyAndMentions;->(Ljava/lang/CharSequence;Ljava/util/List;Ljava/util/List;)V HSPLorg/thoughtcrime/securesms/database/MentionUtil$UpdatedBodyAndMentions;->(Ljava/lang/CharSequence;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/MentionUtil$UpdatedBodyAndMentions-IA;)V @@ -23103,7 +21332,7 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable$Companion;->parseQuoteMenti HSPLorg/thoughtcrime/securesms/database/MessageTable$ExpirationInfo;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$ExpirationInfo;->(JJJZ)V HSPLorg/thoughtcrime/securesms/database/MessageTable$InsertResult;->()V -HSPLorg/thoughtcrime/securesms/database/MessageTable$InsertResult;->(JJLjava/util/Map;)V +HSPLorg/thoughtcrime/securesms/database/MessageTable$InsertResult;->(JJZLjava/util/Map;)V HSPLorg/thoughtcrime/securesms/database/MessageTable$InsertResult;->getMessageId()J HSPLorg/thoughtcrime/securesms/database/MessageTable$MarkedMessageInfo;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$MarkedMessageInfo;->(JLorg/thoughtcrime/securesms/database/MessageTable$SyncMessageId;Lorg/thoughtcrime/securesms/database/model/MessageId;Lorg/thoughtcrime/securesms/database/MessageTable$ExpirationInfo;Lorg/thoughtcrime/securesms/database/model/StoryType;)V @@ -23116,11 +21345,8 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$Companion;->buildSlideDeck(Ljava/util/List;)Lorg/thoughtcrime/securesms/mms/SlideDeck; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->(Lorg/thoughtcrime/securesms/database/MessageTable$MmsReader;)V HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->hasNext()Z -HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->next()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->next()Lorg/thoughtcrime/securesms/database/model/MessageRecord; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->(Landroid/database/Cursor;)V -HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->buildSlideDeck(Ljava/util/List;)Lorg/thoughtcrime/securesms/mms/SlideDeck; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->close()V HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->getCurrent()Lorg/thoughtcrime/securesms/database/model/MessageRecord; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->getCursor()Landroid/database/Cursor; @@ -23130,8 +21356,6 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->getMismatchedId HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->getNext()Lorg/thoughtcrime/securesms/database/model/MessageRecord; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->getQuote(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/model/Quote; HSPLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->iterator()Ljava/util/Iterator; -HSPLorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor;->(JLorg/thoughtcrime/securesms/recipients/RecipientId;)V -HSPLorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor;->hashCode()I 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 @@ -23152,11 +21376,9 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable;->access$getSerializedShare HSPLorg/thoughtcrime/securesms/database/MessageTable;->buildMeaningfulMessagesQuery(J)Lorg/signal/core/util/SqlUtil$Query; 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; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getConversationSnippet(J)Lorg/thoughtcrime/securesms/database/model/MessageRecord; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getConversationSnippetCursor(J)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getExpirationStartedMessages()Landroid/database/Cursor; -HSPLorg/thoughtcrime/securesms/database/MessageTable;->getMessageCountForThread(J)I HSPLorg/thoughtcrime/securesms/database/MessageTable;->getMessageRecord(J)Lorg/thoughtcrime/securesms/database/model/MessageRecord; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getNearestExpiringViewOnceMessage()Lorg/thoughtcrime/securesms/revealable/ViewOnceExpirationInfo; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getOldestScheduledSendTimestamp()Lorg/thoughtcrime/securesms/database/model/MessageRecord; @@ -23164,19 +21386,15 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable;->getOldestStorySendTimesta HSPLorg/thoughtcrime/securesms/database/MessageTable;->getReleaseChannelThreadId(Z)J HSPLorg/thoughtcrime/securesms/database/MessageTable;->getSerializedLinkPreviews(Ljava/util/Map;Ljava/util/List;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getSerializedSharedContacts(Ljava/util/Map;Ljava/util/List;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/database/MessageTable;->getStoryViewState(J)Lorg/thoughtcrime/securesms/database/model/StoryViewState; -HSPLorg/thoughtcrime/securesms/database/MessageTable;->getStoryViewState(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/StoryViewState; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getThreadIdForMessage(J)J HSPLorg/thoughtcrime/securesms/database/MessageTable;->getUnreadCount(J)I HSPLorg/thoughtcrime/securesms/database/MessageTable;->getUnreadMentionCount(J)I -HSPLorg/thoughtcrime/securesms/database/MessageTable;->getUnreadMisedCallCount()J HSPLorg/thoughtcrime/securesms/database/MessageTable;->getUnreadStoryThreadRecipientIds()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/MessageTable;->hasFailedOutgoingStory()Z HSPLorg/thoughtcrime/securesms/database/MessageTable;->hasMeaningfulMessage(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTable;->insertMediaMessage(JLjava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Landroid/content/ContentValues;Lorg/thoughtcrime/securesms/database/MessageTable$InsertListener;ZZ)Lkotlin/Pair; HSPLorg/thoughtcrime/securesms/database/MessageTable;->insertMessageInbox$default(Lorg/thoughtcrime/securesms/database/MessageTable;Lorg/thoughtcrime/securesms/mms/IncomingMessage;JLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;ZILjava/lang/Object;)Lj$/util/Optional; HSPLorg/thoughtcrime/securesms/database/MessageTable;->insertMessageInbox(Lorg/thoughtcrime/securesms/mms/IncomingMessage;JLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;Z)Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/database/MessageTable;->isQuoted(Ljava/util/Collection;)Ljava/util/Set; HSPLorg/thoughtcrime/securesms/database/MessageTable;->mmsReaderFor(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/MessageTable$MmsReader; HSPLorg/thoughtcrime/securesms/database/MessageTable;->rawQueryWithAttachments$default(Lorg/thoughtcrime/securesms/database/MessageTable;Ljava/lang/String;[Ljava/lang/String;ZJILjava/lang/Object;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/MessageTable;->rawQueryWithAttachments(Ljava/lang/String;[Ljava/lang/String;ZJ)Landroid/database/Cursor; @@ -23192,21 +21410,17 @@ HSPLorg/thoughtcrime/securesms/database/MessageType;->values()[Lorg/thoughtcrime HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->()V HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isBadDecryptType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isBoostRequest(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isBundleKeyExchange(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isCallLog(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isChangeNumber(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isChatSessionRefresh(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isDraftMessageType(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isDuplicateMessageType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isEndSessionType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isExpirationTimerUpdate(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isFailedMessageType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isForcedSms(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGiftBadge(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupCall(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupQuit(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupUpdate(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupV1MigrationEvent(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupV2(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isIdentityDefault(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isIdentityUpdate(J)Z @@ -23226,16 +21440,10 @@ HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isOutgoingVideoCall(J HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPaymentsActivated(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPaymentsNotification(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPaymentsRequestToActivate(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingInsecureSmsFallbackType(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingMessageType(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingSecureSmsFallbackType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isProfileChange(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPushType(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isRateLimited(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isReportedSpam(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isSecureType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isSessionSwitchoverType(J)Z -HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isSmsExport(J)Z 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 @@ -23269,7 +21477,6 @@ HSPLorg/thoughtcrime/securesms/database/OneTimePreKeyTable;->()V HSPLorg/thoughtcrime/securesms/database/OneTimePreKeyTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/PaymentTable;->()V HSPLorg/thoughtcrime/securesms/database/PaymentTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V -HSPLorg/thoughtcrime/securesms/database/PaymentTable;->getPayments(Ljava/util/Collection;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/PendingPniSignatureMessageTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/PendingPniSignatureMessageTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/PendingPniSignatureMessageTable;->()V @@ -23311,7 +21518,6 @@ HSPLorg/thoughtcrime/securesms/database/ReactionTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/ReactionTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/ReactionTable;->()V HSPLorg/thoughtcrime/securesms/database/ReactionTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V -HSPLorg/thoughtcrime/securesms/database/ReactionTable;->getReactionsForMessages(Ljava/util/Collection;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/database/RecipientTable$$ExternalSyntheticLambda1;->()V HSPLorg/thoughtcrime/securesms/database/RecipientTable$$ExternalSyntheticLambda1;->run()V HSPLorg/thoughtcrime/securesms/database/RecipientTable$Companion;->()V @@ -23408,7 +21614,6 @@ HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getByPni(Lorg/whispersy HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getByServiceId(Lorg/whispersystems/signalservice/api/push/ServiceId;)Lj$/util/Optional; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getRecipientIdIfAllFieldsMatch(Lorg/whispersystems/signalservice/api/push/ServiceId$ACI;Lorg/whispersystems/signalservice/api/push/ServiceId$PNI;Ljava/lang/String;)Lorg/thoughtcrime/securesms/recipients/RecipientId; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getRecipientsWithNotificationChannels()Lorg/thoughtcrime/securesms/database/RecipientTable$RecipientReader; -HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getRecord(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/RecipientRecord; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->getTAG()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->insertReleaseChannelRecipient()Lorg/thoughtcrime/securesms/recipients/RecipientId; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->linkIdsForSelf(Lorg/whispersystems/signalservice/api/push/ServiceId$ACI;Lorg/whispersystems/signalservice/api/push/ServiceId$PNI;Ljava/lang/String;)V @@ -23472,11 +21677,7 @@ HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLam HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda0;->subscribe(Lio/reactivex/rxjava3/core/FlowableEmitter;)V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;->(Lio/reactivex/rxjava3/core/Emitter;)V -HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;->onChanged()V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;->prime()V -HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->(J)V -HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->invoke(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversationList$2;->()V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversationList$2;->()V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversationList$2;->invoke()Lio/reactivex/rxjava3/core/Flowable; @@ -23502,7 +21703,6 @@ HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->()V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->()V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->access$conversationListFlowable(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver;)Lio/reactivex/rxjava3/core/Flowable; HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->access$notificationProfilesFlowable(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver;)Lio/reactivex/rxjava3/core/Flowable; -HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->conversation(J)Lio/reactivex/rxjava3/core/Flowable; HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->conversationListFlowable()Lio/reactivex/rxjava3/core/Flowable; HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->databaseFlowable$lambda$1(Lkotlin/jvm/functions/Function1;Lio/reactivex/rxjava3/core/FlowableEmitter;)V HSPLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->databaseFlowable(Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/core/Flowable; @@ -23515,8 +21715,6 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda1 HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda10;->run()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda11;->run()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda12;->(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda12;->run()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda13;->(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda13;->run()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda14;->(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)V @@ -23551,7 +21749,6 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$84ZUkaSnUYQb HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$EPMfo6df3cgR6BCZ-hqCIN4Oqlo(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$M2dGB_vmS-aoBgck2zt6F2h6rb4(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/Integer; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$OJ_GKl5ualt7sxHCS71OACqaPgE(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$PFumX8gsMH0Yn0ZTdDId1_9oWEA(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$eBR4RIjrRyyBXYMF_BA_zlT3YmA(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)Ljava/lang/Long; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$eBy5mr7cGwpaGfif6XwVCAPWl_A(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$sxX_UsW8CfX4XRG8LVaHjNlCyVA(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)Ljava/lang/Long; @@ -23578,7 +21775,6 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$execSQL$19(Ljava HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$insert$9(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)Ljava/lang/Long; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$insertWithOnConflict$13(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)Ljava/lang/Long; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$query$3(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$query$4(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$rawQuery$5(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$rawQuery$6(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$replace$11(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)Ljava/lang/Long; @@ -23587,7 +21783,6 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$updateWithOnConf HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->replace(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J @@ -23595,7 +21790,6 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->runPostSuccessfulTransa 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;->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 @@ -23641,9 +21835,7 @@ HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->messageLog()L HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->messageSearch()Lorg/thoughtcrime/securesms/database/SearchTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->messages()Lorg/thoughtcrime/securesms/database/MessageTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->notificationProfiles()Lorg/thoughtcrime/securesms/database/NotificationProfileDatabase; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->payments()Lorg/thoughtcrime/securesms/database/PaymentTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->pendingRetryReceipts()Lorg/thoughtcrime/securesms/database/PendingRetryReceiptTable; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->reactions()Lorg/thoughtcrime/securesms/database/ReactionTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->recipients()Lorg/thoughtcrime/securesms/database/RecipientTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->remoteMegaphones()Lorg/thoughtcrime/securesms/database/RemoteMegaphoneTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->runPostSuccessfulTransaction(Ljava/lang/Runnable;)V @@ -23652,7 +21844,6 @@ HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->senderKeyShar HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->senderKeys()Lorg/thoughtcrime/securesms/database/SenderKeyTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->sessions()Lorg/thoughtcrime/securesms/database/SessionTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->signedPreKeys()Lorg/thoughtcrime/securesms/database/SignedPreKeyTable; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->stickers()Lorg/thoughtcrime/securesms/database/StickerTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->threads()Lorg/thoughtcrime/securesms/database/ThreadTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->()V HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->(Landroid/app/Application;Lorg/thoughtcrime/securesms/crypto/DatabaseSecret;Lorg/thoughtcrime/securesms/crypto/AttachmentSecret;)V @@ -23674,12 +21865,10 @@ HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getMentionTable()Lorg/t HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getMessageSendLogTables()Lorg/thoughtcrime/securesms/database/MessageSendLogTables; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getMessageTable()Lorg/thoughtcrime/securesms/database/MessageTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getNotificationProfileDatabase()Lorg/thoughtcrime/securesms/database/NotificationProfileDatabase; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getPaymentTable()Lorg/thoughtcrime/securesms/database/PaymentTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getPendingRetryReceiptTable()Lorg/thoughtcrime/securesms/database/PendingRetryReceiptTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getRawDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getRawReadableDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getRawWritableDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getReactionTable()Lorg/thoughtcrime/securesms/database/ReactionTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getRecipientTable()Lorg/thoughtcrime/securesms/database/RecipientTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getRemoteMegaphoneTable()Lorg/thoughtcrime/securesms/database/RemoteMegaphoneTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getSearchTable()Lorg/thoughtcrime/securesms/database/SearchTable; @@ -23689,7 +21878,6 @@ HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getSessionTable()Lorg/t HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getSignalReadableDatabase()Lorg/thoughtcrime/securesms/database/SQLiteDatabase; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getSignalWritableDatabase()Lorg/thoughtcrime/securesms/database/SQLiteDatabase; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getSignedPreKeyTable()Lorg/thoughtcrime/securesms/database/SignedPreKeyTable; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getStickerTable()Lorg/thoughtcrime/securesms/database/StickerTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->getThreadTable()Lorg/thoughtcrime/securesms/database/ThreadTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->groups()Lorg/thoughtcrime/securesms/database/GroupTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->hasTable(Ljava/lang/String;)Z @@ -23707,7 +21895,6 @@ HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->senderKeyShared()Lorg/t HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->senderKeys()Lorg/thoughtcrime/securesms/database/SenderKeyTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->sessions()Lorg/thoughtcrime/securesms/database/SessionTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->signedPreKeys()Lorg/thoughtcrime/securesms/database/SignedPreKeyTable; -HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->stickers()Lorg/thoughtcrime/securesms/database/StickerTable; HSPLorg/thoughtcrime/securesms/database/SignalDatabase;->threads()Lorg/thoughtcrime/securesms/database/ThreadTable; HSPLorg/thoughtcrime/securesms/database/SignedPreKeyTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/SignedPreKeyTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -23729,7 +21916,6 @@ HSPLorg/thoughtcrime/securesms/database/SqlCipherLibraryLoader;->()V HSPLorg/thoughtcrime/securesms/database/SqlCipherLibraryLoader;->load()V HSPLorg/thoughtcrime/securesms/database/StickerTable;->()V HSPLorg/thoughtcrime/securesms/database/StickerTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;Lorg/thoughtcrime/securesms/crypto/AttachmentSecret;)V -HSPLorg/thoughtcrime/securesms/database/StickerTable;->getAllStickerPacks(Ljava/lang/String;)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/StorySendTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/StorySendTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/StorySendTable;->()V @@ -23745,11 +21931,6 @@ HSPLorg/thoughtcrime/securesms/database/ThreadBodyUtil;->getFormattedBodyFor(Lan HSPLorg/thoughtcrime/securesms/database/ThreadBodyUtil;->getFormattedBodyForMms(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord;Ljava/lang/CharSequence;)Lorg/thoughtcrime/securesms/database/ThreadBodyUtil$ThreadBody; HSPLorg/thoughtcrime/securesms/database/ThreadTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/ThreadTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->()V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->(JZJI)V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getLastScrolled()J -HSPLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getLastSeen()J -HSPLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getUnreadCount()I HSPLorg/thoughtcrime/securesms/database/ThreadTable$Extra$Companion;->()V HSPLorg/thoughtcrime/securesms/database/ThreadTable$Extra$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/ThreadTable$Extra$Companion;->forAlbum(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/ThreadTable$Extra; @@ -23778,13 +21959,16 @@ HSPLorg/thoughtcrime/securesms/database/ThreadTable$Reader;->(Lorg/thought HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->()V HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->(Landroid/database/Cursor;Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->close()V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->getCurrent()Lorg/thoughtcrime/securesms/database/model/ThreadRecord; HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->getNext()Lorg/thoughtcrime/securesms/database/model/ThreadRecord; HSPLorg/thoughtcrime/securesms/database/ThreadTable$StaticReader;->getSnippetUri(Landroid/database/Cursor;)Landroid/net/Uri; +HSPLorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult;->()V +HSPLorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult;->(JZ)V +HSPLorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult;->getNewlyCreated()Z +HSPLorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult;->getThreadId()J HSPLorg/thoughtcrime/securesms/database/ThreadTable$WhenMappings;->()V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdFor$1;->(Lorg/thoughtcrime/securesms/database/ThreadTable;Lorg/thoughtcrime/securesms/recipients/RecipientId;ZI)V -HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdFor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdFor$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)Ljava/lang/Long; +HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdResultFor$1;->(Lorg/thoughtcrime/securesms/database/ThreadTable;Lorg/thoughtcrime/securesms/recipients/RecipientId;ZI)V +HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdResultFor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdResultFor$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)Lorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult; HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1$isPinned$2;->(Lorg/thoughtcrime/securesms/database/ThreadTable;J)V 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 @@ -23805,11 +21989,11 @@ HSPLorg/thoughtcrime/securesms/database/ThreadTable;->createThreadForRecipient(L HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getArchivedConversationListCount(Lorg/thoughtcrime/securesms/conversationlist/model/ConversationFilter;)I HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getAttachmentUriFor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getContentTypeFor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getConversationMetadata(J)Lorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getExtrasFor(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/ThreadBodyUtil$ThreadBody;)Lorg/thoughtcrime/securesms/database/ThreadTable$Extra; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getOrCreateThreadIdFor(Lorg/thoughtcrime/securesms/recipients/Recipient;)J HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getOrCreateThreadIdFor(Lorg/thoughtcrime/securesms/recipients/Recipient;I)J HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getOrCreateThreadIdFor(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZI)J +HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getOrCreateThreadIdResultFor(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZI)Lorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getPinnedConversationListCount(Lorg/thoughtcrime/securesms/conversationlist/model/ConversationFilter;)I HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getRecentConversationList(IZZ)Landroid/database/Cursor; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->getRecentConversationList(IZZZZZZ)Landroid/database/Cursor; @@ -23842,12 +22026,6 @@ HSPLorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$ HSPLorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline22;->m(Landroid/app/NotificationChannel;)I HSPLorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline3;->m(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline6;->m(Landroid/app/NotificationChannel;Landroid/net/Uri;Landroid/media/AudioAttributes;)V -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->()V -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->(Ljava/util/Collection;)V -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isUnverified()Z -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isUnverified(Ljava/util/Collection;)Z -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isVerified()Z -HSPLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isVerified(Ljava/util/Collection;)Z HSPLorg/thoughtcrime/securesms/database/model/AvatarPickerDatabase$Companion;->()V HSPLorg/thoughtcrime/securesms/database/model/AvatarPickerDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/model/AvatarPickerDatabase;->()V @@ -23860,37 +22038,15 @@ HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getDateSent()J HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getDeliveryStatus()I HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getFromRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getThreadId()J -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getToRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->hasDeliveryReceipt()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->hasReadReceipt()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isBoostRequest()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isCallLog()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isChangeNumber()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isEndSession()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isExpirationTimerUpdate()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isFailed()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isGroupAction()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isGroupCall()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isGroupQuit()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isGroupUpdate()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isIncomingAudioCall()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isIncomingVideoCall()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isJoined()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isKeyExchange()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMessageRequestAccepted()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMissedAudioCall()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isMissedVideoCall()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoing()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoingAudioCall()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isOutgoingVideoCall()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPaymentNotification()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPaymentsActivated()Z HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPaymentsRequestToActivate()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPending()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPendingInsecureSmsFallback()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isProfileChange()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isReportedSpam()Z -HSPLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isViewed()Z HSPLorg/thoughtcrime/securesms/database/model/DistributionListId$1;->()V HSPLorg/thoughtcrime/securesms/database/model/DistributionListId;->()V HSPLorg/thoughtcrime/securesms/database/model/DistributionListId;->(J)V @@ -23908,10 +22064,8 @@ HSPLorg/thoughtcrime/securesms/database/model/EmojiSearchData;->getRank()I HSPLorg/thoughtcrime/securesms/database/model/EmojiSearchData;->getTags()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->()V HSPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V -HSPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->getVerifiedStatus()Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus; HSPLorg/thoughtcrime/securesms/database/model/IdentityStoreRecord;->()V HSPLorg/thoughtcrime/securesms/database/model/IdentityStoreRecord;->(Ljava/lang/String;Lorg/signal/libsignal/protocol/IdentityKey;Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZJZ)V -HSPLorg/thoughtcrime/securesms/database/model/IdentityStoreRecord;->toIdentityRecord(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/IdentityRecord; HSPLorg/thoughtcrime/securesms/database/model/LocalMetricsEvent$WhenMappings;->()V HSPLorg/thoughtcrime/securesms/database/model/LocalMetricsEvent;->()V HSPLorg/thoughtcrime/securesms/database/model/LocalMetricsEvent;->(JLjava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/concurrent/TimeUnit;)V @@ -23947,87 +22101,23 @@ HSPLorg/thoughtcrime/securesms/database/model/MessageId;->()V HSPLorg/thoughtcrime/securesms/database/model/MessageId;->(J)V HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->()V HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->(JLjava/lang/String;Lorg/thoughtcrime/securesms/recipients/Recipient;ILorg/thoughtcrime/securesms/recipients/Recipient;JJJJIZJLjava/util/Set;Ljava/util/Set;IJJZZLjava/util/List;ZJZJLorg/thoughtcrime/securesms/database/model/MessageId;ILorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras;)V -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Landroid/text/SpannableString; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getExpireStarted()J HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getExpiresIn()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getFromDeviceId()I HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getId()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getIdentityKeyMismatches()Ljava/util/Set; HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getMessageExtras()Lorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getNetworkFailures()Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getNotifiedTimestamp()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getOriginalMessageId()Lorg/thoughtcrime/securesms/database/model/MessageId; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getReactions()Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getReceiptTimestamp()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getRevisionNumber()I -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getServerTimestamp()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getSubscriptionId()I HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getTimestamp()J HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getType()J -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->getUpdateDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Lorg/thoughtcrime/securesms/database/model/UpdateDescription; -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->hashCode()I -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isBadDecryptType()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isBundleKeyExchange()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isChatSessionRefresh()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isDisplayBodyEmpty(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isEditMessage()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isGroupV1MigrationEvent()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityDefault()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityUpdate()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isIdentityVerified()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isJumbomoji(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isLegacyMessage()Z HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isPush()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isRateLimited()Z HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isRemoteDelete()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSecure()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSessionSwitchoverEventType()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isSmsExportType()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isThreadMergeEventType()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isUnidentified()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecord;->isUpdate()Z -HSPLorg/thoughtcrime/securesms/database/model/MessageRecordExtensionsKt;->withAttachments(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/MessageRecord; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda1;->(Ljava/util/Map;)V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda2;->(Ljava/util/Map;)V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda3;->()V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda4;->()V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda5;->()V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda6;->()V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda7;->()V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda8;->(Ljava/util/Set;)V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda9;->(Ljava/util/Set;)V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->$r8$lambda$61cfVwuT9NopES3EvrpU58ByOrs(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->$r8$lambda$yFErtnyhgG1o4FUJh3c90u9IkrI(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->()V HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->(JLorg/thoughtcrime/securesms/recipients/Recipient;ILorg/thoughtcrime/securesms/recipients/Recipient;JJJZJLjava/lang/String;Lorg/thoughtcrime/securesms/mms/SlideDeck;JLjava/util/Set;Ljava/util/Set;IJJZZLorg/thoughtcrime/securesms/database/model/Quote;Ljava/util/List;Ljava/util/List;ZLjava/util/List;ZZJZJLorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Lorg/thoughtcrime/securesms/database/model/StoryType;Lorg/thoughtcrime/securesms/database/model/ParentStoryId;Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge;Lorg/thoughtcrime/securesms/payments/Payment;Lorg/thoughtcrime/securesms/database/CallTable$Call;JLorg/thoughtcrime/securesms/database/model/MessageId;Lorg/thoughtcrime/securesms/database/model/MessageId;IZLorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras;)V -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getCall()Lorg/thoughtcrime/securesms/database/CallTable$Call; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getGiftBadge()Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getLatestRevisionId()Lorg/thoughtcrime/securesms/database/model/MessageId; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getLinkPreviews()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getMessageRanges()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getParentStoryId()Lorg/thoughtcrime/securesms/database/model/ParentStoryId; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getPayment()Lorg/thoughtcrime/securesms/payments/Payment; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getQuote()Lorg/thoughtcrime/securesms/database/model/Quote; HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getScheduledDate()J HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getSharedContacts()Ljava/util/List; HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getSlideDeck()Lorg/thoughtcrime/securesms/mms/SlideDeck; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getStoryType()Lorg/thoughtcrime/securesms/database/model/StoryType; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getUpdateDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Lorg/thoughtcrime/securesms/database/model/UpdateDescription; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isMediaPending()Z HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isMms()Z HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isMmsNotification()Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isRead()Z HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isViewOnce()Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->lambda$withAttachments$0(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->lambda$withAttachments$1(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateContacts(Ljava/util/List;Ljava/util/Map;)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateLinkPreviews(Ljava/util/List;Ljava/util/Map;)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateQuote(Lorg/thoughtcrime/securesms/database/model/Quote;Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/Quote; -HSPLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->withAttachments(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord; HSPLorg/thoughtcrime/securesms/database/model/ParentStoryId$Companion;->()V HSPLorg/thoughtcrime/securesms/database/model/ParentStoryId$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/model/ParentStoryId$Companion;->deserialize(J)Lorg/thoughtcrime/securesms/database/model/ParentStoryId; @@ -24042,7 +22132,7 @@ HSPLorg/thoughtcrime/securesms/database/model/ProfileAvatarFileDetails;->toStrin HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$Capabilities$Companion;->()V HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$Capabilities$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$Capabilities;->()V -HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$Capabilities;->(JLorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;)V +HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$Capabilities;->(JLorg/thoughtcrime/securesms/recipients/Recipient$Capability;Lorg/thoughtcrime/securesms/recipients/Recipient$Capability;)V HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$SyncExtras;->()V HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord$SyncExtras;->([BLorg/signal/libsignal/zkgroup/groups/GroupMasterKey;[BLorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus;ZZJLjava/lang/String;Z)V HSPLorg/thoughtcrime/securesms/database/model/RecipientRecord;->()V @@ -24107,24 +22197,6 @@ HSPLorg/thoughtcrime/securesms/database/model/StoryType;->()V HSPLorg/thoughtcrime/securesms/database/model/StoryType;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/database/model/StoryType;->getCode()I HSPLorg/thoughtcrime/securesms/database/model/StoryType;->isStory()Z -HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V -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; -HSPLorg/thoughtcrime/securesms/database/model/StoryViewState;->$values()[Lorg/thoughtcrime/securesms/database/model/StoryViewState; -HSPLorg/thoughtcrime/securesms/database/model/StoryViewState;->()V -HSPLorg/thoughtcrime/securesms/database/model/StoryViewState;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/database/model/StoryViewState;->values()[Lorg/thoughtcrime/securesms/database/model/StoryViewState; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->-$$Nest$fgetarchived(Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;)Z HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->-$$Nest$fgetbody(Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->-$$Nest$fgetcontentType(Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;)Ljava/lang/String; @@ -24163,13 +22235,13 @@ HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setLastSeen HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setMeaningfulMessages(Z)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setPinned(Z)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setRecipient(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; +HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setSnippetMessageExtras(Lorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras;)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setSnippetUri(Landroid/net/Uri;)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setType(J)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setUnreadCount(I)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;->setUnreadSelfMentionsCount(I)Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->(Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;)V HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->(Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder;Lorg/thoughtcrime/securesms/database/model/ThreadRecord-IA;)V -HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->equals(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->getBody()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->getBodyRanges()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList; HSPLorg/thoughtcrime/securesms/database/model/ThreadRecord;->getDate()J @@ -24192,30 +22264,13 @@ 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/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; HSPLorg/thoughtcrime/securesms/databinding/ConversationListFilterPullViewBinding;->(Landroid/view/View;Lorg/thoughtcrime/securesms/conversationlist/chatfilter/FilterCircleView;Lcom/google/android/material/chip/Chip;Landroid/widget/TextView;)V HSPLorg/thoughtcrime/securesms/databinding/ConversationListFilterPullViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationListFilterPullViewBinding; HSPLorg/thoughtcrime/securesms/databinding/ConversationListTabsBinding;->(Landroidx/constraintlayout/widget/ConstraintLayout;Landroid/widget/ImageView;Landroid/view/View;Lcom/airbnb/lottie/LottieAnimationView;Landroid/widget/TextView;Landroid/view/View;Landroid/widget/TextView;Landroid/widget/ImageView;Landroid/view/View;Lcom/airbnb/lottie/LottieAnimationView;Landroid/widget/TextView;Landroid/view/View;Landroid/widget/TextView;Landroid/widget/ImageView;Landroid/view/View;Lcom/airbnb/lottie/LottieAnimationView;Landroid/widget/TextView;Landroid/view/View;Landroid/widget/TextView;)V HSPLorg/thoughtcrime/securesms/databinding/ConversationListTabsBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationListTabsBinding; HSPLorg/thoughtcrime/securesms/databinding/ConversationListTabsBinding;->getRoot()Landroidx/constraintlayout/widget/ConstraintLayout; -HSPLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->(Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;Landroidx/appcompat/widget/AppCompatImageView;Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;Landroid/widget/TextView;Lcom/pnikosis/materialishprogress/ProgressWheel;Landroidx/appcompat/widget/AppCompatImageView;)V -HSPLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding; -HSPLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->(Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Landroid/widget/FrameLayout;Lorg/thoughtcrime/securesms/avatar/view/AvatarView;Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/widget/LinearLayout;Lorg/thoughtcrime/securesms/components/FromTextView;Landroidx/appcompat/widget/AppCompatImageView;Landroid/widget/TextView;)V -HSPLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding; -HSPLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->getRoot()Lorg/thoughtcrime/securesms/conversation/ConversationTitleView; -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;->$r8$lambda$TTNxYGZvGlMOp1oidmVJeKiRxZs()Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration; @@ -24236,7 +22291,6 @@ HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getGroupsV HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getIncomingMessageObserver()Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getJobManager()Lorg/thoughtcrime/securesms/jobmanager/JobManager; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getMegaphoneRepository()Lorg/thoughtcrime/securesms/megaphone/MegaphoneRepository; -HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getMessageNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getOkHttpClient()Lokhttp3/OkHttpClient; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getPendingRetryReceiptCache()Lorg/thoughtcrime/securesms/database/PendingRetryReceiptCache; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->getPendingRetryReceiptManager()Lorg/thoughtcrime/securesms/service/PendingRetryReceiptManager; @@ -24285,7 +22339,6 @@ HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->prov HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideIncomingMessageObserver()Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideJobManager()Lorg/thoughtcrime/securesms/jobmanager/JobManager; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideMegaphoneRepository()Lorg/thoughtcrime/securesms/megaphone/MegaphoneRepository; -HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideMessageNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->providePendingRetryReceiptCache()Lorg/thoughtcrime/securesms/database/PendingRetryReceiptCache; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->providePendingRetryReceiptManager()Lorg/thoughtcrime/securesms/service/PendingRetryReceiptManager; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideProfileService(Lorg/signal/libsignal/zkgroup/profiles/ClientZkProfileOperations;Lorg/whispersystems/signalservice/api/SignalServiceMessageReceiver;Lorg/whispersystems/signalservice/api/SignalWebSocket;)Lorg/whispersystems/signalservice/api/services/ProfileService; @@ -24419,6 +22472,7 @@ 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; @@ -24509,8 +22563,6 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$emojiTree$2;->(Lorg/thoug 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; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$variationsToCanonical$2;->(Lorg/thoughtcrime/securesms/emoji/EmojiSource;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->(FLorg/thoughtcrime/securesms/emoji/EmojiData;Lkotlin/jvm/functions/Function1;)V @@ -24522,7 +22574,6 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getDecodeScale()F HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getEmojiTree()Lorg/thoughtcrime/securesms/components/emoji/parsing/EmojiTree; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getJumboPages()Ljava/util/Map; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getLatest()Lorg/thoughtcrime/securesms/emoji/EmojiSource; -HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getMaxEmojiLength()I HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getMetrics()Lorg/thoughtcrime/securesms/emoji/EmojiMetrics; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->getObsolete()Ljava/util/List; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource;->refresh()V @@ -24655,37 +22706,6 @@ HSPLorg/thoughtcrime/securesms/gcm/FcmFetchManager;->()V HSPLorg/thoughtcrime/securesms/gcm/FcmFetchManager;->()V HSPLorg/thoughtcrime/securesms/gcm/FcmFetchManager;->cancelMayHaveMessagesNotification(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/gcm/FcmFetchManager;->onForeground(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->()V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;Lkotlin/jvm/functions/Function1;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->setParentRecyclerTranslationY(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$$ExternalSyntheticLambda0;->(Ljava/util/Set;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->(II)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;I)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->attach(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;I)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->findFirstVisibleItemPositions(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)[I -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->findLastVisibleItemPositions(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)[I -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;->performPlaybackUpdate(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackPolicy;->maxSimultaneousPlaybackInConversation()I -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->()V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->(Landroid/widget/FrameLayout;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;)V -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->injectVideoViews(Landroid/content/Context;Landroidx/lifecycle/Lifecycle;Landroid/view/ViewGroup;I)Ljava/util/List; -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V -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;->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/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 -HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->setResizeMode(I)V HSPLorg/thoughtcrime/securesms/glide/BadgeLoader$Factory;->(Lokhttp3/OkHttpClient;)V HSPLorg/thoughtcrime/securesms/glide/BadgeLoader$Factory;->(Lokhttp3/OkHttpClient;Lorg/thoughtcrime/securesms/glide/BadgeLoader$Factory-IA;)V HSPLorg/thoughtcrime/securesms/glide/BadgeLoader;->createFactory()Lorg/thoughtcrime/securesms/glide/BadgeLoader$Factory; @@ -24740,9 +22760,6 @@ HSPLorg/thoughtcrime/securesms/groups/SelectionLimits$1;->()V HSPLorg/thoughtcrime/securesms/groups/SelectionLimits;->()V HSPLorg/thoughtcrime/securesms/groups/SelectionLimits;->(II)V HSPLorg/thoughtcrime/securesms/groups/SelectionLimits;->getHardLimit()I -HSPLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->()V -HSPLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->(Landroid/content/Context;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/jobmanager/AlarmManagerScheduler$$ExternalSyntheticLambda0;->()V HSPLorg/thoughtcrime/securesms/jobmanager/AlarmManagerScheduler$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/jobmanager/CompositeScheduler;->([Lorg/thoughtcrime/securesms/jobmanager/Scheduler;)V @@ -24881,24 +22898,24 @@ HSPLorg/thoughtcrime/securesms/jobmanager/JobLogger;->()V HSPLorg/thoughtcrime/securesms/jobmanager/JobLogger;->()V HSPLorg/thoughtcrime/securesms/jobmanager/JobLogger;->format(Lorg/thoughtcrime/securesms/jobmanager/Job;Ljava/lang/String;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/jobmanager/JobLogger;->format(Lorg/thoughtcrime/securesms/jobmanager/Job;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/jobmanager/JobController;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda0;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;Landroid/app/Application;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda10;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda14;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda14;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda15;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda15;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda17;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda11;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda16;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda16;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda17;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda17;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda5;->run()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda7;->()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda7;->shouldRunOnExecutor()Z -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda8;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda8;->onEmpty()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda9;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda9;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda19;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda19;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/jobmanager/JobController;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda1;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda6;->run()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda8;->()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda8;->shouldRunOnExecutor()Z +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda9;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda9;->onEmpty()V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;->(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Ljava/util/List;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;->enqueue()V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;->getJobListChain()Ljava/util/List; @@ -24923,13 +22940,13 @@ HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;->getJobStora HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;->getJobThreadCount()I HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;->getJobTracker()Lorg/thoughtcrime/securesms/jobmanager/JobTracker; HSPLorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;->getReservedJobRunners()Ljava/util/List; +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$88wGNi-R9qqqYZRd2q8yENxgty8(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$B0N_1IwVaEFBHupl4Ii7Rtasq5s(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$DYTfX8v0cQlWrG6BZ9230vJDgZM(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$LRMTzBAnZzMhc-JGu7V6yfyQyoc(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$XT2SMZJxrQFMSviwHBjZhWrZ8u4(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$bAbo4Wrv-lAy710xL25n75tW6EQ(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$g0KT-wHqpu8YO4Bvu-23NaTXOYA(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$f8CXlOogPUV2rL47HPh17prqg70(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$n2_WnBTSP7W-v9B5XsgvQbvhaaA(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$sAhOIfgF3Tsjgqk6ejbaAJGNqJA(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->$r8$lambda$tbQpu2orId1zOGFwRjHuKH7CxGc(Lorg/thoughtcrime/securesms/jobmanager/JobManager;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->-$$Nest$menqueueChain(Lorg/thoughtcrime/securesms/jobmanager/JobManager;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->()V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->(Landroid/app/Application;Lorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;)V @@ -24937,12 +22954,12 @@ HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->add(Lorg/thoughtcrime/sec HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->addOnEmptyQueueListener(Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->beginJobLoop()V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->enqueueChain(Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$addOnEmptyQueueListener$10(Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$addOnEmptyQueueListener$11(Lorg/thoughtcrime/securesms/jobmanager/JobManager$EmptyQueueListener;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$beginJobLoop$1()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$enqueueChain$12(Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$enqueueChain$13(Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$new$0(Lorg/thoughtcrime/securesms/jobmanager/JobManager$Configuration;Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$onEmptyQueue$13()V -HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$runOnExecutor$14(Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$onEmptyQueue$14()V +HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->lambda$runOnExecutor$15(Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->onConstraintMet(Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->onEmptyQueue()V HSPLorg/thoughtcrime/securesms/jobmanager/JobManager;->runOnExecutor(Ljava/lang/Runnable;)V @@ -24998,7 +23015,6 @@ HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->build()Lorg/thou HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->putBoolean(Ljava/lang/String;Z)Lorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder; HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->putLong(Ljava/lang/String;J)Lorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder; HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->putString(Ljava/lang/String;Ljava/lang/String;)Lorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder; -HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->putStringListAsArray(Ljava/lang/String;Ljava/util/List;)Lorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder; HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->serialize()[B HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData;->()V HSPLorg/thoughtcrime/securesms/jobmanager/JsonJobData;->(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V @@ -25344,6 +23360,7 @@ HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getJobCountForFactory(Ljava 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; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getSingleLayerOfDependencySpecsThatDependOnJob(Ljava/lang/String;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->hasEligibleRunTime(Lorg/thoughtcrime/securesms/jobmanager/persistence/JobSpec;J)Z HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->init()V @@ -25464,7 +23481,8 @@ HSPLorg/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob;->()V HSPLorg/thoughtcrime/securesms/jobs/PnpInitializeDevicesJob;->enqueueIfNecessary()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->create()Lorg/thoughtcrime/securesms/jobs/PreKeysSyncJob; +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->create$default(Lorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;ZILjava/lang/Object;)Lorg/thoughtcrime/securesms/jobs/PreKeysSyncJob; +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->create(Z)Lorg/thoughtcrime/securesms/jobs/PreKeysSyncJob; HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->enqueue()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Companion;->enqueueIfNeeded()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Factory;->()V @@ -25472,9 +23490,10 @@ HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Factory;->create(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;[B)Lorg/thoughtcrime/securesms/jobmanager/Job; HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob$Factory;->create(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;[B)Lorg/thoughtcrime/securesms/jobs/PreKeysSyncJob; HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->()V -HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->()V -HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;)V -HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;Z)V +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;ZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(Z)V +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->(ZILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->access$getTAG$cp()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->enqueue()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->enqueueIfNeeded()V @@ -25483,7 +23502,7 @@ HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->onFailure()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->onRun()V HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->onShouldRetry(Ljava/lang/Exception;)Z HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->serialize()[B -HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->syncPreKeys(Lorg/whispersystems/signalservice/api/push/ServiceIdType;Lorg/whispersystems/signalservice/api/push/ServiceId;Lorg/whispersystems/signalservice/api/SignalServiceAccountDataStore;Lorg/thoughtcrime/securesms/crypto/storage/PreKeyMetadataStore;)V +HSPLorg/thoughtcrime/securesms/jobs/PreKeysSyncJob;->syncPreKeys(Lorg/whispersystems/signalservice/api/push/ServiceIdType;Lorg/whispersystems/signalservice/api/push/ServiceId;Lorg/whispersystems/signalservice/api/SignalServiceAccountDataStore;Lorg/thoughtcrime/securesms/crypto/storage/PreKeyMetadataStore;Z)V HSPLorg/thoughtcrime/securesms/jobs/ProfileKeySendJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ProfileUploadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ProfileUploadJob$Factory;->create(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;[B)Lorg/thoughtcrime/securesms/jobmanager/Job; @@ -25549,18 +23568,12 @@ HSPLorg/thoughtcrime/securesms/jobs/ResumableUploadSpecJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->enqueue(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->enqueueRoutineFetchIfNecessary()V -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->forRecipients(Ljava/util/Set;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->()V -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->(Ljava/util/Set;)V -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;Ljava/util/Set;)V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->access$getTAG$cp()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->enqueueRoutineFetchIfNecessary()V -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->getFactoryKey()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->serialize()[B HSPLorg/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob$Companion;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob$Companion;->enqueue$default(Lorg/thoughtcrime/securesms/jobs/RetrieveRemoteAnnouncementsJob$Companion;ZILjava/lang/Object;)V @@ -25649,21 +23662,27 @@ HSPLorg/thoughtcrime/securesms/jobs/ThreadUpdateJob;->onRun()V HSPLorg/thoughtcrime/securesms/jobs/ThreadUpdateJob;->serialize()[B HSPLorg/thoughtcrime/securesms/jobs/TrimThreadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/TypingSendJob$Factory;->()V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->$values()[Lorg/thoughtcrime/securesms/keyboard/KeyboardPage; -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->()V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->values()[Lorg/thoughtcrime/securesms/keyboard/KeyboardPage; -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;)V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel$$ExternalSyntheticLambda0;->onResult(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->$r8$lambda$XJkrNaIPPzC8wWYTIkWhYRIl3fM(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;Ljava/lang/Boolean;)V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->()V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->()V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->_init_$lambda$1(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;Ljava/lang/Boolean;)V -HSPLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->switchToPage(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V -HSPLorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;->()V -HSPLorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;->(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1;->(Lcom/squareup/wire/FieldEncoding;Lkotlin/reflect/KClass;Lcom/squareup/wire/Syntax;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1;->decode(Lcom/squareup/wire/ProtoReader;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1;->decode(Lcom/squareup/wire/ProtoReader;)Lorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData; +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1;->encode(Lcom/squareup/wire/ReverseProtoWriter;Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1;->encode(Lcom/squareup/wire/ReverseProtoWriter;Lorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion;->()V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData;->()V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData;->(ZLokio/ByteString;)V +HSPLorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData;->(ZLokio/ByteString;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$Companion;->()V HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState$Companion;->()V +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState$Companion;->deserialize(J)Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState; +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->$values()[Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState; +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->()V +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->(Ljava/lang/String;IJ)V +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->access$getValue$p(Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;)J +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->serialize()J +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState;->values()[Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState; HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$aciPreKeys$1;->()V HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$aciPreKeys$1;->(Lorg/thoughtcrime/securesms/keyvalue/AccountValues;)V HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues$aciPreKeys$1;->getNextKyberPreKeyId()I @@ -25704,6 +23723,7 @@ HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->getPniRegistrationId()I HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->getRegistrationId()I HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->getServicePassword()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->getUsername()Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->getUsernameSyncState()Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState; HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->hasAciIdentityKey()Z HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->hasPniIdentityKey()Z HSPLorg/thoughtcrime/securesms/keyvalue/AccountValues;->hasStringData(Landroid/content/SharedPreferences;Ljava/lang/String;)Z @@ -25789,7 +23809,6 @@ HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->callingDisableLBRed()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->forceBuiltInEmoji()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->isWebsocketModeForced()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->shakeToReport()Z -HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->useConversationItemV2Media()Z HSPLorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration;->$values()[Lorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration; HSPLorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration;->()V HSPLorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration;->(Ljava/lang/String;IIIJ)V @@ -25887,7 +23906,6 @@ HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDisc HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->()V HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->deserialize(I)Lorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode; -HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->isDiscoverable()Z HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->serialize()I HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode;->values()[Lorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues$PhoneNumberDiscoverabilityMode; HSPLorg/thoughtcrime/securesms/keyvalue/PhoneNumberPrivacyValues;->()V @@ -25935,12 +23953,9 @@ HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->(Lorg/thoughtcrim HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getCensorshipCircumventionEnabled()Lorg/thoughtcrime/securesms/keyvalue/SettingsValues$CensorshipCircumventionEnabled; HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getKeepMessagesDuration()Lorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration; HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getLanguage()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageFontSize()I HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageLedColor()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageNotificationSound()Landroid/net/Uri; -HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageNotificationsPrivacy()Lorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference; HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getTheme()Lorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme; -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;->isMessageNotificationsEnabled()Z @@ -26028,11 +24043,11 @@ HSPLorg/thoughtcrime/securesms/keyvalue/TooltipValues;->(Lorg/thoughtcrime HSPLorg/thoughtcrime/securesms/keyvalue/UiHints;->(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)V HSPLorg/thoughtcrime/securesms/keyvalue/UiHints;->canDisplayPullToFilterTip()Z HSPLorg/thoughtcrime/securesms/keyvalue/UiHints;->getNeverDisplayPullToFilterTip()I +HSPLorg/thoughtcrime/securesms/keyvalue/UiHints;->hasCompletedUsernameOnboarding()Z HSPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->()V HSPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)V HSPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->getCurrentWallpaper()Lorg/thoughtcrime/securesms/database/model/databaseprotos/Wallpaper; HSPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->getWallpaper()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; -HSPLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->hasWallpaperSet()Z HSPLorg/thoughtcrime/securesms/logging/CustomSignalProtocolLogger;->()V HSPLorg/thoughtcrime/securesms/logging/CustomSignalProtocolLogger;->log(ILjava/lang/String;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$Companion;->()V @@ -26135,6 +24150,11 @@ HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->-$$Nest$fgetstyle(L HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->-$$Nest$fgettitleText(Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;)Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Lorg/thoughtcrime/securesms/megaphone/Megaphone$Style;)V HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->build()Lorg/thoughtcrime/securesms/megaphone/Megaphone; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->setActionButton(ILorg/thoughtcrime/securesms/megaphone/Megaphone$EventListener;)Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->setBody(I)Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->setImage(I)Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->setSecondaryButton(ILorg/thoughtcrime/securesms/megaphone/Megaphone$EventListener;)Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Builder;->setTitle(I)Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Style;->$values()[Lorg/thoughtcrime/securesms/megaphone/Megaphone$Style; HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Style;->()V HSPLorg/thoughtcrime/securesms/megaphone/Megaphone$Style;->(Ljava/lang/String;I)V @@ -26180,27 +24200,36 @@ HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneRepository;->markFinished(Lorg HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneRepository;->markVisible(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;)V HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneRepository;->onAppForegrounded()V HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneRepository;->resetDatabaseCache()V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText$Companion;->()V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText$Companion;->from(I)Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->()V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->(ILjava/lang/String;)V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->(ILjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->from(I)Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder$1;->()V HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder;->build(Landroid/content/Context;Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)Landroid/view/View; HSPLorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder;->buildOnboardingMegaphone(Landroid/content/Context;Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)Landroid/view/View; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda17;->(Ljava/util/Map;J)V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda17;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda18;->()V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda18;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda19;->(Ljava/util/Map;)V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda19;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda20;->(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda0;->()V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda19;->(Ljava/util/Map;J)V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda19;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda1;->()V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda20;->()V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda20;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda2;->()V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda2;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;)V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda3;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda21;->(Ljava/util/Map;)V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda21;->apply(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda22;->(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda22;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda4;->()V -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda5;->()V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda4;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;)V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda5;->test(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda6;->()V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda6;->apply(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda7;->()V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda7;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda8;->()V +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda8;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$1;->(Landroid/content/Context;Ljava/util/Map;)V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$3;->()V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$Event;->$values()[Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event; @@ -26210,11 +24239,11 @@ HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$Event;->fromKey(Ljava/lang/S HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$Event;->getKey()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$Event;->hasKey(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones$Event;->values()[Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$7er3eAvNtTug89CSaqVr7SviZ90(Ljava/lang/Long;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$I70uX1Te7WxnEGzx3tWwyzNiUZA(Ljava/util/Map$Entry;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$Rs6Jyq6dKzpIcD33grkTfugc0n4(Ljava/util/Map$Entry;)Ljava/lang/Long; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$PIMhmmzwnmuRXoXqQmaSjV_KAVA(Ljava/util/Map$Entry;)Ljava/lang/Long; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$YpoSl2MBeUbMiv4CB5UIXMEi5Dk(Ljava/lang/Long;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$iF2prwdoNwztORLiNF2IU1hb4Xg(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Ljava/util/Map$Entry;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$iZmqBQeABnviaUaUIqqXo5ljPj8(Ljava/util/Map$Entry;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$jKOYs4kAlzGKOSd0Gb2wil_axMM(Ljava/util/Map;JLjava/util/Map$Entry;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$lDKTYWhRKrjSYBJT-OUhfMkGgvY(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Ljava/util/Map$Entry;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->$r8$lambda$ya9b6y2SFOc06_b4NHtqa2lYZ44(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MegaphoneRecord;)Lorg/thoughtcrime/securesms/megaphone/Megaphone; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$sfgetALWAYS()Lorg/thoughtcrime/securesms/megaphone/MegaphoneSchedule; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$sfgetNEVER()Lorg/thoughtcrime/securesms/megaphone/MegaphoneSchedule; @@ -26223,54 +24252,36 @@ HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowBackup HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowGrantFullScreenIntentPermission(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowNotificationsMegaphone(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowOnboardingMegaphone(Landroid/content/Context;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowPnpLaunchMegaphone()Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowRemoteMegaphone(Ljava/util/Map;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowSetUpYourUsernameMegaphone(Ljava/util/Map;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->-$$Nest$smshouldShowTurnOffCircumventionMegaphone()Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->()V HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->buildDisplayOrder(Landroid/content/Context;Ljava/util/Map;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->buildOnboardingMegaphone()Lorg/thoughtcrime/securesms/megaphone/Megaphone; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->buildPnpLaunchMegaphone()Lorg/thoughtcrime/securesms/megaphone/Megaphone; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->forRecord(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MegaphoneRecord;)Lorg/thoughtcrime/securesms/megaphone/Megaphone; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->getNextMegaphone(Landroid/content/Context;Ljava/util/Map;)Lorg/thoughtcrime/securesms/megaphone/Megaphone; HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$getNextMegaphone$0(Ljava/util/Map;JLjava/util/Map$Entry;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$getNextMegaphone$1(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MegaphoneRecord;)Lorg/thoughtcrime/securesms/megaphone/Megaphone; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$21(Ljava/util/Map$Entry;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$22(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Ljava/util/Map$Entry;)Z -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$23(Ljava/util/Map$Entry;)Ljava/lang/Long; -HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$24(Ljava/lang/Long;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$23(Ljava/util/Map$Entry;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$24(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Ljava/util/Map$Entry;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$25(Ljava/util/Map$Entry;)Ljava/lang/Long; +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->lambda$timeSinceLastDonatePrompt$26(Ljava/lang/Long;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowAddAProfilePhotoMegaphone(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowBackupSchedulePermissionMegaphone(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowGrantFullScreenIntentPermission(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowNotificationsMegaphone(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowOnboardingMegaphone(Landroid/content/Context;)Z +HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowPnpLaunchMegaphone()Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowRemoteMegaphone(Ljava/util/Map;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowSetUpYourUsernameMegaphone(Ljava/util/Map;)Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->shouldShowTurnOffCircumventionMegaphone()Z HSPLorg/thoughtcrime/securesms/megaphone/Megaphones;->timeSinceLastDonatePrompt(Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event;Ljava/util/Map;)J -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$AddPhotoCardViewHolder;->(Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$AddPhotoCardViewHolder;->getBackgroundColor()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$AddPhotoCardViewHolder;->getButtonStringRes()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$AddPhotoCardViewHolder;->getImageRes()I HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)V HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->buildData()Ljava/util/List; HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->getItemCount()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->getItemId(I)J -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->getItemViewType(I)I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->onBindViewHolder(Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder;I)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder; -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$ActionClickListener;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder;Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$ActionClickListener;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder;->(Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder;->bind(Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$ActionClickListener;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$GroupCardViewHolder;->(Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$GroupCardViewHolder;->getBackgroundColor()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$GroupCardViewHolder;->getButtonStringRes()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$GroupCardViewHolder;->getImageRes()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$InviteCardViewHolder;->(Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$InviteCardViewHolder;->getBackgroundColor()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$InviteCardViewHolder;->getButtonStringRes()I -HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$InviteCardViewHolder;->getImageRes()I +HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView;->-$$Nest$sfgetTAG()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView;->()V HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView;->initialize(Landroid/content/Context;)V @@ -26304,27 +24315,6 @@ HSPLorg/thoughtcrime/securesms/megaphone/SignalPinReminderSchedule;->()V HSPLorg/thoughtcrime/securesms/megaphone/SignalPinReminderSchedule;->shouldDisplay(IJJJ)Z HSPLorg/thoughtcrime/securesms/messageprocessingalarm/RoutineMessageFetchReceiver;->()V HSPLorg/thoughtcrime/securesms/messageprocessingalarm/RoutineMessageFetchReceiver;->startOrUpdateAlarm(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/messagerequests/GroupInfo$Companion;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/GroupInfo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->(IILjava/lang/String;Z)V -HSPLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->(IILjava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/messagerequests/GroupInfo;Ljava/util/List;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;)V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->(Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->getMessageRequestState(Lorg/thoughtcrime/securesms/recipients/Recipient;J)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->getRecipientInfo(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo; -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$Companion;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->$values()[Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State; -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->()V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->()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 HSPLorg/thoughtcrime/securesms/messages/IncomingMessageObserver$2;->(Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver;)V @@ -26434,6 +24424,8 @@ HSPLorg/thoughtcrime/securesms/migrations/PinOptOutMigration$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/PinReminderMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/PniMigrationJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/migrations/PnpLaunchMigrationJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/migrations/PnpLaunchMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/PreKeysSyncMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/PreKeysSyncMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/ProfileMigrationJob$Factory;->()V @@ -26466,20 +24458,16 @@ HSPLorg/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/UserNotificationMigrationJob$Factory;->()V HSPLorg/thoughtcrime/securesms/migrations/UuidMigrationJob$Factory;->()V -HSPLorg/thoughtcrime/securesms/mms/AttachmentManager;->()V -HSPLorg/thoughtcrime/securesms/mms/AttachmentManager;->(Landroid/content/Context;Landroid/view/View;Lorg/thoughtcrime/securesms/mms/AttachmentManager$AttachmentListener;)V HSPLorg/thoughtcrime/securesms/mms/AttachmentStreamUriLoader$Factory;->()V HSPLorg/thoughtcrime/securesms/mms/DecryptableStreamUriLoader$Factory;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/mms/ImageSlide;->()V HSPLorg/thoughtcrime/securesms/mms/ImageSlide;->(Lorg/thoughtcrime/securesms/attachments/Attachment;)V HSPLorg/thoughtcrime/securesms/mms/ImageSlide;->hasImage()Z -HSPLorg/thoughtcrime/securesms/mms/ImageSlide;->hasPlaceholder()Z -HSPLorg/thoughtcrime/securesms/mms/ImageSlide;->isBorderless()Z HSPLorg/thoughtcrime/securesms/mms/IncomingMessage$Companion;->()V HSPLorg/thoughtcrime/securesms/mms/IncomingMessage$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->()V -HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->(Lorg/thoughtcrime/securesms/database/MessageType;Lorg/thoughtcrime/securesms/recipients/RecipientId;JJJLorg/thoughtcrime/securesms/groups/GroupId;Lorg/thoughtcrime/securesms/mms/MessageGroupContext;Ljava/lang/String;Lorg/thoughtcrime/securesms/database/model/StoryType;Lorg/thoughtcrime/securesms/database/model/ParentStoryId;ZIJLorg/thoughtcrime/securesms/mms/QuoteModel;ZZLjava/lang/String;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge;)V -HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->(Lorg/thoughtcrime/securesms/database/MessageType;Lorg/thoughtcrime/securesms/recipients/RecipientId;JJJLorg/thoughtcrime/securesms/groups/GroupId;Lorg/thoughtcrime/securesms/mms/MessageGroupContext;Ljava/lang/String;Lorg/thoughtcrime/securesms/database/model/StoryType;Lorg/thoughtcrime/securesms/database/model/ParentStoryId;ZIJLorg/thoughtcrime/securesms/mms/QuoteModel;ZZLjava/lang/String;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->(Lorg/thoughtcrime/securesms/database/MessageType;Lorg/thoughtcrime/securesms/recipients/RecipientId;JJJLorg/thoughtcrime/securesms/groups/GroupId;Lorg/thoughtcrime/securesms/mms/MessageGroupContext;Ljava/lang/String;Lorg/thoughtcrime/securesms/database/model/StoryType;Lorg/thoughtcrime/securesms/database/model/ParentStoryId;ZIJLorg/thoughtcrime/securesms/mms/QuoteModel;ZZLjava/lang/String;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge;Lorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras;)V +HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->(Lorg/thoughtcrime/securesms/database/MessageType;Lorg/thoughtcrime/securesms/recipients/RecipientId;JJJLorg/thoughtcrime/securesms/groups/GroupId;Lorg/thoughtcrime/securesms/mms/MessageGroupContext;Ljava/lang/String;Lorg/thoughtcrime/securesms/database/model/StoryType;Lorg/thoughtcrime/securesms/database/model/ParentStoryId;ZIJLorg/thoughtcrime/securesms/mms/QuoteModel;ZZLjava/lang/String;Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge;Lorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getAttachments()Ljava/util/List; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getBody()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getExpiresIn()J @@ -26487,6 +24475,7 @@ HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getFrom()Lorg/thoughtcrime/ HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getGiftBadge()Lorg/thoughtcrime/securesms/database/model/databaseprotos/GiftBadge; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getLinkPreviews()Ljava/util/List; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getMentions()Ljava/util/List; +HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getMessageExtras()Lorg/thoughtcrime/securesms/database/model/databaseprotos/MessageExtras; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getMessageRanges()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getParentStoryId()Lorg/thoughtcrime/securesms/database/model/ParentStoryId; HSPLorg/thoughtcrime/securesms/mms/IncomingMessage;->getQuote()Lorg/thoughtcrime/securesms/mms/QuoteModel; @@ -26520,37 +24509,19 @@ HSPLorg/thoughtcrime/securesms/mms/SignalGlideModule;->applyOptions(Landroid/con HSPLorg/thoughtcrime/securesms/mms/SignalGlideModule;->registerComponents(Landroid/content/Context;Lcom/bumptech/glide/Glide;Lcom/bumptech/glide/Registry;)V HSPLorg/thoughtcrime/securesms/mms/SignalGlideModule;->setRegisterGlideComponents(Lorg/thoughtcrime/securesms/mms/RegisterGlideComponents;)V HSPLorg/thoughtcrime/securesms/mms/Slide;->(Lorg/thoughtcrime/securesms/attachments/Attachment;)V -HSPLorg/thoughtcrime/securesms/mms/Slide;->asAttachment()Lorg/thoughtcrime/securesms/attachments/Attachment; -HSPLorg/thoughtcrime/securesms/mms/Slide;->getBody()Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/mms/Slide;->getCaption()Lj$/util/Optional; HSPLorg/thoughtcrime/securesms/mms/Slide;->getContentType()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/mms/Slide;->getFileSize()J -HSPLorg/thoughtcrime/securesms/mms/Slide;->getPlaceholderBlur()Lorg/thoughtcrime/securesms/blurhash/BlurHash; -HSPLorg/thoughtcrime/securesms/mms/Slide;->getTransferState()I HSPLorg/thoughtcrime/securesms/mms/Slide;->getUri()Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/mms/Slide;->hasAudio()Z HSPLorg/thoughtcrime/securesms/mms/Slide;->hasDocument()Z HSPLorg/thoughtcrime/securesms/mms/Slide;->hasSticker()Z HSPLorg/thoughtcrime/securesms/mms/Slide;->hasVideo()Z -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; HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getDocumentSlide()Lorg/thoughtcrime/securesms/mms/DocumentSlide; HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getSlides()Ljava/util/List; HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getStickerSlide()Lorg/thoughtcrime/securesms/mms/StickerSlide; -HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getTextSlide()Lorg/thoughtcrime/securesms/mms/TextSlide; HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getThumbnailSlide()Lorg/thoughtcrime/securesms/mms/Slide; -HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getThumbnailSlides()Ljava/util/List; -HSPLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->$values()[Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; -HSPLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->()V -HSPLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->(Ljava/lang/String;ILjava/lang/String;)V -HSPLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->from(Ljava/lang/String;)Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; HSPLorg/thoughtcrime/securesms/net/ContentProxySafetyInterceptor;->()V HSPLorg/thoughtcrime/securesms/net/ContentProxySafetyInterceptor;->()V HSPLorg/thoughtcrime/securesms/net/ContentProxySelector$1;->(Lorg/thoughtcrime/securesms/net/ContentProxySelector;I)V @@ -26640,9 +24611,6 @@ HSPLorg/thoughtcrime/securesms/notifications/NotificationChannels;->onUpgrade(La HSPLorg/thoughtcrime/securesms/notifications/NotificationChannels;->setLedPreference(Landroid/app/NotificationChannel;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/notifications/NotificationChannels;->setVibrationEnabled(Landroid/app/NotificationChannel;Z)V HSPLorg/thoughtcrime/securesms/notifications/NotificationChannels;->supported()Z -HSPLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->(Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->getNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; -HSPLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->setVisibleThread(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)V HSPLorg/thoughtcrime/securesms/notifications/SlowNotificationHeuristics;->()V HSPLorg/thoughtcrime/securesms/notifications/SlowNotificationHeuristics;->()V HSPLorg/thoughtcrime/securesms/notifications/SlowNotificationHeuristics;->getConfiguration()Lorg/thoughtcrime/securesms/notifications/Configuration; @@ -26673,28 +24641,6 @@ HSPLorg/thoughtcrime/securesms/notifications/profiles/NotificationProfiles;->()V HSPLorg/thoughtcrime/securesms/notifications/profiles/NotificationProfiles;->getActiveProfile$default(Ljava/util/List;JLj$/time/ZoneId;ILjava/lang/Object;)Lorg/thoughtcrime/securesms/notifications/profiles/NotificationProfile; HSPLorg/thoughtcrime/securesms/notifications/profiles/NotificationProfiles;->getActiveProfile(Ljava/util/List;JLj$/time/ZoneId;)Lorg/thoughtcrime/securesms/notifications/profiles/NotificationProfile; -HSPLorg/thoughtcrime/securesms/notifications/v2/CancelableExecutor;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->forConversation(J)Lorg/thoughtcrime/securesms/notifications/v2/ConversationId; -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Creator;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->(JLjava/lang/Long;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->hashCode()I -HSPLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->(Landroid/app/Application;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->setVisibleThread(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->getEMPTY()Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$messageCount$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationIds$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationItems$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->()V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V -HSPLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->access$getEMPTY$cp()Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; HSPLorg/thoughtcrime/securesms/permissions/Permissions$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/permissions/Permissions$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/permissions/Permissions;->$r8$lambda$Q0AcdMcPXUgr1QQ_HDTcoSx0sHo(Landroid/content/Context;Ljava/lang/String;)Z @@ -26705,8 +24651,6 @@ HSPLorg/thoughtcrime/securesms/permissions/Permissions;->lambda$hasAll$2(Landroi HSPLorg/thoughtcrime/securesms/pin/SvrRepository;->()V HSPLorg/thoughtcrime/securesms/pin/SvrRepository;->()V HSPLorg/thoughtcrime/securesms/pin/SvrRepository;->onRegistrationComplete(Lorg/whispersystems/signalservice/api/kbs/MasterKey;Ljava/lang/String;ZZ)V -HSPLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->(Ljava/lang/String;)V -HSPLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->toString()Ljava/lang/String; 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; @@ -26724,7 +24668,6 @@ HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->$r8$lambda$pNHvm3E5R2_hKbt HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->()V HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->(Ljava/lang/String;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->asGiven(Ljava/lang/String;)Lorg/thoughtcrime/securesms/profiles/ProfileName; -HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->equals(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->fromParts(Ljava/lang/String;Ljava/lang/String;)Lorg/thoughtcrime/securesms/profiles/ProfileName; HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->getFamilyName()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/profiles/ProfileName;->getGivenName()Ljava/lang/String; @@ -26840,12 +24783,9 @@ HSPLorg/thoughtcrime/securesms/ratelimit/RateLimitUtil;->()V HSPLorg/thoughtcrime/securesms/ratelimit/RateLimitUtil;->retryAllRateLimitedMessages(Landroid/content/Context;)V 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$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda4;->()V -HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda4;->contentsMatch(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda5;->()V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda5;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda6;->()V @@ -26857,8 +24797,6 @@ HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->get()Lorg/thoughtcrime HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->getId()Lorg/thoughtcrime/securesms/recipients/RecipientId; HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->getLiveData()Landroidx/lifecycle/LiveData; HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$new$2(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Object;)Lorg/thoughtcrime/securesms/recipients/Recipient; -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; @@ -26913,9 +24851,7 @@ HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getBadges()Ljava/util/List HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getContactPhoto()Lorg/thoughtcrime/securesms/contacts/avatars/ContactPhoto; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getDisplayName(Landroid/content/Context;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getDisplayNameOrUsername(Landroid/content/Context;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getE164()Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getExpiresInSeconds()I HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getFallbackContactPhoto(Lorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;I)Lorg/thoughtcrime/securesms/contacts/avatars/FallbackContactPhoto; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getFallbackContactPhotoDrawable(Landroid/content/Context;ZLorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;I)Landroid/graphics/drawable/Drawable; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getGroupName(Landroid/content/Context;)Ljava/lang/String; @@ -26927,12 +24863,9 @@ HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getProfileKey()[B HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getProfileName()Lorg/thoughtcrime/securesms/profiles/ProfileName; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getRegistered()Lorg/thoughtcrime/securesms/database/RecipientTable$RegisteredState; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getServiceId()Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getSmallFallbackContactPhotoDrawable(Landroid/content/Context;ZLorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;I)Landroid/graphics/drawable/Drawable; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->getWallpaper()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->hasE164()Z -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->hasSameContent(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->hasServiceId()Z -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->hasWallpaper()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->hashCode()I HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isBlocked()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isCallLink()Z @@ -26945,16 +24878,12 @@ HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isMuted()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isMyStory()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isProfileSharing()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isPushGroup()Z -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isPushV1Group()Z -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isPushV2Group()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isRegistered()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isReleaseNotes()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isResolving()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isSelf()Z -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->isSystemContact()Z HSPLorg/thoughtcrime/securesms/recipients/Recipient;->live()Lorg/thoughtcrime/securesms/recipients/LiveRecipient; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->live(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/recipients/LiveRecipient; -HSPLorg/thoughtcrime/securesms/recipients/Recipient;->observable(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->requireE164()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->requireServiceId()Lorg/whispersystems/signalservice/api/push/ServiceId; HSPLorg/thoughtcrime/securesms/recipients/Recipient;->resolve()Lorg/thoughtcrime/securesms/recipients/Recipient; @@ -27005,10 +24934,7 @@ HSPLorg/thoughtcrime/securesms/recipients/RecipientIdCache;->get(Lorg/whispersys HSPLorg/thoughtcrime/securesms/recipients/RecipientIdCache;->put(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/recipients/RecipientIdCache;->put(Lorg/thoughtcrime/securesms/recipients/RecipientId;Ljava/lang/String;Lorg/whispersystems/signalservice/api/push/ServiceId;)V HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->()V -HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isLegacyProfileSharingAccepted(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z -HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isMessageRequestAccepted(Landroid/content/Context;J)Z HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isMessageRequestAccepted(Ljava/lang/Long;Lorg/thoughtcrime/securesms/recipients/Recipient;)Z -HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isRecipientHidden(J)Z HSPLorg/thoughtcrime/securesms/recipients/RecipientUtil;->toSignalServiceAddress(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; HSPLorg/thoughtcrime/securesms/registration/RegistrationData;->()V HSPLorg/thoughtcrime/securesms/registration/RegistrationData;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILorg/signal/libsignal/zkgroup/profiles/ProfileKey;Ljava/lang/String;ILjava/lang/String;)V @@ -27150,13 +25076,6 @@ HSPLorg/thoughtcrime/securesms/shakereport/ShakeToReport;->(Landroid/app/A HSPLorg/thoughtcrime/securesms/shakereport/ShakeToReport;->enable()V HSPLorg/thoughtcrime/securesms/shakereport/ShakeToReport;->registerActivity(Landroidx/appcompat/app/AppCompatActivity;)V HSPLorg/thoughtcrime/securesms/stickers/StickerRemoteUriLoader$Factory;->()V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository;Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository$$ExternalSyntheticLambda0;->run()V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->$r8$lambda$WI32balUk_XG4AC9j0YR1mfsJE0(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository;Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->()V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->getStickerFeatureAvailability(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->getStickerFeatureAvailabilitySync()Ljava/lang/Boolean; -HSPLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->lambda$getStickerFeatureAvailability$2(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V HSPLorg/thoughtcrime/securesms/storage/StorageSyncHelper$$ExternalSyntheticLambda0;->()V HSPLorg/thoughtcrime/securesms/storage/StorageSyncHelper$$ExternalSyntheticLambda0;->generate()[B HSPLorg/thoughtcrime/securesms/storage/StorageSyncHelper;->$r8$lambda$Qu9GyOxIHYeSe2KLWGmWWrZGbxY()[B @@ -27368,7 +25287,6 @@ HSPLorg/thoughtcrime/securesms/util/CachedInflater;->cacheUntilLimit(ILandroid/v HSPLorg/thoughtcrime/securesms/util/CachedInflater;->clear()V HSPLorg/thoughtcrime/securesms/util/CachedInflater;->from(Landroid/content/Context;)Lorg/thoughtcrime/securesms/util/CachedInflater; HSPLorg/thoughtcrime/securesms/util/CachedInflater;->inflate(ILandroid/view/ViewGroup;Z)Landroid/view/View; -HSPLorg/thoughtcrime/securesms/util/CharacterCalculator;->()V HSPLorg/thoughtcrime/securesms/util/ConfigurationUtil;->getFontScale(Landroid/content/res/Configuration;)F HSPLorg/thoughtcrime/securesms/util/ConfigurationUtil;->getNightModeConfiguration(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/ConfigurationUtil;->getNightModeConfiguration(Landroid/content/res/Configuration;)I @@ -27376,25 +25294,16 @@ HSPLorg/thoughtcrime/securesms/util/ContextUtil;->requireDrawable(Landroid/conte HSPLorg/thoughtcrime/securesms/util/ConversationShortcutPhoto$Loader$Factory;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->()V HSPLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->()V -HSPLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->invoke()Ljava/text/SimpleDateFormat; HSPLorg/thoughtcrime/securesms/util/DateUtils;->()V HSPLorg/thoughtcrime/securesms/util/DateUtils;->()V HSPLorg/thoughtcrime/securesms/util/DateUtils;->getBriefRelativeTimeSpanString(Landroid/content/Context;Ljava/util/Locale;J)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/util/DateUtils;->getConversationDateHeaderString(Landroid/content/Context;Ljava/util/Locale;J)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/util/DateUtils;->getDatelessRelativeTimeSpanFormattedDate(Landroid/content/Context;Ljava/util/Locale;J)Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate; -HSPLorg/thoughtcrime/securesms/util/DateUtils;->getSameDayDateFormat()Ljava/text/SimpleDateFormat; HSPLorg/thoughtcrime/securesms/util/DateUtils;->isNow(J)Z -HSPLorg/thoughtcrime/securesms/util/DateUtils;->isSameDay(JJ)Z -HSPLorg/thoughtcrime/securesms/util/DateUtils;->isSameExtendedRelativeTimestamp(JJ)Z HSPLorg/thoughtcrime/securesms/util/DateUtils;->isWithin-HG0u8IE(JJ)Z HSPLorg/thoughtcrime/securesms/util/Debouncer;->(J)V HSPLorg/thoughtcrime/securesms/util/Debouncer;->(JLjava/util/concurrent/TimeUnit;)V HSPLorg/thoughtcrime/securesms/util/Debouncer;->publish(Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->(Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->getValue()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->postValue(Ljava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->setValue(Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/util/Deferred;->()V HSPLorg/thoughtcrime/securesms/util/Deferred;->executeIfNecessary()V HSPLorg/thoughtcrime/securesms/util/Deferred;->isDeferred()Z @@ -27431,7 +25340,6 @@ HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->getDefaultMaxBackoff()J HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->getInteger(Ljava/lang/String;I)I HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->getLong(Ljava/lang/String;J)J HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->gifSearchAvailable()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->groupLimits()Lorg/thoughtcrime/securesms/groups/SelectionLimits; HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->init()V HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->instantVideoPlayback()Z @@ -27439,12 +25347,10 @@ HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->internalUser()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->mapToJson(Ljava/util/Map;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->okHttpAutomaticRetry()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->parseStoredConfig(Ljava/lang/String;)Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->phoneNumberPrivacy()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->refreshIfNecessary()V HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->retryReceipts()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->retryRespondMaxAge()J HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->triggerFlagChangeListeners(Ljava/util/Map;)V -HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->usernames()Z HSPLorg/thoughtcrime/securesms/util/FrameRateTracker$1;->(Lorg/thoughtcrime/securesms/util/FrameRateTracker;)V HSPLorg/thoughtcrime/securesms/util/FrameRateTracker$1;->doFrame(J)V HSPLorg/thoughtcrime/securesms/util/FrameRateTracker;->-$$Nest$fgetbadFrameThresholdNanos(Lorg/thoughtcrime/securesms/util/FrameRateTracker;)J @@ -27459,13 +25365,6 @@ HSPLorg/thoughtcrime/securesms/util/FrameRateTracker;->(Landroid/app/Appli HSPLorg/thoughtcrime/securesms/util/FrameRateTracker;->getDisplayRefreshRate(Landroid/content/Context;)F HSPLorg/thoughtcrime/securesms/util/FrameRateTracker;->start()V HSPLorg/thoughtcrime/securesms/util/FrameRateTracker;->updateRefreshRate()V -HSPLorg/thoughtcrime/securesms/util/FullscreenHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowManager$LayoutParams;I)V -HSPLorg/thoughtcrime/securesms/util/FullscreenHelper;->(Landroid/app/Activity;)V -HSPLorg/thoughtcrime/securesms/util/FullscreenHelper;->(Landroid/app/Activity;Z)V -HSPLorg/thoughtcrime/securesms/util/FullscreenHelper;->showSystemUI()V -HSPLorg/thoughtcrime/securesms/util/FullscreenHelper;->showSystemUI(Landroid/view/Window;)V -HSPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate$default(JLj$/time/ZoneId;ILjava/lang/Object;)Lj$/time/LocalDate; -HSPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDate(JLj$/time/ZoneId;)Lj$/time/LocalDate; HSPLorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt;->toLocalDateTime(JLj$/time/ZoneId;)Lj$/time/LocalDateTime; HSPLorg/thoughtcrime/securesms/util/JsonUtils$SaneJSONObject;->(Lorg/json/JSONObject;)V HSPLorg/thoughtcrime/securesms/util/JsonUtils$SaneJSONObject;->getInt(Ljava/lang/String;)I @@ -27475,12 +25374,9 @@ HSPLorg/thoughtcrime/securesms/util/JsonUtils$SaneJSONObject;->isNull(Ljava/lang HSPLorg/thoughtcrime/securesms/util/JsonUtils;->()V HSPLorg/thoughtcrime/securesms/util/JsonUtils;->fromJson(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/JsonUtils;->fromJson([BLjava/lang/Class;)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/JsonUtils;->getMapper()Lcom/fasterxml/jackson/databind/ObjectMapper; HSPLorg/thoughtcrime/securesms/util/JsonUtils;->toJson(Ljava/lang/Object;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/LRUCache;->(I)V HSPLorg/thoughtcrime/securesms/util/LRUCache;->removeEldestEntry(Ljava/util/Map$Entry;)Z -HSPLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->()V -HSPLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->(IJLandroid/os/Handler;)V HSPLorg/thoughtcrime/securesms/util/ListenableFutureTask$2;->(Lorg/thoughtcrime/securesms/util/ListenableFutureTask;)V HSPLorg/thoughtcrime/securesms/util/ListenableFutureTask$2;->run()V HSPLorg/thoughtcrime/securesms/util/ListenableFutureTask;->-$$Nest$fgetlisteners(Lorg/thoughtcrime/securesms/util/ListenableFutureTask;)Ljava/util/List; @@ -27525,9 +25421,6 @@ 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$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; @@ -27548,7 +25441,6 @@ HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$OnScrollListener;->< HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$OnScrollListener;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->()V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->(Landroid/app/Activity;Ljava/util/List;Ljava/util/List;Landroidx/lifecycle/LifecycleOwner;)V -HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->(Landroid/app/Activity;Ljava/util/List;Ljava/util/List;Landroidx/lifecycle/LifecycleOwner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->(Landroid/content/Context;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Ljava/util/List;Ljava/util/List;Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->access$updateActiveState(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;Z)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->attach(Landroidx/recyclerview/widget/RecyclerView;)V @@ -27568,28 +25460,11 @@ HSPLorg/thoughtcrime/securesms/util/MediaUtil;->getSlideTypeFromContentType(Ljav HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isAudioType(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isGif(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isImageType(Ljava/lang/String;)Z -HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isInstantVideoSupported(Lorg/thoughtcrime/securesms/mms/Slide;)Z -HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isLongTextType(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/util/MediaUtil;->isVideo(Ljava/lang/String;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasAudio(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasDocument(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasExtraText(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasGiftBadge(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasLinkPreview(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasLocation(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasNoBubble(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasOnlyThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasSharedContact(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasSticker(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isBorderless(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isCaptionlessMms(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isEditMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isScheduled(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isStoryReaction(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isTextOnly(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/MessageRecordUtil;->isViewOnceMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z HSPLorg/thoughtcrime/securesms/util/NameUtil;->()V HSPLorg/thoughtcrime/securesms/util/NameUtil;->()V HSPLorg/thoughtcrime/securesms/util/NameUtil;->firstGrapheme(Ljava/lang/String;)Ljava/lang/String; @@ -27597,7 +25472,6 @@ HSPLorg/thoughtcrime/securesms/util/NameUtil;->getAbbreviation(Ljava/lang/String HSPLorg/thoughtcrime/securesms/util/NetworkUtil;->getNetworkInfo(Landroid/content/Context;)Landroid/net/NetworkInfo; HSPLorg/thoughtcrime/securesms/util/NetworkUtil;->isConnected(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/NetworkUtil;->isConnectedWifi(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/NoCrossfadeChangeDefaultAnimator;->()V HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda2;->()V @@ -27617,19 +25491,10 @@ HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$2(Lorg/ 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 HSPLorg/thoughtcrime/securesms/util/ProjectionList;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/util/PushCharacterCalculator$1;->()V -HSPLorg/thoughtcrime/securesms/util/PushCharacterCalculator;->()V -HSPLorg/thoughtcrime/securesms/util/PushCharacterCalculator;->()V HSPLorg/thoughtcrime/securesms/util/RemoteDeprecation;->()V HSPLorg/thoughtcrime/securesms/util/RemoteDeprecation;->getTimeUntilDeprecation()J HSPLorg/thoughtcrime/securesms/util/RemoteDeprecation;->getTimeUntilDeprecation(Ljava/lang/String;JLjava/lang/String;)J @@ -27658,10 +25523,6 @@ HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ColdStart;->onConversatio HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ColdStart;->onRenderFinished()V HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ColdStart;->onRenderStart()V HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ColdStart;->start()V -HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onDataLoaded()V -HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onDataPostedToMain()V -HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onMetadataLoadStarted()V -HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onMetadataLoaded()V HSPLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->start()V HSPLorg/thoughtcrime/securesms/util/SignalProxyUtil;->()V HSPLorg/thoughtcrime/securesms/util/SignalProxyUtil;->startListeningToWebsocket()V @@ -27703,11 +25564,6 @@ 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/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 -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->(Ljava/lang/String;I)V -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->valueOf(Ljava/lang/String;)Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->values()[Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->()V HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getAppMigrationVersion(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getAttachmentEncryptedSecret(Landroid/content/Context;)Ljava/lang/String; @@ -27723,13 +25579,10 @@ HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getLanguage(Landroid HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getLastVersionCode(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getLongPreference(Landroid/content/Context;Ljava/lang/String;J)J HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMediaDownloadAllowed(Landroid/content/Context;Ljava/lang/String;I)Ljava/util/Set; -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMediaKeyboardMode(Landroid/content/Context;)Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMessageBodyTextSize(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMobileMediaDownloadAllowed(Landroid/content/Context;)Ljava/util/Set; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationChannelVersion(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationLedColor(Landroid/content/Context;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationMessagesChannelVersion(Landroid/content/Context;)I -HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationPrivacy(Landroid/content/Context;)Lorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationRingtone(Landroid/content/Context;)Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getRatingLaterTimestamp(Landroid/content/Context;)J HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getRoamingMediaDownloadAllowed(Landroid/content/Context;)Ljava/util/Set; @@ -27741,7 +25594,6 @@ HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getStringSetPreferen HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getTheme(Landroid/content/Context;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getUnidentifiedAccessCertificateRotationTime(Landroid/content/Context;)J 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;->isIncognitoKeyboardEnabled(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isNotificationVibrateEnabled(Landroid/content/Context;)Z @@ -27767,9 +25619,6 @@ HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->setPromptedPushRegis HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->setSignedPreKeyRotationTime(Landroid/content/Context;J)V HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->setUnauthorizedReceived(Landroid/content/Context;Z)V HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->setUnidentifiedAccessCertificateRotationTime(Landroid/content/Context;J)V -HSPLorg/thoughtcrime/securesms/util/ThemeUtil;->getAttribute(Landroid/content/Context;ILjava/lang/String;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/util/ThemeUtil;->getThemedBoolean(Landroid/content/Context;I)Z -HSPLorg/thoughtcrime/securesms/util/ThemeUtil;->isDarkTheme(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/ThrottledDebouncer$OverflowHandler;->-$$Nest$fgetlastRun(Lorg/thoughtcrime/securesms/util/ThrottledDebouncer$OverflowHandler;)J HSPLorg/thoughtcrime/securesms/util/ThrottledDebouncer$OverflowHandler;->()V HSPLorg/thoughtcrime/securesms/util/ThrottledDebouncer$OverflowHandler;->handleMessage(Landroid/os/Message;)V @@ -27787,7 +25636,6 @@ HSPLorg/thoughtcrime/securesms/util/Util;->getSecretBytes(I)[B HSPLorg/thoughtcrime/securesms/util/Util;->getSecretBytes(Ljava/security/SecureRandom;I)[B HSPLorg/thoughtcrime/securesms/util/Util;->getTimeUntilBuildExpiry()J HSPLorg/thoughtcrime/securesms/util/Util;->hasItems(Ljava/util/Collection;)Z -HSPLorg/thoughtcrime/securesms/util/Util;->hashCode([Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/util/Util;->isDefaultSmsProvider(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/Util;->isEmpty(Ljava/lang/CharSequence;)Z HSPLorg/thoughtcrime/securesms/util/Util;->join(Ljava/util/Collection;Ljava/lang/String;)Ljava/lang/String; @@ -27799,99 +25647,46 @@ HSPLorg/thoughtcrime/securesms/util/VersionTracker;->getDaysSinceFirstInstalled( HSPLorg/thoughtcrime/securesms/util/VersionTracker;->getLastSeenVersion(Landroid/content/Context;)I HSPLorg/thoughtcrime/securesms/util/VersionTracker;->updateLastSeenVersion(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->getLifecycle(Landroid/view/View;)Landroidx/lifecycle/Lifecycle; -HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->getVisible(Landroid/view/View;)Z -HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->layoutIn(Landroid/view/View;Landroid/view/View;)V -HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->padding$default(Landroid/view/View;IIIIILjava/lang/Object;)V -HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->padding(Landroid/view/View;IIII)V HSPLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->setVisible(Landroid/view/View;Z)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion$factoryProducer$1;->(Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion$factoryProducer$1;->invoke()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion$factoryProducer$1;->invoke()Lorg/thoughtcrime/securesms/util/ViewModelFactory; HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion;->()V HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion;->factoryProducer(Lkotlin/jvm/functions/Function0;)Lkotlin/jvm/functions/Function0; HSPLorg/thoughtcrime/securesms/util/ViewModelFactory;->()V HSPLorg/thoughtcrime/securesms/util/ViewModelFactory;->(Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$1;->(Landroidx/fragment/app/Fragment;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$2;->(Lkotlin/jvm/functions/Function0;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$3;->(Lkotlin/Lazy;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$4;->(Lkotlin/jvm/functions/Function0;Lkotlin/Lazy;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$1;->(Landroidx/fragment/app/Fragment;)V HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$4;->(Landroidx/fragment/app/Fragment;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$4;->invoke()Landroidx/fragment/app/Fragment; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$4;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$5;->(Lkotlin/jvm/functions/Function0;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$5;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$5;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$6;->(Lkotlin/Lazy;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$6;->invoke()Landroidx/lifecycle/ViewModelStore; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$6;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$7;->(Lkotlin/jvm/functions/Function0;Lkotlin/Lazy;)V -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$7;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; -HSPLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$7;->invoke()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ViewUtil;->dpToPx(I)I HSPLorg/thoughtcrime/securesms/util/ViewUtil;->findStubById(Landroid/view/View;I)Lorg/thoughtcrime/securesms/util/views/Stub; -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->getLeftMargin(Landroid/view/View;)I -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->getRightMargin(Landroid/view/View;)I -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->getTopMargin(Landroid/view/View;)I HSPLorg/thoughtcrime/securesms/util/ViewUtil;->getWidth(Landroid/view/View;)I -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->isLtr(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->isLtr(Landroid/view/View;)Z HSPLorg/thoughtcrime/securesms/util/ViewUtil;->isRtl(Landroid/content/Context;)Z -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->isRtl(Landroid/view/View;)Z HSPLorg/thoughtcrime/securesms/util/ViewUtil;->mirrorIfRtl(Landroid/view/View;Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingBottom(Landroid/view/View;I)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingEnd(Landroid/view/View;I)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingStart(Landroid/view/View;I)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingTop(Landroid/view/View;I)V HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setTextViewGravityStart(Landroid/widget/TextView;Landroid/content/Context;)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setTopMargin(Landroid/view/View;I)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setTopMargin(Landroid/view/View;IZ)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->setVisibilityIfNonNull(Landroid/view/View;I)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->updateLayoutParams(Landroid/view/View;II)V -HSPLorg/thoughtcrime/securesms/util/ViewUtil;->updateLayoutParamsIfNonNull(Landroid/view/View;II)V HSPLorg/thoughtcrime/securesms/util/WakeLockUtil;->()V HSPLorg/thoughtcrime/securesms/util/WakeLockUtil;->acquire(Landroid/content/Context;IJLjava/lang/String;)Landroid/os/PowerManager$WakeLock; HSPLorg/thoughtcrime/securesms/util/WakeLockUtil;->prefixTag(Ljava/lang/String;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/WakeLockUtil;->release(Landroid/os/PowerManager$WakeLock;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/util/WindowUtil;->getStatusBarColor(Landroid/view/Window;)I HSPLorg/thoughtcrime/securesms/util/WindowUtil;->initializeScreenshotSecurity(Landroid/content/Context;Landroid/view/Window;)V -HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setLightNavigationBar(Landroid/view/Window;)V -HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setLightNavigationBarFromTheme(Landroid/app/Activity;)V -HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setLightStatusBar(Landroid/view/Window;)V -HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setLightStatusBarFromTheme(Landroid/app/Activity;)V HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setNavigationBarColor(Landroid/app/Activity;I)V HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setNavigationBarColor(Landroid/content/Context;Landroid/view/Window;I)V HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setStatusBarColor(Landroid/view/Window;I)V -HSPLorg/thoughtcrime/securesms/util/WindowUtil;->setSystemUiFlags(Landroid/view/Window;I)V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory;->(Lj$/util/function/Function;I)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->()V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->(Z)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->getItemTypes()Ljava/util/Map; -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;ILjava/util/List;)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;I)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;ILjava/util/List;)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewAttachedToWindow(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;)V -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->registerFactory(Ljava/lang/Class;Lj$/util/function/Function;I)V 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 -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItem(I)Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItem(I)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; -HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->getItemViewType(I)I HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->setPagingController(Lorg/signal/paging/PagingController;)V HSPLorg/thoughtcrime/securesms/util/cjkv/CJKVUtil;->isCJKV(Ljava/lang/String;)Z HSPLorg/thoughtcrime/securesms/util/cjkv/CJKVUtil;->isCodepointCJKV(I)Z @@ -27905,8 +25700,6 @@ 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 @@ -27984,9 +25777,6 @@ HSPLorg/thoughtcrime/securesms/util/storage/FileStorage;->getAllFiles(Landroid/c HSPLorg/thoughtcrime/securesms/util/views/DarkOverflowToolbar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/util/views/DarkOverflowToolbar;->init()V HSPLorg/thoughtcrime/securesms/util/views/NullableStub;->(Landroid/view/ViewStub;)V -HSPLorg/thoughtcrime/securesms/util/views/NullableStub;->get()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/views/NullableStub;->require()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/util/views/NullableStub;->resolved()Z HSPLorg/thoughtcrime/securesms/util/views/SlideUpWithSnackbarBehavior;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/util/views/Stub;->(Landroid/view/ViewStub;)V HSPLorg/thoughtcrime/securesms/util/views/Stub;->get()Landroid/view/View; @@ -28144,15 +25934,9 @@ HSPLorg/whispersystems/signalservice/api/payments/Money$MobileCoin;->(Ljav HSPLorg/whispersystems/signalservice/api/payments/Money;->()V HSPLorg/whispersystems/signalservice/api/payments/Money;->mobileCoin(Ljava/math/BigDecimal;)Lorg/whispersystems/signalservice/api/payments/Money$MobileCoin; HSPLorg/whispersystems/signalservice/api/payments/Money;->picoMobileCoin(Ljava/math/BigInteger;)Lorg/whispersystems/signalservice/api/payments/Money$MobileCoin; -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->(ZZZZZZZZZ)V -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isAnnouncementGroup()Z -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isChangeNumber()Z -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isGiftBadges()Z -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isGv1Migration()Z +HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->(ZZZ)V HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isPaymentActivation()Z HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isPnp()Z -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isSenderKey()Z -HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;->isStories()Z HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;->$values()[Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType; HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;->()V HSPLorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;->(Ljava/lang/String;I)V @@ -28289,8 +26073,8 @@ HSPLorg/whispersystems/signalservice/internal/configuration/SignalUrl;->getTrust HSPLorg/whispersystems/signalservice/internal/configuration/SignalUrl;->getUrl()Ljava/lang/String; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda10;->()V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda11;->()V -HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda13;->()V -HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda9;->()V +HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda12;->()V +HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda14;->()V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$1;->(Lorg/whispersystems/signalservice/internal/push/PushServiceSocket;Lorg/signal/core/util/concurrent/SettableFuture;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$1;->onResponse(Lokhttp3/Call;Lokhttp3/Response;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$2;->()V @@ -28385,17 +26169,6 @@ HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$ HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage;->()V HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage;->(Ljava/lang/String;Ljava/lang/String;Lokio/ByteString;Ljava/util/List;Ljava/lang/Long;Lokio/ByteString;)V HSPLorg/whispersystems/util/StringUtil;->utf8(Ljava/lang/String;)[B -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda0;->(Lrxdogtag2/DogTagMaybeObserver;)V -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda1;->(Lrxdogtag2/DogTagMaybeObserver;Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda1;->run()V -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda4;->(Lrxdogtag2/DogTagMaybeObserver;)V -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda5;->(Lio/reactivex/rxjava3/core/MaybeObserver;)V -HSPLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda5;->run()V -HSPLrxdogtag2/DogTagMaybeObserver;->$r8$lambda$oZbZwTXdH3PbkXhPwGJJZ5hucwc(Lrxdogtag2/DogTagMaybeObserver;Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLrxdogtag2/DogTagMaybeObserver;->(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/MaybeObserver;)V -HSPLrxdogtag2/DogTagMaybeObserver;->lambda$onSubscribe$1(Lio/reactivex/rxjava3/disposables/Disposable;)V -HSPLrxdogtag2/DogTagMaybeObserver;->onComplete()V -HSPLrxdogtag2/DogTagMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V HSPLrxdogtag2/DogTagObserver$$ExternalSyntheticLambda2;->(Lrxdogtag2/DogTagObserver;)V HSPLrxdogtag2/DogTagObserver$$ExternalSyntheticLambda3;->(Lio/reactivex/rxjava3/core/Observer;)V HSPLrxdogtag2/DogTagObserver$$ExternalSyntheticLambda3;->run()V @@ -28440,7 +26213,6 @@ HSPLrxdogtag2/DogTagSubscriber;->lambda$onSubscribe$1(Lorg/reactivestreams/Subsc HSPLrxdogtag2/DogTagSubscriber;->onNext(Ljava/lang/Object;)V HSPLrxdogtag2/DogTagSubscriber;->onSubscribe(Lorg/reactivestreams/Subscription;)V HSPLrxdogtag2/ObserverHandler$-CC;->$default$handle(Lrxdogtag2/ObserverHandler;Lio/reactivex/rxjava3/core/Flowable;Lorg/reactivestreams/Subscriber;)Lorg/reactivestreams/Subscriber; -HSPLrxdogtag2/ObserverHandler$-CC;->$default$handle(Lrxdogtag2/ObserverHandler;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLrxdogtag2/ObserverHandler$-CC;->$default$handle(Lrxdogtag2/ObserverHandler;Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/core/Observer;)Lio/reactivex/rxjava3/core/Observer; HSPLrxdogtag2/ObserverHandler$-CC;->$default$handle(Lrxdogtag2/ObserverHandler;Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/core/SingleObserver;)Lio/reactivex/rxjava3/core/SingleObserver; HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda0;->(Lrxdogtag2/RxDogTag$Configuration;)V @@ -28450,19 +26222,16 @@ HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda1;->apply(Ljava/lang/Object;Ljava HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda2;->(Lrxdogtag2/RxDogTag$Configuration;)V HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda3;->(Lrxdogtag2/RxDogTag$Configuration;)V -HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda4;->(Lrxdogtag2/RxDogTag$Configuration;)V HSPLrxdogtag2/RxDogTag$$ExternalSyntheticLambda5;->(Ljava/lang/Thread$UncaughtExceptionHandler;Lrxdogtag2/RxDogTag$NonCheckingConsumer;)V HSPLrxdogtag2/RxDogTag$Builder;->()V HSPLrxdogtag2/RxDogTag$Builder;->install()V HSPLrxdogtag2/RxDogTag$Configuration$1;->()V HSPLrxdogtag2/RxDogTag$Configuration$1;->handle(Lio/reactivex/rxjava3/core/Flowable;Lorg/reactivestreams/Subscriber;)Lorg/reactivestreams/Subscriber; -HSPLrxdogtag2/RxDogTag$Configuration$1;->handle(Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLrxdogtag2/RxDogTag$Configuration$1;->handle(Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/core/Observer;)Lio/reactivex/rxjava3/core/Observer; HSPLrxdogtag2/RxDogTag$Configuration$1;->handle(Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/core/SingleObserver;)Lio/reactivex/rxjava3/core/SingleObserver; HSPLrxdogtag2/RxDogTag$Configuration;->()V HSPLrxdogtag2/RxDogTag$Configuration;->(Lrxdogtag2/RxDogTag$Builder;)V -HSPLrxdogtag2/RxDogTag;->$r8$lambda$G5J9svI7_WWihw7QCY8ugVE_Jmo(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLrxdogtag2/RxDogTag;->$r8$lambda$Lb2Lkgs3_Lyd4he53yEk5j3ezFM(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Flowable;Lorg/reactivestreams/Subscriber;)Lorg/reactivestreams/Subscriber; HSPLrxdogtag2/RxDogTag;->$r8$lambda$YP26HIb1nhHqbV4QlRgnyBuwHqU(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/core/Observer;)Lio/reactivex/rxjava3/core/Observer; HSPLrxdogtag2/RxDogTag;->$r8$lambda$gpUPCywIa6QwbpyvYi5dNfOg-gs(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/core/SingleObserver;)Lio/reactivex/rxjava3/core/SingleObserver; @@ -28473,7 +26242,6 @@ HSPLrxdogtag2/RxDogTag;->installWithBuilder(Lrxdogtag2/RxDogTag$Configuration;)V HSPLrxdogtag2/RxDogTag;->lambda$installWithBuilder$0(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/core/Observer;)Lio/reactivex/rxjava3/core/Observer; HSPLrxdogtag2/RxDogTag;->lambda$installWithBuilder$1(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Flowable;Lorg/reactivestreams/Subscriber;)Lorg/reactivestreams/Subscriber; HSPLrxdogtag2/RxDogTag;->lambda$installWithBuilder$2(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/core/SingleObserver;)Lio/reactivex/rxjava3/core/SingleObserver; -HSPLrxdogtag2/RxDogTag;->lambda$installWithBuilder$3(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; HSPLrxdogtag2/RxDogTag;->shouldDecorate(Ljava/lang/Object;)Z Landroid/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$$ExternalSyntheticThrowCCEIfNotNull0; Landroid/support/v4/media/session/IMediaSession$Stub; @@ -28628,9 +26396,6 @@ Landroidx/appcompat/widget/AppCompatEmojiTextHelper; Landroidx/appcompat/widget/AppCompatImageButton; Landroidx/appcompat/widget/AppCompatImageHelper; Landroidx/appcompat/widget/AppCompatImageView; -Landroidx/appcompat/widget/AppCompatProgressBarHelper; -Landroidx/appcompat/widget/AppCompatSeekBar; -Landroidx/appcompat/widget/AppCompatSeekBarHelper; Landroidx/appcompat/widget/AppCompatTextClassifierHelper$Api26Impl$$ExternalSyntheticApiModelOutline0; Landroidx/appcompat/widget/AppCompatTextClassifierHelper; Landroidx/appcompat/widget/AppCompatTextHelper$1; @@ -28649,10 +26414,6 @@ Landroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper; Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener; Landroidx/appcompat/widget/ContentFrameLayout; Landroidx/appcompat/widget/DecorToolbar; -Landroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0; -Landroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline1; -Landroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline2; -Landroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline3; Landroidx/appcompat/widget/DrawableUtils; Landroidx/appcompat/widget/FitWindowsFrameLayout; Landroidx/appcompat/widget/ForwardingListener; @@ -28711,14 +26472,6 @@ Landroidx/asynclayoutinflater/view/AsyncLayoutInflater$OnInflateFinishedListener Landroidx/asynclayoutinflater/view/AsyncLayoutInflater; Landroidx/camera/camera2/internal/compat/params/OutputConfigurationCompatApi24Impl$OutputConfigurationParamsApi24$$ExternalSyntheticBackport1; Landroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0; -Landroidx/cardview/R$style; -Landroidx/cardview/R$styleable; -Landroidx/cardview/widget/CardView$1; -Landroidx/cardview/widget/CardView; -Landroidx/cardview/widget/CardViewApi21Impl; -Landroidx/cardview/widget/CardViewDelegate; -Landroidx/cardview/widget/CardViewImpl; -Landroidx/cardview/widget/RoundRectDrawable; Landroidx/collection/ArrayMap$EntrySet; Landroidx/collection/ArrayMap$MapIterator; Landroidx/collection/ArrayMap$ValueCollection; @@ -28738,7 +26491,6 @@ Landroidx/compose/ui/autofill/AndroidAutofill$$ExternalSyntheticApiModelOutline1 Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt$$ExternalSyntheticApiModelOutline1; Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticApiModelOutline1; Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline0; Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline1; Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24$$ExternalSyntheticApiModelOutline2; @@ -28752,7 +26504,6 @@ 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$GoalVariableAccessor; @@ -28763,14 +26514,12 @@ Landroidx/constraintlayout/core/state/WidgetFrame; Landroidx/constraintlayout/core/widgets/Barrier; Landroidx/constraintlayout/core/widgets/Chain; Landroidx/constraintlayout/core/widgets/ChainHead; -Landroidx/constraintlayout/core/widgets/ConstraintAnchor$1; Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type; Landroidx/constraintlayout/core/widgets/ConstraintAnchor; Landroidx/constraintlayout/core/widgets/ConstraintWidget$1; Landroidx/constraintlayout/core/widgets/ConstraintWidget$DimensionBehaviour; Landroidx/constraintlayout/core/widgets/ConstraintWidget; Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer; -Landroidx/constraintlayout/core/widgets/Guideline$1; Landroidx/constraintlayout/core/widgets/Guideline; Landroidx/constraintlayout/core/widgets/Helper; Landroidx/constraintlayout/core/widgets/HelperWidget; @@ -28784,7 +26533,6 @@ Landroidx/constraintlayout/core/widgets/analyzer/Dependency; Landroidx/constraintlayout/core/widgets/analyzer/DependencyGraph; Landroidx/constraintlayout/core/widgets/analyzer/DependencyNode; Landroidx/constraintlayout/core/widgets/analyzer/Direct; -Landroidx/constraintlayout/core/widgets/analyzer/Grouping; Landroidx/constraintlayout/core/widgets/analyzer/HorizontalWidgetRun; Landroidx/constraintlayout/core/widgets/analyzer/VerticalWidgetRun; Landroidx/constraintlayout/core/widgets/analyzer/WidgetRun; @@ -28803,11 +26551,9 @@ 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; @@ -28861,7 +26607,6 @@ Landroidx/core/content/res/ResourcesCompat$FontCallback$$ExternalSyntheticLambda Landroidx/core/content/res/ResourcesCompat$FontCallback; Landroidx/core/content/res/ResourcesCompat; Landroidx/core/graphics/ColorUtils; -Landroidx/core/graphics/Insets; Landroidx/core/graphics/TypefaceCompat; Landroidx/core/graphics/TypefaceCompatApi29Impl; Landroidx/core/graphics/TypefaceCompatBaseImpl; @@ -28891,8 +26636,6 @@ 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; @@ -28941,8 +26684,6 @@ Landroidx/core/view/ViewCompat$Api19Impl; Landroidx/core/view/ViewCompat$Api20Impl; Landroidx/core/view/ViewCompat$Api21Impl$1; Landroidx/core/view/ViewCompat$Api21Impl; -Landroidx/core/view/ViewCompat$Api23Impl$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/ViewCompat$Api23Impl; Landroidx/core/view/ViewCompat$Api26Impl$$ExternalSyntheticApiModelOutline0; Landroidx/core/view/ViewCompat$Api26Impl; Landroidx/core/view/ViewCompat$Api28Impl$$ExternalSyntheticApiModelOutline0; @@ -28974,29 +26715,7 @@ Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback; Landroidx/core/view/WindowInsetsAnimationCompat$Impl30; Landroidx/core/view/WindowInsetsAnimationCompat$Impl; Landroidx/core/view/WindowInsetsAnimationCompat; -Landroidx/core/view/WindowInsetsCompat$Builder; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline5; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline6; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline8; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl29; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl30; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl; -Landroidx/core/view/WindowInsetsCompat$Impl20; -Landroidx/core/view/WindowInsetsCompat$Impl21; -Landroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/WindowInsetsCompat$Impl28; -Landroidx/core/view/WindowInsetsCompat$Impl29; -Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline3; -Landroidx/core/view/WindowInsetsCompat$Impl30; -Landroidx/core/view/WindowInsetsCompat$Impl; Landroidx/core/view/WindowInsetsCompat$Type; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline2; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline6; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30; -Landroidx/core/view/WindowInsetsCompat; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline11; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline3; Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline6; @@ -29773,17 +27492,6 @@ Landroidx/media3/session/SessionToken$SessionTokenImpl; Landroidx/media3/session/SessionToken; Landroidx/media3/session/SessionTokenImplBase$$ExternalSyntheticLambda0; Landroidx/media3/session/SessionTokenImplBase; -Landroidx/media3/ui/AspectRatioFrameLayout$AspectRatioUpdateDispatcher; -Landroidx/media3/ui/AspectRatioFrameLayout; -Landroidx/media3/ui/PlayerControlView$OnFullScreenModeChangedListener; -Landroidx/media3/ui/PlayerControlView$VisibilityListener; -Landroidx/media3/ui/PlayerControlView; -Landroidx/media3/ui/PlayerView$ComponentListener; -Landroidx/media3/ui/PlayerView; -Landroidx/media3/ui/R$id; -Landroidx/media3/ui/R$layout; -Landroidx/media3/ui/R$styleable; -Landroidx/media3/ui/SubtitleView; Landroidx/multidex/MultiDex; Landroidx/multidex/MultiDexApplication; Landroidx/navigation/ActivityNavigator$Companion; @@ -29901,13 +27609,6 @@ Landroidx/recyclerview/widget/BatchingListUpdateCallback; Landroidx/recyclerview/widget/ChildHelper$Bucket; Landroidx/recyclerview/widget/ChildHelper$Callback; Landroidx/recyclerview/widget/ChildHelper; -Landroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode; -Landroidx/recyclerview/widget/ConcatAdapter$Config; -Landroidx/recyclerview/widget/ConcatAdapter; -Landroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition; -Landroidx/recyclerview/widget/ConcatAdapterController; -Landroidx/recyclerview/widget/ConversationLayoutManager$Companion; -Landroidx/recyclerview/widget/ConversationLayoutManager; Landroidx/recyclerview/widget/DefaultItemAnimator$3; Landroidx/recyclerview/widget/DefaultItemAnimator$5; Landroidx/recyclerview/widget/DefaultItemAnimator; @@ -29938,9 +27639,6 @@ Landroidx/recyclerview/widget/LinearLayoutManager; Landroidx/recyclerview/widget/ListAdapter$1; Landroidx/recyclerview/widget/ListAdapter; Landroidx/recyclerview/widget/ListUpdateCallback; -Landroidx/recyclerview/widget/NestedAdapterWrapper$1; -Landroidx/recyclerview/widget/NestedAdapterWrapper$Callback; -Landroidx/recyclerview/widget/NestedAdapterWrapper; Landroidx/recyclerview/widget/OpReorderer$Callback; Landroidx/recyclerview/widget/OpReorderer; Landroidx/recyclerview/widget/OrientationHelper$1; @@ -29985,20 +27683,12 @@ Landroidx/recyclerview/widget/RecyclerViewAccessibilityDelegate$ItemDelegate; Landroidx/recyclerview/widget/RecyclerViewAccessibilityDelegate; Landroidx/recyclerview/widget/ScrollbarHelper; Landroidx/recyclerview/widget/SimpleItemAnimator; -Landroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage$1; -Landroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage; -Landroidx/recyclerview/widget/StableIdStorage$StableIdLookup; -Landroidx/recyclerview/widget/StableIdStorage; Landroidx/recyclerview/widget/ViewBoundsCheck$BoundFlags; Landroidx/recyclerview/widget/ViewBoundsCheck$Callback; Landroidx/recyclerview/widget/ViewBoundsCheck; Landroidx/recyclerview/widget/ViewInfoStore$InfoRecord; Landroidx/recyclerview/widget/ViewInfoStore$ProcessCallback; Landroidx/recyclerview/widget/ViewInfoStore; -Landroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup; -Landroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage; -Landroidx/recyclerview/widget/ViewTypeStorage$ViewTypeLookup; -Landroidx/recyclerview/widget/ViewTypeStorage; Landroidx/savedstate/R$id; Landroidx/savedstate/Recreator$Companion; Landroidx/savedstate/Recreator; @@ -30086,7 +27776,6 @@ Lcom/airbnb/lottie/animation/keyframe/IntegerKeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/KeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/MaskKeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/PathKeyframe; -Lcom/airbnb/lottie/animation/keyframe/PathKeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/PointKeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/ScaleKeyframeAnimation; Lcom/airbnb/lottie/animation/keyframe/ShapeKeyframeAnimation; @@ -30182,9 +27871,6 @@ Lcom/annimon/stream/Collectors$9; Lcom/annimon/stream/Collectors$CollectorsImpl; Lcom/annimon/stream/Collectors; Lcom/annimon/stream/IntPair; -Lcom/annimon/stream/IntStream$1; -Lcom/annimon/stream/IntStream$5; -Lcom/annimon/stream/IntStream; Lcom/annimon/stream/Objects; Lcom/annimon/stream/Optional; Lcom/annimon/stream/Stream$2; @@ -30200,18 +27886,14 @@ Lcom/annimon/stream/function/Predicate$Util$5; Lcom/annimon/stream/function/Predicate$Util; Lcom/annimon/stream/function/Predicate; Lcom/annimon/stream/function/Supplier; -Lcom/annimon/stream/function/ToIntFunction; Lcom/annimon/stream/internal/Operators; Lcom/annimon/stream/internal/Params; Lcom/annimon/stream/iterator/IndexedIterator; Lcom/annimon/stream/iterator/LazyIterator; 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/ObjArray; Lcom/annimon/stream/operator/ObjFilter; -Lcom/annimon/stream/operator/ObjLimit; Lcom/annimon/stream/operator/ObjMap; Lcom/annimon/stream/operator/ObjMapIndexed; Lcom/annimon/stream/operator/ObjSorted; @@ -31198,10 +28880,6 @@ Lcom/google/android/material/appbar/ViewOffsetHelper; Lcom/google/android/material/appbar/ViewUtilsLollipop; Lcom/google/android/material/button/MaterialButton; Lcom/google/android/material/button/MaterialButtonHelper; -Lcom/google/android/material/card/MaterialCardView; -Lcom/google/android/material/card/MaterialCardViewHelper$$ExternalSyntheticApiModelOutline0; -Lcom/google/android/material/card/MaterialCardViewHelper$1; -Lcom/google/android/material/card/MaterialCardViewHelper; Lcom/google/android/material/chip/Chip$$ExternalSyntheticLambda0; Lcom/google/android/material/chip/Chip$1; Lcom/google/android/material/chip/Chip$ChipTouchHelper; @@ -31318,8 +28996,6 @@ 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; @@ -31571,8 +29247,14 @@ Lcom/squareup/wire/ProtoAdapterKt$commonUint32$1; Lcom/squareup/wire/ProtoAdapterKt$commonUint64$1; Lcom/squareup/wire/ProtoAdapterKt$commonWrapper$1; Lcom/squareup/wire/ProtoAdapterKt; +Lcom/squareup/wire/ProtoReader$Companion; +Lcom/squareup/wire/ProtoReader; Lcom/squareup/wire/ProtoWriter; Lcom/squareup/wire/RepeatedProtoAdapter; +Lcom/squareup/wire/ReverseProtoWriter$Companion; +Lcom/squareup/wire/ReverseProtoWriter$forwardBuffer$2; +Lcom/squareup/wire/ReverseProtoWriter$forwardWriter$2; +Lcom/squareup/wire/ReverseProtoWriter; Lcom/squareup/wire/Syntax$Companion; Lcom/squareup/wire/Syntax; Lcom/squareup/wire/WireEnum; @@ -31594,13 +29276,9 @@ Lio/reactivex/rxjava3/core/Flowable; Lio/reactivex/rxjava3/core/FlowableEmitter; Lio/reactivex/rxjava3/core/FlowableOnSubscribe; Lio/reactivex/rxjava3/core/FlowableSubscriber; -Lio/reactivex/rxjava3/core/Maybe; Lio/reactivex/rxjava3/core/MaybeObserver; -Lio/reactivex/rxjava3/core/MaybeSource; Lio/reactivex/rxjava3/core/Observable$1; Lio/reactivex/rxjava3/core/Observable; -Lio/reactivex/rxjava3/core/ObservableEmitter; -Lio/reactivex/rxjava3/core/ObservableOnSubscribe; Lio/reactivex/rxjava3/core/ObservableSource; Lio/reactivex/rxjava3/core/Observer; Lio/reactivex/rxjava3/core/Scheduler$PeriodicDirectTask; @@ -31624,7 +29302,6 @@ Lio/reactivex/rxjava3/functions/BiFunction; Lio/reactivex/rxjava3/functions/BiPredicate; Lio/reactivex/rxjava3/functions/Cancellable; Lio/reactivex/rxjava3/functions/Consumer; -Lio/reactivex/rxjava3/functions/Function3; Lio/reactivex/rxjava3/functions/Function; Lio/reactivex/rxjava3/functions/LongConsumer; Lio/reactivex/rxjava3/functions/Predicate; @@ -31634,7 +29311,6 @@ Lio/reactivex/rxjava3/internal/disposables/DisposableHelper; Lio/reactivex/rxjava3/internal/disposables/EmptyDisposable; Lio/reactivex/rxjava3/internal/disposables/SequentialDisposable; Lio/reactivex/rxjava3/internal/functions/Functions$Array2Func; -Lio/reactivex/rxjava3/internal/functions/Functions$Array3Func; Lio/reactivex/rxjava3/internal/functions/Functions$EmptyAction; Lio/reactivex/rxjava3/internal/functions/Functions$EmptyConsumer; Lio/reactivex/rxjava3/internal/functions/Functions$EmptyLongConsumer; @@ -31652,7 +29328,6 @@ Lio/reactivex/rxjava3/internal/functions/ObjectHelper$BiObjectPredicate; Lio/reactivex/rxjava3/internal/functions/ObjectHelper; Lio/reactivex/rxjava3/internal/fuseable/ConditionalSubscriber; Lio/reactivex/rxjava3/internal/fuseable/FuseToFlowable; -Lio/reactivex/rxjava3/internal/fuseable/FuseToObservable; Lio/reactivex/rxjava3/internal/fuseable/QueueDisposable; Lio/reactivex/rxjava3/internal/fuseable/QueueFuseable; Lio/reactivex/rxjava3/internal/fuseable/QueueSubscription; @@ -31661,15 +29336,10 @@ Lio/reactivex/rxjava3/internal/fuseable/SimplePlainQueue; Lio/reactivex/rxjava3/internal/fuseable/SimpleQueue; Lio/reactivex/rxjava3/internal/observers/BasicFuseableObserver; Lio/reactivex/rxjava3/internal/observers/BasicIntQueueDisposable; -Lio/reactivex/rxjava3/internal/observers/BasicQueueDisposable; Lio/reactivex/rxjava3/internal/observers/BlockingMultiObserver; Lio/reactivex/rxjava3/internal/observers/ConsumerSingleObserver; Lio/reactivex/rxjava3/internal/observers/DeferredScalarDisposable; Lio/reactivex/rxjava3/internal/observers/LambdaObserver; -Lio/reactivex/rxjava3/internal/observers/QueueDrainObserver; -Lio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad0; -Lio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad2; -Lio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberWip; Lio/reactivex/rxjava3/internal/observers/ResumeSingleObserver; Lio/reactivex/rxjava3/internal/operators/flowable/AbstractBackpressureThrottlingSubscriber; Lio/reactivex/rxjava3/internal/operators/flowable/AbstractFlowableWithUpstream; @@ -31684,8 +29354,6 @@ Lio/reactivex/rxjava3/internal/operators/flowable/FlowableDistinctUntilChanged$D Lio/reactivex/rxjava3/internal/operators/flowable/FlowableDistinctUntilChanged; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach$DoOnEachSubscriber; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableDoOnEach; -Lio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber; -Lio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableFromFuture; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableFromObservable$SubscriberObserver; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableFromObservable; @@ -31725,84 +29393,25 @@ Lio/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchMap$SwitchMapSub Lio/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchMap; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest$ThrottleLatestSubscriber; Lio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest; -Lio/reactivex/rxjava3/internal/operators/maybe/AbstractMaybeWithUpstream; -Lio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver; -Lio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver; -Lio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter; -Lio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver; Lio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver$SwitchMapSingleObserver; Lio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver; Lio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle; Lio/reactivex/rxjava3/internal/operators/mixed/ScalarXMapZHelper; -Lio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver; -Lio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable; Lio/reactivex/rxjava3/internal/operators/observable/AbstractObservableWithUpstream; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferBoundaryObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableCreate; Lio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged$DistinctUntilChangedObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableDistinctUntilChanged; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle; Lio/reactivex/rxjava3/internal/operators/observable/ObservableFilter$FilterObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableFilter; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray; Lio/reactivex/rxjava3/internal/operators/observable/ObservableFromFuture; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableJust; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableMap; Lio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBuffer; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBufferSupplier; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplaySource; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$SizeBoundReplayBuffer; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$UnBoundedFactory; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableScalarXMap; Lio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed$ScanSeedObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSkip; Lio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeOnObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn$SubscribeTask; Lio/reactivex/rxjava3/internal/operators/observable/ObservableSubscribeOn; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver; -Lio/reactivex/rxjava3/internal/operators/observable/ObservableTake; Lio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed$DebounceTimedObserver; Lio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed; -Lio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess; -Lio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess; Lio/reactivex/rxjava3/internal/operators/single/SingleError; Lio/reactivex/rxjava3/internal/operators/single/SingleFlatMap$SingleFlatMapCallback$FlatMapSingleObserver; Lio/reactivex/rxjava3/internal/operators/single/SingleFlatMap$SingleFlatMapCallback; @@ -31811,9 +29420,6 @@ Lio/reactivex/rxjava3/internal/operators/single/SingleFromCallable; Lio/reactivex/rxjava3/internal/operators/single/SingleJust; Lio/reactivex/rxjava3/internal/operators/single/SingleMap$MapSingleObserver; Lio/reactivex/rxjava3/internal/operators/single/SingleMap; -Lio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver; -Lio/reactivex/rxjava3/internal/operators/single/SingleObserveOn; -Lio/reactivex/rxjava3/internal/operators/single/SingleOnErrorComplete; Lio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn$OnErrorReturn; Lio/reactivex/rxjava3/internal/operators/single/SingleOnErrorReturn; Lio/reactivex/rxjava3/internal/operators/single/SingleResumeNext$ResumeMainSingleObserver; @@ -31848,36 +29454,27 @@ Lio/reactivex/rxjava3/internal/subscriptions/BasicIntQueueSubscription; Lio/reactivex/rxjava3/internal/subscriptions/DeferredScalarSubscription; Lio/reactivex/rxjava3/internal/subscriptions/SubscriptionHelper; Lio/reactivex/rxjava3/internal/util/AppendOnlyLinkedArrayList$NonThrowingPredicate; -Lio/reactivex/rxjava3/internal/util/ArrayListSupplier; Lio/reactivex/rxjava3/internal/util/AtomicThrowable; Lio/reactivex/rxjava3/internal/util/BackpressureHelper; Lio/reactivex/rxjava3/internal/util/BlockingHelper; -Lio/reactivex/rxjava3/internal/util/EndConsumerHelper; -Lio/reactivex/rxjava3/internal/util/ErrorMode; Lio/reactivex/rxjava3/internal/util/ExceptionHelper$Termination; Lio/reactivex/rxjava3/internal/util/ExceptionHelper; Lio/reactivex/rxjava3/internal/util/NotificationLite$ErrorNotification; Lio/reactivex/rxjava3/internal/util/NotificationLite; -Lio/reactivex/rxjava3/internal/util/ObservableQueueDrain; Lio/reactivex/rxjava3/internal/util/OpenHashSet; Lio/reactivex/rxjava3/internal/util/Pow2; Lio/reactivex/rxjava3/kotlin/DisposableKt; Lio/reactivex/rxjava3/kotlin/SubscribersKt$onCompleteStub$1; Lio/reactivex/rxjava3/kotlin/SubscribersKt$onErrorStub$1; Lio/reactivex/rxjava3/kotlin/SubscribersKt$onNextStub$1; -Lio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Action$0; Lio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Consumer$0; Lio/reactivex/rxjava3/kotlin/SubscribersKt; -Lio/reactivex/rxjava3/observables/ConnectableObservable; -Lio/reactivex/rxjava3/observers/DisposableObserver; Lio/reactivex/rxjava3/observers/LambdaConsumerIntrospection; Lio/reactivex/rxjava3/observers/SerializedObserver; Lio/reactivex/rxjava3/plugins/RxJavaPlugins; Lio/reactivex/rxjava3/processors/BehaviorProcessor$BehaviorSubscription; Lio/reactivex/rxjava3/processors/BehaviorProcessor; Lio/reactivex/rxjava3/processors/FlowableProcessor; -Lio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription; -Lio/reactivex/rxjava3/processors/PublishProcessor; Lio/reactivex/rxjava3/schedulers/Schedulers$ComputationTask; Lio/reactivex/rxjava3/schedulers/Schedulers$IOTask; Lio/reactivex/rxjava3/schedulers/Schedulers$NewThreadHolder; @@ -31900,10 +29497,8 @@ Lj$/time/LocalTime; Lj$/time/OffsetDateTime; Lj$/time/ZoneId; Lj$/time/ZoneOffset; -Lj$/time/ZonedDateTime; Lj$/time/a; Lj$/time/chrono/ChronoLocalDateTime; -Lj$/time/chrono/ChronoZonedDateTime; Lj$/time/chrono/a; Lj$/time/chrono/b; Lj$/time/chrono/e; @@ -32005,7 +29600,6 @@ Lj$/util/concurrent/l; Lj$/util/concurrent/n; Lj$/util/concurrent/p; Lj$/util/concurrent/q; -Lj$/util/concurrent/r; Lj$/util/concurrent/u; Lj$/util/concurrent/v; Lj$/util/d; @@ -32232,8 +29826,6 @@ Lkotlin/jvm/internal/Lambda; Lkotlin/jvm/internal/MutablePropertyReference1; Lkotlin/jvm/internal/MutablePropertyReference1Impl; Lkotlin/jvm/internal/MutablePropertyReference; -Lkotlin/jvm/internal/PropertyReference0; -Lkotlin/jvm/internal/PropertyReference0Impl; Lkotlin/jvm/internal/PropertyReference1; Lkotlin/jvm/internal/PropertyReference1Impl; Lkotlin/jvm/internal/PropertyReference; @@ -32286,7 +29878,6 @@ Lkotlin/reflect/KParameter$Kind; Lkotlin/reflect/KParameter; Lkotlin/reflect/KProperty$Accessor; Lkotlin/reflect/KProperty$Getter; -Lkotlin/reflect/KProperty0; Lkotlin/reflect/KProperty1$Getter; Lkotlin/reflect/KProperty1; Lkotlin/reflect/KProperty; @@ -33341,7 +30932,6 @@ Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1; Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$1; Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2; Lkotlin/sequences/SequencesKt__SequencesKt; -Lkotlin/sequences/SequencesKt___SequencesJvmKt$filterIsInstance$1; Lkotlin/sequences/SequencesKt___SequencesJvmKt; Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1; Lkotlin/sequences/SequencesKt___SequencesKt$flatMap$1; @@ -33562,6 +31152,7 @@ Lokhttp3/internal/tls/OkHostnameVerifier; Lokhttp3/internal/tls/TrustRootIndex; Lokhttp3/internal/ws/RealWebSocket$1; Lokhttp3/internal/ws/RealWebSocket$2; +Lokhttp3/internal/ws/RealWebSocket$Close; Lokhttp3/internal/ws/RealWebSocket; Lokhttp3/internal/ws/WebSocketProtocol; Lokhttp3/internal/ws/WebSocketReader$FrameCallback; @@ -33754,7 +31345,6 @@ Lorg/signal/core/util/CharacterIterable$AndroidIcuBreakIterator; Lorg/signal/core/util/CharacterIterable$BreakIteratorCompat; Lorg/signal/core/util/CharacterIterable$CharacterIterator; Lorg/signal/core/util/CharacterIterable; -Lorg/signal/core/util/CollectionsExtensionsKt; Lorg/signal/core/util/Conversions; Lorg/signal/core/util/CryptoUtil; Lorg/signal/core/util/CursorExtensionsKt; @@ -33774,7 +31364,6 @@ Lorg/signal/core/util/Hex; Lorg/signal/core/util/InsertBuilderPart1; Lorg/signal/core/util/InsertBuilderPart2; Lorg/signal/core/util/IntSerializer; -Lorg/signal/core/util/ListUtil; Lorg/signal/core/util/LongSerializer; Lorg/signal/core/util/MapUtil; Lorg/signal/core/util/MemoryTracker$$ExternalSyntheticLambda1; @@ -33795,10 +31384,7 @@ Lorg/signal/core/util/ShakeDetector$Listener; Lorg/signal/core/util/ShakeDetector$SamplePool; Lorg/signal/core/util/ShakeDetector$SampleQueue; Lorg/signal/core/util/ShakeDetector; -Lorg/signal/core/util/SqlUtil$$ExternalSyntheticLambda0; -Lorg/signal/core/util/SqlUtil$CollectionOperator; Lorg/signal/core/util/SqlUtil$Query; -Lorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1; Lorg/signal/core/util/SqlUtil; Lorg/signal/core/util/Stopwatch$Split; Lorg/signal/core/util/Stopwatch$stopAndGetLogString$splitString$1; @@ -33808,7 +31394,6 @@ Lorg/signal/core/util/StringExtensionsKt; Lorg/signal/core/util/StringSerializer; Lorg/signal/core/util/StringUtil; Lorg/signal/core/util/ThreadUtil; -Lorg/signal/core/util/ToolbarExtensionsKt; Lorg/signal/core/util/UpdateAllBuilderPart1; Lorg/signal/core/util/UpdateAllBuilderPart2; Lorg/signal/core/util/UpdateBuilderPart1; @@ -33824,13 +31409,9 @@ Lorg/signal/core/util/concurrent/DeadlockDetector; Lorg/signal/core/util/concurrent/FutureMapTransformer; Lorg/signal/core/util/concurrent/FutureTransformers$Transformer; Lorg/signal/core/util/concurrent/FutureTransformers; -Lorg/signal/core/util/concurrent/LatestPrioritizedSerialExecutor; Lorg/signal/core/util/concurrent/LifecycleDisposable; Lorg/signal/core/util/concurrent/LifecycleDisposableKt; Lorg/signal/core/util/concurrent/ListenableFuture; -Lorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1; -Lorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$2; -Lorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$3; Lorg/signal/core/util/concurrent/RxExtensions; Lorg/signal/core/util/concurrent/SettableFuture; Lorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda0; @@ -33901,6 +31482,9 @@ Lorg/signal/glide/common/decode/FrameSeqDecoder; Lorg/signal/libsignal/internal/Native; Lorg/signal/libsignal/internal/NativeHandleGuard$Owner; Lorg/signal/libsignal/internal/NativeHandleGuard; +Lorg/signal/libsignal/net/CdsiLookupResponse$Entry; +Lorg/signal/libsignal/net/CdsiLookupResponse; +Lorg/signal/libsignal/net/Network$Environment; Lorg/signal/libsignal/protocol/IdentityKey; Lorg/signal/libsignal/protocol/IdentityKeyPair; Lorg/signal/libsignal/protocol/InvalidKeyException; @@ -33947,13 +31531,11 @@ 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; @@ -34046,7 +31628,6 @@ Lorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda9; Lorg/thoughtcrime/securesms/ApplicationContext$1; Lorg/thoughtcrime/securesms/ApplicationContext; Lorg/thoughtcrime/securesms/BaseActivity; -Lorg/thoughtcrime/securesms/BindableConversationItem$EventListener; Lorg/thoughtcrime/securesms/BindableConversationItem; Lorg/thoughtcrime/securesms/BindableConversationListItem; Lorg/thoughtcrime/securesms/BuildConfig; @@ -34074,7 +31655,6 @@ Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparato Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; Lorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion; Lorg/thoughtcrime/securesms/attachments/PointerAttachment; -Lorg/thoughtcrime/securesms/audio/AudioFileInfo; Lorg/thoughtcrime/securesms/audio/AudioHash; Lorg/thoughtcrime/securesms/audio/AudioRecordingHandler; Lorg/thoughtcrime/securesms/avatar/Avatar$Companion; @@ -34092,16 +31672,10 @@ Lorg/thoughtcrime/securesms/avatar/Avatars$DefaultAvatar; Lorg/thoughtcrime/securesms/avatar/Avatars$ForegroundColor; 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/badges/BadgeImageView; Lorg/thoughtcrime/securesms/badges/gifts/GiftMessageView$Callback; Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift; -Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$Companion; -Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2; -Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4; -Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1; -Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration; Lorg/thoughtcrime/securesms/badges/models/Badge; Lorg/thoughtcrime/securesms/blurhash/Base83; Lorg/thoughtcrime/securesms/blurhash/BlurHash$1; @@ -34110,20 +31684,7 @@ 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; -Lorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/components/AudioView$Callbacks; -Lorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener; -Lorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener; -Lorg/thoughtcrime/securesms/components/AudioView; Lorg/thoughtcrime/securesms/components/AvatarImageView$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions$Builder; Lorg/thoughtcrime/securesms/components/AvatarImageView$AvatarOptions; @@ -34131,40 +31692,20 @@ 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$CursorPositionChangedListener; Lorg/thoughtcrime/securesms/components/ComposeText$QueryStart; -Lorg/thoughtcrime/securesms/components/ComposeText$StylingChangedListener; Lorg/thoughtcrime/securesms/components/ComposeText; Lorg/thoughtcrime/securesms/components/ComposeTextStyleWatcher; Lorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda0; 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; Lorg/thoughtcrime/securesms/components/DeliveryStatusView$State; Lorg/thoughtcrime/securesms/components/DeliveryStatusView; Lorg/thoughtcrime/securesms/components/ExpirationTimerView; Lorg/thoughtcrime/securesms/components/FromTextView; -Lorg/thoughtcrime/securesms/components/HidingLinearLayout; Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout; -Lorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda5; -Lorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda6; -Lorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda7; -Lorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda8; -Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener; -Lorg/thoughtcrime/securesms/components/InputPanel$RecordTime; -Lorg/thoughtcrime/securesms/components/InputPanel$SlideToCancel; Lorg/thoughtcrime/securesms/components/InputPanel; Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$Companion; @@ -34177,7 +31718,6 @@ Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuide Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout; Lorg/thoughtcrime/securesms/components/KeyboardAwareLinearLayout$OnKeyboardShownListener; Lorg/thoughtcrime/securesms/components/LinkPreviewView$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/components/LinkPreviewView$CloseClickedListener; Lorg/thoughtcrime/securesms/components/LinkPreviewView; Lorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState$Creator; Lorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState; @@ -34185,44 +31725,20 @@ Lorg/thoughtcrime/securesms/components/Material3SearchToolbar$$ExternalSynthetic Lorg/thoughtcrime/securesms/components/Material3SearchToolbar$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/components/Material3SearchToolbar$special$$inlined$addTextChangedListener$default$1; Lorg/thoughtcrime/securesms/components/Material3SearchToolbar; -Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView$FloatingRecordButton; -Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView$LockDropTarget; -Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State; -Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView; Lorg/thoughtcrime/securesms/components/Outliner; Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView; -Lorg/thoughtcrime/securesms/components/ProgressCardDialogFragment; Lorg/thoughtcrime/securesms/components/QuoteView$$ExternalSyntheticLambda7; 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; -Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$5; -Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion; -Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$DefaultScrollStrategy; Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollStrategy; -Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest; -Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1; -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; Lorg/thoughtcrime/securesms/components/ViewBinderDelegate; -Lorg/thoughtcrime/securesms/components/WaveFormSeekBarView; Lorg/thoughtcrime/securesms/components/emoji/AnimatingImageSpan; Lorg/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel; Lorg/thoughtcrime/securesms/components/emoji/Emoji; @@ -34241,10 +31757,8 @@ Lorg/thoughtcrime/securesms/components/emoji/EmojiSpan; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; -Lorg/thoughtcrime/securesms/components/emoji/EmojiToggle$1; Lorg/thoughtcrime/securesms/components/emoji/EmojiToggle; Lorg/thoughtcrime/securesms/components/emoji/MediaKeyboard$MediaKeyboardListener; -Lorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel; Lorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView; Lorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel$$ExternalSyntheticLambda0; @@ -34267,8 +31781,6 @@ Lorg/thoughtcrime/securesms/components/menu/ActionItem; Lorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar$enterAnimation$2; Lorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar$exitAnimation$2; Lorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar; -Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion; -Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1; Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1; @@ -34284,6 +31796,7 @@ Lorg/thoughtcrime/securesms/components/reminder/PushRegistrationReminder; Lorg/thoughtcrime/securesms/components/reminder/Reminder; Lorg/thoughtcrime/securesms/components/reminder/ServiceOutageReminder; Lorg/thoughtcrime/securesms/components/reminder/UnauthorizedReminder; +Lorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion$WhenMappings; Lorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder$Companion; Lorg/thoughtcrime/securesms/components/reminder/UsernameOutOfSyncReminder; Lorg/thoughtcrime/securesms/components/settings/app/notifications/profiles/NotificationProfilesRepository$getProfiles$1; @@ -34301,22 +31814,6 @@ 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; @@ -34341,7 +31838,6 @@ Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackState; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlayer; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlayerCallback$Companion; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlayerCallback; -Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlayerView$Listener; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlayerView; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager$HardwareSensorEventListener; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager$ProximityListener; @@ -34428,24 +31924,16 @@ Lorg/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel$controller$1; Lorg/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel$data$1; Lorg/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel$safetyNumberRepository$2; Lorg/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel; -Lorg/thoughtcrime/securesms/contacts/paged/collections/ContactSearchIterator; Lorg/thoughtcrime/securesms/contacts/sync/ContactDiscovery; Lorg/thoughtcrime/securesms/contactshare/Contact; Lorg/thoughtcrime/securesms/contactshare/ContactUtil; Lorg/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition; Lorg/thoughtcrime/securesms/conversation/ClipProjectionDrawable; -Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener; -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; -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$$ExternalSyntheticLambda6; -Lorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda9; Lorg/thoughtcrime/securesms/conversation/ConversationItem$1; Lorg/thoughtcrime/securesms/conversation/ConversationItem$AttachmentDownloadClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$ClickListener; @@ -34458,7 +31946,6 @@ 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; @@ -34466,26 +31953,8 @@ 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; -Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Callback; -Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider; -Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot; -Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu; -Lorg/thoughtcrime/securesms/conversation/ConversationReactionDelegate; -Lorg/thoughtcrime/securesms/conversation/ConversationReactionOverlay$OnActionSelectedListener; -Lorg/thoughtcrime/securesms/conversation/ConversationReactionOverlay$OnHideListener; -Lorg/thoughtcrime/securesms/conversation/ConversationRepository; Lorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel; Lorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter$EventListener; -Lorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter; -Lorg/thoughtcrime/securesms/conversation/ConversationTitleView$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/conversation/ConversationTitleView; Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$$ExternalSyntheticLambda1; @@ -34496,21 +31965,11 @@ 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; -Lorg/thoughtcrime/securesms/conversation/MessageSendType$Companion; -Lorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType$Creator; -Lorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType; -Lorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType; -Lorg/thoughtcrime/securesms/conversation/MessageSendType; Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result$Companion; Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; Lorg/thoughtcrime/securesms/conversation/MessageStyler; Lorg/thoughtcrime/securesms/conversation/ScheduleMessageDialogCallback; Lorg/thoughtcrime/securesms/conversation/ScheduleMessageTimePickerBottomSheet$ScheduleCallback; -Lorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository; -Lorg/thoughtcrime/securesms/conversation/SelectedConversationModel; -Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView; Lorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener$Companion; Lorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener; Lorg/thoughtcrime/securesms/conversation/colors/AvatarColor; @@ -34525,51 +31984,19 @@ 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; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; 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$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; -Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView$Companion; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView; Lorg/thoughtcrime/securesms/conversation/mutiselect/Multiselectable; Lorg/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardBottomSheet$Callback; -Lorg/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs; Lorg/thoughtcrime/securesms/conversation/ui/error/EnableCallNotificationSettingsDialog$Callback; -Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2; -Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsPopup$Callback; -Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$1; -Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Companion; -Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2; -Lorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2; -Lorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract$Companion; -Lorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract; -Lorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener; -Lorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener; Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$Companion; Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$special$$inlined$viewModels$default$1; @@ -34580,61 +32007,13 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$special$$inline Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$special$$inlined$viewModels$default$6; Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$stripeRepository$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Callbacks; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Companion; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$ContactShareEditor; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$GifSearch; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaCapture; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaGallery; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaSelection; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectContact; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectFile; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectLocation; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$cameraLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$contactShareLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$gifSearchLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaGalleryLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaSelectionLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectContactLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectFileLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectLocationLauncher$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda5; -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; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reminderStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reviewBannerStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$unverifiedBannerStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$voiceNotePlayerStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda10; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda11; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda24; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ActionModeCallback; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ActivityResultCallbacks; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$AttachmentManagerListener; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$Companion; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ComposeTextEventsListener; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationItemClickListener; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback; -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; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$WhenMappings; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$args$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$3; @@ -34642,35 +32021,14 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGro Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationRecipientRepository$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$draftViewModel$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$3; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$4; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$inlineQueryController$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$jumpAndPulseScrollStrategy$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestViewModel$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$motionEventRelay$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$moveToStartPosition$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1; -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; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$conversationToolbarOnScrollHelper$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$reactionDelegate$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$recentEmojis$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$registerForResults$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$scheduledMessagesStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$searchViewModel$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1; @@ -34691,28 +32049,6 @@ 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$UnreadState$CompleteUnreadState; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$InitialUnreadState; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1$$ExternalSyntheticLambda0; -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$Companion; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$Companion; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$TooltipViewModel; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inlined$viewModels$default$1; @@ -34721,135 +32057,17 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inline Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inlined$viewModels$default$4; 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; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda3; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1; -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$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/IdentityRecordsState; -Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState; Lorg/thoughtcrime/securesms/conversation/v2/MessageRequestViewModel; Lorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay; -Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState; Lorg/thoughtcrime/securesms/conversation/v2/ShareDataTimestampViewModel; Lorg/thoughtcrime/securesms/conversation/v2/StickerSuggestionsViewModel; -Lorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate; -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; -Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia; -Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageBackedKey; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda3; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda5; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda6; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda7; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult; -Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher; -Lorg/thoughtcrime/securesms/conversation/v2/data/OutgoingMedia; -Lorg/thoughtcrime/securesms/conversation/v2/data/OutgoingTextOnly; -Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader; -Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeaderKey; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$Companion; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1; -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$updateGroupStateIfNeeded$1; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel; -Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsDrawableInvalidator; -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$$ExternalSyntheticLambda7; -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$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; Lorg/thoughtcrime/securesms/conversationlist/ConversationFilterBehavior; @@ -34944,6 +32162,7 @@ Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$Factory; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$conversationsState$1; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$filterRequestState$1; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$megaphoneState$1; +Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onMegaphoneCompleted$1; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$onVisible$1$1; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$pagedData$1; Lorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel$pagedData$2; @@ -35003,9 +32222,6 @@ Lorg/thoughtcrime/securesms/crypto/ReentrantSessionLock$$ExternalSyntheticLambda Lorg/thoughtcrime/securesms/crypto/ReentrantSessionLock; Lorg/thoughtcrime/securesms/crypto/SenderKeyUtil; Lorg/thoughtcrime/securesms/crypto/storage/PreKeyMetadataStore; -Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$Cache; Lorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore; @@ -35032,27 +32248,22 @@ Lorg/thoughtcrime/securesms/database/CallTable$Call; Lorg/thoughtcrime/securesms/database/CallTable$Companion; 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; Lorg/thoughtcrime/securesms/database/CdsTable$Companion; Lorg/thoughtcrime/securesms/database/CdsTable; Lorg/thoughtcrime/securesms/database/ChatColorsTable$Companion; Lorg/thoughtcrime/securesms/database/ChatColorsTable; 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$$ExternalSyntheticLambda23; -Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda24; -Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda28; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda29; -Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda30; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda37; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda40; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda5; -Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver; Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer; Lorg/thoughtcrime/securesms/database/DatabaseObserver; Lorg/thoughtcrime/securesms/database/DatabaseTable; @@ -35075,7 +32286,6 @@ Lorg/thoughtcrime/securesms/database/GroupReceiptTable; Lorg/thoughtcrime/securesms/database/GroupTable$Companion; Lorg/thoughtcrime/securesms/database/GroupTable$MembershipTable$Companion; Lorg/thoughtcrime/securesms/database/GroupTable$MembershipTable; -Lorg/thoughtcrime/securesms/database/GroupTable$Reader; Lorg/thoughtcrime/securesms/database/GroupTable$ShowAsStoryState$Companion; Lorg/thoughtcrime/securesms/database/GroupTable$ShowAsStoryState; Lorg/thoughtcrime/securesms/database/GroupTable; @@ -35136,7 +32346,6 @@ Lorg/thoughtcrime/securesms/database/MessageTable$MessageQualifier; Lorg/thoughtcrime/securesms/database/MessageTable$MmsReader$Companion; Lorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator; Lorg/thoughtcrime/securesms/database/MessageTable$MmsReader; -Lorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor; Lorg/thoughtcrime/securesms/database/MessageTable$Reader; Lorg/thoughtcrime/securesms/database/MessageTable$SyncMessageId; Lorg/thoughtcrime/securesms/database/MessageTable$WhenMappings; @@ -35216,7 +32425,6 @@ Lorg/thoughtcrime/securesms/database/RemoteMegaphoneTable; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver; -Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversationList$2; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversationListFlowable$1; Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$notificationProfiles$2; @@ -35226,7 +32434,6 @@ Lorg/thoughtcrime/securesms/database/RxDatabaseObserver; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda10; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda11; -Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda12; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda13; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda14; Lorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda15; @@ -35267,15 +32474,15 @@ Lorg/thoughtcrime/securesms/database/ThreadBodyUtil$ThreadBody; Lorg/thoughtcrime/securesms/database/ThreadBodyUtil; Lorg/thoughtcrime/securesms/database/ThreadIdDatabaseReference; Lorg/thoughtcrime/securesms/database/ThreadTable$Companion; -Lorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata; Lorg/thoughtcrime/securesms/database/ThreadTable$Extra$Companion; Lorg/thoughtcrime/securesms/database/ThreadTable$Extra; Lorg/thoughtcrime/securesms/database/ThreadTable$ReadStatus$Companion; Lorg/thoughtcrime/securesms/database/ThreadTable$ReadStatus; Lorg/thoughtcrime/securesms/database/ThreadTable$Reader; Lorg/thoughtcrime/securesms/database/ThreadTable$StaticReader; +Lorg/thoughtcrime/securesms/database/ThreadTable$ThreadIdResult; Lorg/thoughtcrime/securesms/database/ThreadTable$WhenMappings; -Lorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdFor$1; +Lorg/thoughtcrime/securesms/database/ThreadTable$getOrCreateThreadIdResultFor$1; Lorg/thoughtcrime/securesms/database/ThreadTable$update$1$isPinned$2; Lorg/thoughtcrime/securesms/database/ThreadTable$update$1$shouldDelete$2; Lorg/thoughtcrime/securesms/database/ThreadTable$update$1; @@ -35292,7 +32499,6 @@ Lorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$Ex Lorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline22; Lorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline3; Lorg/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations$$ExternalSyntheticApiModelOutline6; -Lorg/thoughtcrime/securesms/database/identity/IdentityRecordList; Lorg/thoughtcrime/securesms/database/model/AvatarPickerDatabase$Companion; Lorg/thoughtcrime/securesms/database/model/AvatarPickerDatabase; Lorg/thoughtcrime/securesms/database/model/BodyRangeListSerializerKt; @@ -35302,7 +32508,6 @@ Lorg/thoughtcrime/securesms/database/model/DistributionListId; Lorg/thoughtcrime/securesms/database/model/DistributionListPrivacyMode$Serializer; Lorg/thoughtcrime/securesms/database/model/DistributionListPrivacyMode; Lorg/thoughtcrime/securesms/database/model/EmojiSearchData; -Lorg/thoughtcrime/securesms/database/model/GroupRecord; Lorg/thoughtcrime/securesms/database/model/IdentityRecord; Lorg/thoughtcrime/securesms/database/model/IdentityStoreRecord; Lorg/thoughtcrime/securesms/database/model/LocalMetricsEvent$WhenMappings; @@ -35317,16 +32522,6 @@ Lorg/thoughtcrime/securesms/database/model/MessageId$Creator; Lorg/thoughtcrime/securesms/database/model/MessageId; Lorg/thoughtcrime/securesms/database/model/MessageRecord$InviteAddState; Lorg/thoughtcrime/securesms/database/model/MessageRecord; -Lorg/thoughtcrime/securesms/database/model/MessageRecordExtensionsKt; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda3; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda4; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda5; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda6; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda7; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda8; -Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda9; Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord; Lorg/thoughtcrime/securesms/database/model/ParentStoryId$Companion; Lorg/thoughtcrime/securesms/database/model/ParentStoryId; @@ -35341,14 +32536,8 @@ Lorg/thoughtcrime/securesms/database/model/RecipientRecord; Lorg/thoughtcrime/securesms/database/model/RemoteMegaphoneRecord$ActionId$Companion; Lorg/thoughtcrime/securesms/database/model/RemoteMegaphoneRecord$ActionId; Lorg/thoughtcrime/securesms/database/model/RemoteMegaphoneRecord; -Lorg/thoughtcrime/securesms/database/model/StickerRecord; Lorg/thoughtcrime/securesms/database/model/StoryType$Companion; Lorg/thoughtcrime/securesms/database/model/StoryType; -Lorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda3; -Lorg/thoughtcrime/securesms/database/model/StoryViewState$Companion; -Lorg/thoughtcrime/securesms/database/model/StoryViewState; Lorg/thoughtcrime/securesms/database/model/ThreadRecord$Builder; Lorg/thoughtcrime/securesms/database/model/ThreadRecord; Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$Builder; @@ -35362,15 +32551,9 @@ 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/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$Provider; Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencies; @@ -35435,8 +32618,6 @@ Lorg/thoughtcrime/securesms/emoji/JumboEmoji$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/emoji/JumboEmoji$$ExternalSyntheticLambda5; Lorg/thoughtcrime/securesms/emoji/JumboEmoji; Lorg/thoughtcrime/securesms/emoji/ParsedEmojiData; -Lorg/thoughtcrime/securesms/events/GroupCallPeekEvent; -Lorg/thoughtcrime/securesms/events/PartProgressEvent; Lorg/thoughtcrime/securesms/events/ReminderUpdateEvent; Lorg/thoughtcrime/securesms/events/WebRtcViewModel; Lorg/thoughtcrime/securesms/fonts/FontFileMap$Companion; @@ -35462,17 +32643,7 @@ Lorg/thoughtcrime/securesms/fonts/TextFont$Companion; Lorg/thoughtcrime/securesms/fonts/TextFont; Lorg/thoughtcrime/securesms/gcm/FcmFetchManager; Lorg/thoughtcrime/securesms/giph/model/ChunkedImageUrl; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration; Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4Playable; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackPolicy; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler; -Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer; Lorg/thoughtcrime/securesms/glide/BadgeLoader$Factory; Lorg/thoughtcrime/securesms/glide/BadgeLoader; Lorg/thoughtcrime/securesms/glide/ChunkedImageUrlLoader$Factory; @@ -35497,14 +32668,11 @@ Lorg/thoughtcrime/securesms/glide/cache/EncryptedGifDrawableResourceEncoder; Lorg/thoughtcrime/securesms/glide/cache/WebpSanDecoder$Companion; Lorg/thoughtcrime/securesms/glide/cache/WebpSanDecoder; Lorg/thoughtcrime/securesms/groups/BadGroupIdException; -Lorg/thoughtcrime/securesms/groups/GroupChangeBusyException; Lorg/thoughtcrime/securesms/groups/GroupChangeException; -Lorg/thoughtcrime/securesms/groups/GroupChangeFailedException; Lorg/thoughtcrime/securesms/groups/GroupId; Lorg/thoughtcrime/securesms/groups/GroupNotAMemberException; Lorg/thoughtcrime/securesms/groups/SelectionLimits$1; Lorg/thoughtcrime/securesms/groups/SelectionLimits; -Lorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository; Lorg/thoughtcrime/securesms/jobmanager/AlarmManagerScheduler$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/jobmanager/CompositeScheduler; Lorg/thoughtcrime/securesms/jobmanager/Constraint$-CC; @@ -35542,13 +32710,13 @@ Lorg/thoughtcrime/securesms/jobmanager/JobController$Callback; Lorg/thoughtcrime/securesms/jobmanager/JobController; Lorg/thoughtcrime/securesms/jobmanager/JobInstantiator; Lorg/thoughtcrime/securesms/jobmanager/JobLogger; -Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda10; -Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda14; -Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda15; +Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda11; +Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda16; Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda17; -Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda5; -Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda7; +Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda19; +Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda6; Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda8; Lorg/thoughtcrime/securesms/jobmanager/JobManager$$ExternalSyntheticLambda9; Lorg/thoughtcrime/securesms/jobmanager/JobManager$Chain; @@ -35820,15 +32988,17 @@ Lorg/thoughtcrime/securesms/jobs/ThreadUpdateJob; Lorg/thoughtcrime/securesms/jobs/TrimThreadJob$Factory; Lorg/thoughtcrime/securesms/jobs/TypingSendJob$Factory; Lorg/thoughtcrime/securesms/jobs/UnableToStartException; -Lorg/thoughtcrime/securesms/keyboard/KeyboardPage; -Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion$ADAPTER$1; +Lorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData$Companion; +Lorg/thoughtcrime/securesms/jobs/protos/PreKeysSyncJobData; Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel; Lorg/thoughtcrime/securesms/keyboard/emoji/EmojiKeyboardPageFragment$Callback; Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchFragment$Callback; -Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository; Lorg/thoughtcrime/securesms/keyboard/gif/GifKeyboardPageFragment$Host; Lorg/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardPageFragment$Callback; Lorg/thoughtcrime/securesms/keyvalue/AccountValues$Companion; +Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState$Companion; +Lorg/thoughtcrime/securesms/keyvalue/AccountValues$UsernameSyncState; Lorg/thoughtcrime/securesms/keyvalue/AccountValues$aciPreKeys$1; Lorg/thoughtcrime/securesms/keyvalue/AccountValues$pniPreKeys$1; Lorg/thoughtcrime/securesms/keyvalue/AccountValues; @@ -35930,6 +33100,7 @@ Lorg/thoughtcrime/securesms/mediasend/Media$1; Lorg/thoughtcrime/securesms/mediasend/Media; Lorg/thoughtcrime/securesms/megaphone/ForeverSchedule; Lorg/thoughtcrime/securesms/megaphone/Megaphone$Builder; +Lorg/thoughtcrime/securesms/megaphone/Megaphone$EventListener; Lorg/thoughtcrime/securesms/megaphone/Megaphone$Style; Lorg/thoughtcrime/securesms/megaphone/Megaphone; Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController; @@ -35944,29 +33115,27 @@ Lorg/thoughtcrime/securesms/megaphone/MegaphoneRepository$$ExternalSyntheticLamb Lorg/thoughtcrime/securesms/megaphone/MegaphoneRepository$Callback; Lorg/thoughtcrime/securesms/megaphone/MegaphoneRepository; Lorg/thoughtcrime/securesms/megaphone/MegaphoneSchedule; +Lorg/thoughtcrime/securesms/megaphone/MegaphoneText$Companion; +Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; Lorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder$1; Lorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder; -Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda17; -Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda18; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda19; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda20; -Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda2; -Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda3; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda21; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda22; Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda5; Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda6; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda7; +Lorg/thoughtcrime/securesms/megaphone/Megaphones$$ExternalSyntheticLambda8; Lorg/thoughtcrime/securesms/megaphone/Megaphones$1; Lorg/thoughtcrime/securesms/megaphone/Megaphones$3; Lorg/thoughtcrime/securesms/megaphone/Megaphones$Event; Lorg/thoughtcrime/securesms/megaphone/Megaphones; Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$ActionClickListener; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$AddPhotoCardViewHolder; Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardAdapter; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder$$ExternalSyntheticLambda1; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$CardViewHolder; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$GroupCardViewHolder; -Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView$InviteCardViewHolder; Lorg/thoughtcrime/securesms/megaphone/OnboardingMegaphoneView; Lorg/thoughtcrime/securesms/megaphone/PinsForAllSchedule; Lorg/thoughtcrime/securesms/megaphone/RecurringSchedule; @@ -35982,13 +33151,6 @@ Lorg/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository$snooze$1; Lorg/thoughtcrime/securesms/megaphone/RemoteMegaphoneRepository; Lorg/thoughtcrime/securesms/megaphone/SignalPinReminderSchedule; Lorg/thoughtcrime/securesms/messageprocessingalarm/RoutineMessageFetchReceiver; -Lorg/thoughtcrime/securesms/messagerequests/GroupInfo$Companion; -Lorg/thoughtcrime/securesms/messagerequests/GroupInfo; -Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo; -Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; -Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$Companion; -Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State; -Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver$2; Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver$BackgroundService$Companion; @@ -36035,6 +33197,7 @@ Lorg/thoughtcrime/securesms/migrations/PinOptOutMigration$Factory; Lorg/thoughtcrime/securesms/migrations/PinReminderMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/PniAccountInitializationMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/PniMigrationJob$Factory; +Lorg/thoughtcrime/securesms/migrations/PnpLaunchMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/PreKeysSyncMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/ProfileMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/ProfileSharingUpdateMigrationJob$Factory; @@ -36058,11 +33221,8 @@ Lorg/thoughtcrime/securesms/migrations/TrimByLengthSettingsMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/UpdateSmsJobsMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/UserNotificationMigrationJob$Factory; Lorg/thoughtcrime/securesms/migrations/UuidMigrationJob$Factory; -Lorg/thoughtcrime/securesms/mms/AttachmentManager$AttachmentListener; -Lorg/thoughtcrime/securesms/mms/AttachmentManager; Lorg/thoughtcrime/securesms/mms/AttachmentStreamUriLoader$AttachmentModel; Lorg/thoughtcrime/securesms/mms/AttachmentStreamUriLoader$Factory; -Lorg/thoughtcrime/securesms/mms/AudioSlide; Lorg/thoughtcrime/securesms/mms/DecryptableStreamUriLoader$DecryptableUri; Lorg/thoughtcrime/securesms/mms/DecryptableStreamUriLoader$Factory; Lorg/thoughtcrime/securesms/mms/GifSlide; @@ -36082,12 +33242,9 @@ 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; Lorg/thoughtcrime/securesms/mms/StickerSlide; -Lorg/thoughtcrime/securesms/mms/TextSlide; Lorg/thoughtcrime/securesms/net/ContentProxySafetyInterceptor; Lorg/thoughtcrime/securesms/net/ContentProxySelector$1; Lorg/thoughtcrime/securesms/net/ContentProxySelector; @@ -36108,7 +33265,6 @@ Lorg/thoughtcrime/securesms/net/StandardUserAgentInterceptor; Lorg/thoughtcrime/securesms/net/StaticDns; Lorg/thoughtcrime/securesms/net/UserAgentInterceptor; Lorg/thoughtcrime/securesms/notifications/Configuration; -Lorg/thoughtcrime/securesms/notifications/MessageNotifier; Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheticApiModelOutline0; Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheticApiModelOutline1; Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheticApiModelOutline2; @@ -36119,7 +33275,6 @@ Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheti Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheticLambda11; Lorg/thoughtcrime/securesms/notifications/NotificationChannels$$ExternalSyntheticLambda17; Lorg/thoughtcrime/securesms/notifications/NotificationChannels; -Lorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier; Lorg/thoughtcrime/securesms/notifications/SlowNotificationHeuristics; Lorg/thoughtcrime/securesms/notifications/VitalsViewModel$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/notifications/VitalsViewModel$1; @@ -36127,23 +33282,10 @@ Lorg/thoughtcrime/securesms/notifications/VitalsViewModel$State; Lorg/thoughtcrime/securesms/notifications/VitalsViewModel; Lorg/thoughtcrime/securesms/notifications/profiles/NotificationProfile; Lorg/thoughtcrime/securesms/notifications/profiles/NotificationProfiles; -Lorg/thoughtcrime/securesms/notifications/v2/CancelableExecutor; -Lorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion; -Lorg/thoughtcrime/securesms/notifications/v2/ConversationId$Creator; -Lorg/thoughtcrime/securesms/notifications/v2/ConversationId; -Lorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion; -Lorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier; -Lorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion; -Lorg/thoughtcrime/securesms/notifications/v2/NotificationState$messageCount$2; -Lorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationIds$2; -Lorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationItems$2; -Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; Lorg/thoughtcrime/securesms/payments/Payment; -Lorg/thoughtcrime/securesms/payments/PaymentsAddressException; Lorg/thoughtcrime/securesms/permissions/Permissions$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/permissions/Permissions; Lorg/thoughtcrime/securesms/pin/SvrRepository; -Lorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference; Lorg/thoughtcrime/securesms/profiles/AvatarHelper; Lorg/thoughtcrime/securesms/profiles/ProfileName$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/profiles/ProfileName$$ExternalSyntheticLambda1; @@ -36174,11 +33316,9 @@ Lorg/thoughtcrime/securesms/push/SignalServiceNetworkAccess$WhenMappings; Lorg/thoughtcrime/securesms/push/SignalServiceNetworkAccess; Lorg/thoughtcrime/securesms/push/SignalServiceTrustStore; Lorg/thoughtcrime/securesms/ratelimit/RateLimitUtil; -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$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda5; @@ -36259,16 +33399,11 @@ Lorg/thoughtcrime/securesms/sms/GroupV2UpdateMessageUtil; Lorg/thoughtcrime/securesms/sms/MessageSender$MessageSentEvent; Lorg/thoughtcrime/securesms/stickers/StickerEventListener; Lorg/thoughtcrime/securesms/stickers/StickerLocator; -Lorg/thoughtcrime/securesms/stickers/StickerPackInstallEvent; Lorg/thoughtcrime/securesms/stickers/StickerRemoteUri; Lorg/thoughtcrime/securesms/stickers/StickerRemoteUriLoader$Factory; -Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$$ExternalSyntheticLambda0; -Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback; -Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository; Lorg/thoughtcrime/securesms/storage/StorageKeyGenerator; Lorg/thoughtcrime/securesms/storage/StorageSyncHelper$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/storage/StorageSyncHelper; -Lorg/thoughtcrime/securesms/stories/Stories$MediaTransform$SendRequirements; Lorg/thoughtcrime/securesms/stories/Stories; Lorg/thoughtcrime/securesms/stories/StoryTextPostModel$Decoder$Companion; Lorg/thoughtcrime/securesms/stories/StoryTextPostModel$Decoder; @@ -36326,7 +33461,6 @@ Lorg/thoughtcrime/securesms/util/CachedInflater$ViewCache$$ExternalSyntheticLamb Lorg/thoughtcrime/securesms/util/CachedInflater$ViewCache$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/util/CachedInflater$ViewCache; Lorg/thoughtcrime/securesms/util/CachedInflater; -Lorg/thoughtcrime/securesms/util/CharacterCalculator; Lorg/thoughtcrime/securesms/util/ConfigurationUtil; Lorg/thoughtcrime/securesms/util/ContextUtil; Lorg/thoughtcrime/securesms/util/ConversationShortcutPhoto$Loader$Factory; @@ -36349,15 +33483,12 @@ Lorg/thoughtcrime/securesms/util/FeatureFlags$OnFlagChange; Lorg/thoughtcrime/securesms/util/FeatureFlags; Lorg/thoughtcrime/securesms/util/FrameRateTracker$1; Lorg/thoughtcrime/securesms/util/FrameRateTracker; -Lorg/thoughtcrime/securesms/util/FullscreenHelper$$ExternalSyntheticApiModelOutline0; -Lorg/thoughtcrime/securesms/util/FullscreenHelper; Lorg/thoughtcrime/securesms/util/FutureTaskListener; Lorg/thoughtcrime/securesms/util/IOFunction; Lorg/thoughtcrime/securesms/util/JavaTimeExtensionsKt; Lorg/thoughtcrime/securesms/util/JsonUtils$SaneJSONObject; Lorg/thoughtcrime/securesms/util/JsonUtils; Lorg/thoughtcrime/securesms/util/LRUCache; -Lorg/thoughtcrime/securesms/util/LeakyBucketLimiter; Lorg/thoughtcrime/securesms/util/ListenableFutureTask$2; Lorg/thoughtcrime/securesms/util/ListenableFutureTask; Lorg/thoughtcrime/securesms/util/LocalMetrics$$ExternalSyntheticLambda0; @@ -36367,8 +33498,6 @@ 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$1; Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$2; Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$3; @@ -36381,18 +33510,14 @@ Lorg/thoughtcrime/securesms/util/MediaUtil; Lorg/thoughtcrime/securesms/util/MessageRecordUtil; Lorg/thoughtcrime/securesms/util/NameUtil; Lorg/thoughtcrime/securesms/util/NetworkUtil; -Lorg/thoughtcrime/securesms/util/NoCrossfadeChangeDefaultAnimator; Lorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda2; 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; -Lorg/thoughtcrime/securesms/util/PushCharacterCalculator; Lorg/thoughtcrime/securesms/util/RemoteDeprecation; Lorg/thoughtcrime/securesms/util/SavedStateViewModelFactory$Companion$factoryProducer$1; Lorg/thoughtcrime/securesms/util/SavedStateViewModelFactory$Companion; @@ -36416,9 +33541,7 @@ Lorg/thoughtcrime/securesms/util/SnapToTopDataObserver; Lorg/thoughtcrime/securesms/util/SoftHashMap$SoftValue; Lorg/thoughtcrime/securesms/util/SoftHashMap; Lorg/thoughtcrime/securesms/util/StorageUtil; -Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; Lorg/thoughtcrime/securesms/util/TextSecurePreferences; -Lorg/thoughtcrime/securesms/util/ThemeUtil; Lorg/thoughtcrime/securesms/util/ThrottledDebouncer$OverflowHandler; Lorg/thoughtcrime/securesms/util/ThrottledDebouncer; Lorg/thoughtcrime/securesms/util/UrlClickHandler; @@ -36446,7 +33569,6 @@ 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; @@ -36456,7 +33578,6 @@ 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; @@ -36603,8 +33724,8 @@ Lorg/whispersystems/signalservice/internal/configuration/SignalSvr2Url; Lorg/whispersystems/signalservice/internal/configuration/SignalUrl; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda10; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda11; -Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda13; -Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda9; +Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda12; +Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$$ExternalSyntheticLambda14; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$1; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$2; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ConnectionHolder; @@ -36613,7 +33734,6 @@ Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ResponseCodeHa Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket; Lorg/whispersystems/signalservice/internal/push/VerifyAccountResponse; -Lorg/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException; Lorg/whispersystems/signalservice/internal/push/http/AcceptLanguagesUtil; Lorg/whispersystems/signalservice/internal/util/BlacklistingTrustManager$1; Lorg/whispersystems/signalservice/internal/util/BlacklistingTrustManager; @@ -36632,11 +33752,6 @@ Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Com Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Companion; Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage; Lorg/whispersystems/util/StringUtil; -Lrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda0; -Lrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda1; -Lrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda4; -Lrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda5; -Lrxdogtag2/DogTagMaybeObserver; Lrxdogtag2/DogTagObserver$$ExternalSyntheticLambda2; Lrxdogtag2/DogTagObserver$$ExternalSyntheticLambda3; Lrxdogtag2/DogTagObserver$$ExternalSyntheticLambda4; @@ -36675,7 +33790,9 @@ PLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;) PLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->clearObservers()V PLandroidx/activity/result/ActivityResultRegistry;->onSaveInstanceState(Landroid/os/Bundle;)V PLandroidx/appcompat/app/AppCompatActivity$1;->saveState()Landroid/os/Bundle; +PLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/appcompat/app/AppCompatDelegateImpl;->onSaveInstanceState(Landroid/os/Bundle;)V +PLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I PLandroidx/appcompat/app/ToolbarActionBar;->onDestroy()V PLandroidx/appcompat/view/SupportMenuInflater$MenuState;->addSubMenuItem()Landroid/view/SubMenu; PLandroidx/appcompat/view/SupportMenuInflater$MenuState;->newInstance(Ljava/lang/String;[Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object; @@ -36685,6 +33802,7 @@ PLandroidx/appcompat/view/menu/ActionMenuItemView;->getAccessibilityClassName()L PLandroidx/appcompat/view/menu/ActionMenuItemView;->getItemData()Landroidx/appcompat/view/menu/MenuItemImpl; PLandroidx/appcompat/view/menu/ActionMenuItemView;->hasText()Z PLandroidx/appcompat/view/menu/ActionMenuItemView;->prefersCondensedTitle()Z +PLandroidx/appcompat/view/menu/ActionMenuItemView;->setItemInvoker(Landroidx/appcompat/view/menu/MenuBuilder$ItemInvoker;)V PLandroidx/appcompat/view/menu/ActionMenuItemView;->setPopupCallback(Landroidx/appcompat/view/menu/ActionMenuItemView$PopupCallback;)V PLandroidx/appcompat/view/menu/BaseMenuPresenter;->addItemView(Landroid/view/View;I)V PLandroidx/appcompat/view/menu/BaseMenuPresenter;->filterLeftoverView(Landroid/view/ViewGroup;I)Z @@ -36702,8 +33820,10 @@ PLandroidx/appcompat/view/menu/MenuBuilder;->setHeaderTitleInt(Ljava/lang/CharSe PLandroidx/appcompat/view/menu/MenuItemImpl;->getContentDescription()Ljava/lang/CharSequence; PLandroidx/appcompat/view/menu/MenuItemImpl;->getGroupId()I PLandroidx/appcompat/view/menu/MenuItemImpl;->getSubMenu()Landroid/view/SubMenu; +PLandroidx/appcompat/view/menu/MenuItemImpl;->isEnabled()Z PLandroidx/appcompat/view/menu/MenuItemImpl;->setActionView(Landroid/view/View;)Landroid/view/MenuItem; PLandroidx/appcompat/view/menu/MenuItemImpl;->setActionView(Landroid/view/View;)Landroidx/core/internal/view/SupportMenuItem; +PLandroidx/appcompat/view/menu/MenuItemImpl;->setIconTintList(Landroid/content/res/ColorStateList;)Landroid/view/MenuItem; PLandroidx/appcompat/view/menu/MenuItemImpl;->setOnActionExpandListener(Landroid/view/MenuItem$OnActionExpandListener;)Landroid/view/MenuItem; PLandroidx/appcompat/view/menu/MenuItemImpl;->setShowAsAction(I)V PLandroidx/appcompat/view/menu/MenuItemImpl;->setSubMenu(Landroidx/appcompat/view/menu/SubMenuBuilder;)V @@ -36726,12 +33846,39 @@ PLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->()V PLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V 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/AppCompatBackgroundHelper;->onSetBackgroundResource(I)V +PLandroidx/appcompat/widget/AppCompatButton;->drawableStateChanged()V +PLandroidx/appcompat/widget/AppCompatButton;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V +PLandroidx/appcompat/widget/AppCompatButton;->onLayout(ZIIII)V PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintModeForDrawableRes(I)Landroid/graphics/PorterDuff$Mode; PLandroidx/appcompat/widget/AppCompatEditText;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; PLandroidx/appcompat/widget/AppCompatEmojiEditTextHelper;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; PLandroidx/appcompat/widget/AppCompatHintHelper;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroid/view/View;)Landroid/view/inputmethod/InputConnection; +PLandroidx/appcompat/widget/AppCompatImageButton;->drawableStateChanged()V +PLandroidx/appcompat/widget/AppCompatImageButton;->hasOverlappingRendering()Z +PLandroidx/appcompat/widget/AppCompatImageButton;->setBackgroundResource(I)V +PLandroidx/appcompat/widget/AppCompatProgressBarHelper;->()V +PLandroidx/appcompat/widget/AppCompatProgressBarHelper;->(Landroid/widget/ProgressBar;)V +PLandroidx/appcompat/widget/AppCompatProgressBarHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V +PLandroidx/appcompat/widget/AppCompatSeekBar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLandroidx/appcompat/widget/AppCompatSeekBar;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLandroidx/appcompat/widget/AppCompatSeekBar;->drawableStateChanged()V +PLandroidx/appcompat/widget/AppCompatSeekBar;->jumpDrawablesToCurrentState()V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->(Landroid/widget/SeekBar;)V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->applyTickMarkTint()V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->drawableStateChanged()V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->jumpDrawablesToCurrentState()V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V +PLandroidx/appcompat/widget/AppCompatSeekBarHelper;->setTickMark(Landroid/graphics/drawable/Drawable;)V PLandroidx/appcompat/widget/AppCompatTextHelper;->populateSurroundingTextIfNeeded(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V +PLandroidx/appcompat/widget/AppCompatTextView;->setBackgroundResource(I)V +PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I +PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/Insets;)I +PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline2;->m(Landroid/graphics/Insets;)I +PLandroidx/appcompat/widget/DrawableUtils$$ExternalSyntheticApiModelOutline3;->m(Landroid/graphics/Insets;)I +PLandroidx/appcompat/widget/FitWindowsFrameLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z PLandroidx/appcompat/widget/ForwardingListener;->onViewDetachedFromWindow(Landroid/view/View;)V +PLandroidx/appcompat/widget/LinearLayoutCompat;->getBaseline()I PLandroidx/appcompat/widget/ResourceManagerInternal;->addTintListToCache(Landroid/content/Context;ILandroid/content/res/ColorStateList;)V PLandroidx/appcompat/widget/ResourceManagerInternal;->getTintMode(I)Landroid/graphics/PorterDuff$Mode; PLandroidx/appcompat/widget/SearchView$10;->(Landroidx/appcompat/widget/SearchView;)V @@ -36763,16 +33910,71 @@ PLandroidx/appcompat/widget/SearchView;->updateSubmitArea()V PLandroidx/appcompat/widget/SearchView;->updateSubmitButton(Z)V PLandroidx/appcompat/widget/SearchView;->updateViewsVisibility(Z)V PLandroidx/appcompat/widget/SearchView;->updateVoiceButton(Z)V +PLandroidx/appcompat/widget/Toolbar$$ExternalSyntheticLambda0;->run()V PLandroidx/appcompat/widget/Toolbar$SavedState$1;->()V PLandroidx/appcompat/widget/Toolbar$SavedState;->()V PLandroidx/appcompat/widget/Toolbar$SavedState;->(Landroid/os/Parcelable;)V PLandroidx/appcompat/widget/Toolbar$SavedState;->writeToParcel(Landroid/os/Parcel;I)V +PLandroidx/appcompat/widget/Toolbar;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +PLandroidx/appcompat/widget/Toolbar;->getCurrentMenuItems()Ljava/util/ArrayList; +PLandroidx/appcompat/widget/Toolbar;->getMenuInflater()Landroid/view/MenuInflater; +PLandroidx/appcompat/widget/Toolbar;->invalidateMenu()V PLandroidx/appcompat/widget/Toolbar;->isOverflowMenuShowing()Z +PLandroidx/appcompat/widget/Toolbar;->onCreateMenu()V PLandroidx/appcompat/widget/Toolbar;->onDetachedFromWindow()V PLandroidx/appcompat/widget/Toolbar;->onSaveInstanceState()Landroid/os/Parcelable; +PLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(I)V +PLandroidx/appcompat/widget/Toolbar;->setNavigationContentDescription(Ljava/lang/CharSequence;)V +PLandroidx/appcompat/widget/Toolbar;->setNavigationIcon(I)V +PLandroidx/appcompat/widget/Toolbar;->setNavigationIcon(Landroid/graphics/drawable/Drawable;)V +PLandroidx/appcompat/widget/Toolbar;->setTitleTextColor(I)V +PLandroidx/appcompat/widget/Toolbar;->setTitleTextColor(Landroid/content/res/ColorStateList;)V +PLandroidx/cardview/R$styleable;->()V +PLandroidx/cardview/widget/CardView$1;->(Landroidx/cardview/widget/CardView;)V +PLandroidx/cardview/widget/CardView$1;->getCardBackground()Landroid/graphics/drawable/Drawable; +PLandroidx/cardview/widget/CardView$1;->getCardView()Landroid/view/View; +PLandroidx/cardview/widget/CardView$1;->getPreventCornerOverlap()Z +PLandroidx/cardview/widget/CardView$1;->getUseCompatPadding()Z +PLandroidx/cardview/widget/CardView$1;->setCardBackground(Landroid/graphics/drawable/Drawable;)V +PLandroidx/cardview/widget/CardView$1;->setShadowPadding(IIII)V +PLandroidx/cardview/widget/CardView;->()V +PLandroidx/cardview/widget/CardView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLandroidx/cardview/widget/CardView;->access$001(Landroidx/cardview/widget/CardView;IIII)V +PLandroidx/cardview/widget/CardView;->getCardBackgroundColor()Landroid/content/res/ColorStateList; +PLandroidx/cardview/widget/CardView;->getCardElevation()F +PLandroidx/cardview/widget/CardView;->getContentPaddingBottom()I +PLandroidx/cardview/widget/CardView;->getContentPaddingLeft()I +PLandroidx/cardview/widget/CardView;->getContentPaddingRight()I +PLandroidx/cardview/widget/CardView;->getContentPaddingTop()I +PLandroidx/cardview/widget/CardView;->getMaxCardElevation()F +PLandroidx/cardview/widget/CardView;->getPreventCornerOverlap()Z +PLandroidx/cardview/widget/CardView;->getUseCompatPadding()Z +PLandroidx/cardview/widget/CardView;->onMeasure(II)V +PLandroidx/cardview/widget/CardView;->setContentPadding(IIII)V +PLandroidx/cardview/widget/CardViewApi21Impl;->()V +PLandroidx/cardview/widget/CardViewApi21Impl;->getBackgroundColor(Landroidx/cardview/widget/CardViewDelegate;)Landroid/content/res/ColorStateList; +PLandroidx/cardview/widget/CardViewApi21Impl;->getCardBackground(Landroidx/cardview/widget/CardViewDelegate;)Landroidx/cardview/widget/RoundRectDrawable; +PLandroidx/cardview/widget/CardViewApi21Impl;->getElevation(Landroidx/cardview/widget/CardViewDelegate;)F +PLandroidx/cardview/widget/CardViewApi21Impl;->getMaxElevation(Landroidx/cardview/widget/CardViewDelegate;)F +PLandroidx/cardview/widget/CardViewApi21Impl;->getRadius(Landroidx/cardview/widget/CardViewDelegate;)F +PLandroidx/cardview/widget/CardViewApi21Impl;->initStatic()V +PLandroidx/cardview/widget/CardViewApi21Impl;->initialize(Landroidx/cardview/widget/CardViewDelegate;Landroid/content/Context;Landroid/content/res/ColorStateList;FFF)V +PLandroidx/cardview/widget/CardViewApi21Impl;->setMaxElevation(Landroidx/cardview/widget/CardViewDelegate;F)V +PLandroidx/cardview/widget/CardViewApi21Impl;->updatePadding(Landroidx/cardview/widget/CardViewDelegate;)V +PLandroidx/cardview/widget/RoundRectDrawable;->(Landroid/content/res/ColorStateList;F)V +PLandroidx/cardview/widget/RoundRectDrawable;->getColor()Landroid/content/res/ColorStateList; +PLandroidx/cardview/widget/RoundRectDrawable;->getPadding()F +PLandroidx/cardview/widget/RoundRectDrawable;->getRadius()F +PLandroidx/cardview/widget/RoundRectDrawable;->setBackground(Landroid/content/res/ColorStateList;)V +PLandroidx/cardview/widget/RoundRectDrawable;->setPadding(FZZ)V +PLandroidx/cardview/widget/RoundRectDrawable;->updateBounds(Landroid/graphics/Rect;)V +PLandroidx/cardview/widget/RoundRectDrawableWithShadow;->()V +PLandroidx/cardview/widget/RoundRectDrawableWithShadow;->calculateHorizontalPadding(FFZ)F +PLandroidx/cardview/widget/RoundRectDrawableWithShadow;->calculateVerticalPadding(FFZ)F PLandroidx/collection/SimpleArrayMap;->equals(Ljava/lang/Object;)Z PLandroidx/collection/SparseArrayCompat;->append(ILjava/lang/Object;)V PLandroidx/collection/SparseArrayCompat;->clear()V +PLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticApiModelOutline1;->m()I PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->()V PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->(Landroidx/concurrent/futures/AbstractResolvableFuture$1;)V PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->()V @@ -36793,7 +33995,32 @@ PLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;) PLandroidx/concurrent/futures/ResolvableFuture;->()V PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture; PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z +PLandroidx/constraintlayout/core/ArrayRow;->createRowDimensionRatio(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;F)Landroidx/constraintlayout/core/ArrayRow; +PLandroidx/constraintlayout/core/ArrayRow;->createRowEquals(Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; +PLandroidx/constraintlayout/core/ArrayRow;->getPivotCandidate(Landroidx/constraintlayout/core/LinearSystem;[Z)Landroidx/constraintlayout/core/SolverVariable; +PLandroidx/constraintlayout/core/ArrayRow;->initFromRow(Landroidx/constraintlayout/core/LinearSystem$Row;)V +PLandroidx/constraintlayout/core/ArrayRow;->pickPivotInVariables([ZLandroidx/constraintlayout/core/SolverVariable;)Landroidx/constraintlayout/core/SolverVariable; +PLandroidx/constraintlayout/core/LinearSystem;->addGreaterBarrier(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IZ)V +PLandroidx/constraintlayout/core/LinearSystem;->addLowerBarrier(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/SolverVariable;IZ)V +PLandroidx/constraintlayout/core/LinearSystem;->createExtraVariable()Landroidx/constraintlayout/core/SolverVariable; +PLandroidx/constraintlayout/core/widgets/ConstraintAnchor$1;->()V +PLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getOpposite()Landroidx/constraintlayout/core/widgets/ConstraintAnchor; +PLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->getType()Landroidx/constraintlayout/core/widgets/ConstraintAnchor$Type; +PLandroidx/constraintlayout/core/widgets/ConstraintAnchor;->hasCenteredDependents()Z +PLandroidx/constraintlayout/core/widgets/ConstraintWidget;->getVerticalMargin()I +PLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setFinalLeft(I)V +PLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setVerticalDimension(II)V +PLandroidx/constraintlayout/core/widgets/Guideline$1;->()V +PLandroidx/constraintlayout/core/widgets/Guideline;->getOrientation()I +PLandroidx/constraintlayout/core/widgets/Guideline;->getRelativeBegin()I +PLandroidx/constraintlayout/core/widgets/Guideline;->getRelativeEnd()I +PLandroidx/constraintlayout/core/widgets/Guideline;->isResolvedVertically()Z +PLandroidx/constraintlayout/core/widgets/Guideline;->setFinalValue(I)V +PLandroidx/constraintlayout/core/widgets/Guideline;->setGuideBegin(I)V +PLandroidx/constraintlayout/core/widgets/Guideline;->setGuideEnd(I)V PLandroidx/constraintlayout/widget/ConstraintHelper;->setTag(ILjava/lang/Object;)V +PLandroidx/constraintlayout/widget/Guideline;->setGuidelineBegin(I)V +PLandroidx/constraintlayout/widget/Guideline;->setGuidelineEnd(I)V PLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState$1;->()V PLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState;->()V PLandroidx/coordinatorlayout/widget/CoordinatorLayout$SavedState;->(Landroid/os/Parcelable;)V @@ -36804,14 +34031,29 @@ PLandroidx/core/app/ActivityCompat$Api21Impl;->startPostponedEnterTransition(Lan PLandroidx/core/app/ActivityCompat;->startPostponedEnterTransition(Landroid/app/Activity;)V PLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V PLandroidx/core/app/NotificationManagerCompat$Api23Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/NotificationManager;)[Landroid/service/notification/StatusBarNotification; +PLandroidx/core/graphics/Insets;->()V +PLandroidx/core/graphics/Insets;->(IIII)V +PLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; +PLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; 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/MenuItemCompat;->setIconTintList(Landroid/view/MenuItem;Landroid/content/res/ColorStateList;)V -PLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll()V PLandroidx/core/view/ViewCompat$Api16Impl;->hasTransientState(Landroid/view/View;)Z +PLandroidx/core/view/ViewCompat$Api20Impl;->dispatchApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +PLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +PLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +PLandroidx/core/view/ViewCompat$Api23Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/View;)Landroid/view/WindowInsets; +PLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/ViewCompat;->dispatchApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/ViewCompat;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/ViewCompat;->hasTransientState(Landroid/view/View;)Z +PLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/ViewGroupKt$descendants$1;->(Landroid/view/ViewGroup;Lkotlin/coroutines/Continuation;)V PLandroidx/core/view/ViewGroupKt$descendants$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/core/view/ViewGroupKt;->getDescendants(Landroid/view/ViewGroup;)Lkotlin/sequences/Sequence; @@ -36819,6 +34061,59 @@ PLandroidx/core/view/ViewKt$allViews$1;->(Landroid/view/View;Lkotlin/corou PLandroidx/core/view/ViewKt$allViews$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; PLandroidx/core/view/ViewKt$allViews$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; PLandroidx/core/view/ViewKt;->getAllViews(Landroid/view/View;)Lkotlin/sequences/Sequence; +PLandroidx/core/view/ViewKt;->isVisible(Landroid/view/View;)Z +PLandroidx/core/view/WindowInsetsCompat$Builder;->()V +PLandroidx/core/view/WindowInsetsCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline5;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline6;->m()Landroid/view/WindowInsets$Builder; +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29$$ExternalSyntheticApiModelOutline8;->m()V +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V +PLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V +PLandroidx/core/view/WindowInsetsCompat$Impl20;->()V +PLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; +PLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +PLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat$Impl21;->isConsumed()Z +PLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +PLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline1;->m()Landroid/view/WindowInsets; +PLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline3;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; +PLandroidx/core/view/WindowInsetsCompat$Impl30;->()V +PLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V +PLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; +PLandroidx/core/view/WindowInsetsCompat$Impl;->()V +PLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V +PLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline0;->m()I +PLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline1;->m()I +PLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline2;->m()I +PLandroidx/core/view/WindowInsetsCompat$TypeImpl30$$ExternalSyntheticApiModelOutline6;->m()I +PLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I +PLandroidx/core/view/WindowInsetsCompat;->()V +PLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V +PLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V +PLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V +PLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; +PLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I +PLandroidx/core/view/WindowInsetsCompat;->isConsumed()Z +PLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +PLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +PLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; +PLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; +PLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; PLandroidx/core/view/accessibility/AccessibilityEventCompat$Api19Impl;->getContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;)I PLandroidx/core/view/accessibility/AccessibilityEventCompat$Api19Impl;->setContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;I)V PLandroidx/core/view/accessibility/AccessibilityEventCompat;->getContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;)I @@ -36828,9 +34123,7 @@ 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/PoolingContainerListenerHolder;->()V -PLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->onRelease()V PLandroidx/customview/view/AbsSavedState$1;->()V PLandroidx/customview/view/AbsSavedState$2;->()V PLandroidx/customview/view/AbsSavedState;->()V @@ -36840,6 +34133,8 @@ PLandroidx/customview/view/AbsSavedState;->(Landroidx/customview/view/AbsS PLandroidx/customview/view/AbsSavedState;->writeToParcel(Landroid/os/Parcel;I)V PLandroidx/emoji2/text/EmojiCompat;->updateEditorInfo(Landroid/view/inputmethod/EditorInfo;)V PLandroidx/emoji2/text/SpannableBuilder;->getSpanEnd(Ljava/lang/Object;)I +PLandroidx/emoji2/text/SpannableBuilder;->getWatcherFor(Ljava/lang/Object;)Landroidx/emoji2/text/SpannableBuilder$WatcherWrapper; +PLandroidx/emoji2/text/SpannableBuilder;->nextSpanTransition(IILjava/lang/Class;)I PLandroidx/emoji2/viewsintegration/EmojiEditTextHelper$HelperInternal19;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; PLandroidx/emoji2/viewsintegration/EmojiEditTextHelper;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; PLandroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;->()V @@ -36859,6 +34154,7 @@ PLandroidx/fragment/app/Fragment;->performDestroyView()V PLandroidx/fragment/app/Fragment;->performDetach()V PLandroidx/fragment/app/Fragment;->performSaveInstanceState(Landroid/os/Bundle;)V PLandroidx/fragment/app/Fragment;->performStop()V +PLandroidx/fragment/app/Fragment;->requireArguments()Landroid/os/Bundle; PLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0;->saveState()Landroid/os/Bundle; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onGetHost()Landroidx/fragment/app/FragmentActivity; PLandroidx/fragment/app/FragmentActivity$HostCallbacks;->onGetHost()Ljava/lang/Object; @@ -36866,6 +34162,8 @@ PLandroidx/fragment/app/FragmentActivity;->$r8$lambda$t3WwJ1XbNlapyNW0l552nMkkXd PLandroidx/fragment/app/FragmentActivity;->lambda$init$0()Landroid/os/Bundle; PLandroidx/fragment/app/FragmentActivity;->supportStartPostponedEnterTransition()V PLandroidx/fragment/app/FragmentContainerView;->addDisappearingFragmentView(Landroid/view/View;)V +PLandroidx/fragment/app/FragmentContainerView;->dispatchApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +PLandroidx/fragment/app/FragmentContainerView;->onApplyWindowInsets(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; PLandroidx/fragment/app/FragmentContainerView;->removeView(Landroid/view/View;)V PLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentDestroyed(Landroidx/fragment/app/Fragment;Z)V PLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->dispatchOnFragmentDetached(Landroidx/fragment/app/Fragment;Z)V @@ -36898,6 +34196,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;->isFragmentViewChild(Landroid/view/View;)Z PLandroidx/fragment/app/FragmentStateManager;->saveViewState()V PLandroidx/fragment/app/FragmentStateManager;->stop()V PLandroidx/fragment/app/FragmentStore;->getAllSavedState()Ljava/util/HashMap; @@ -36918,6 +34217,7 @@ PLandroidx/lifecycle/LegacySavedStateHandleController;->create(Landroidx/savedst PLandroidx/lifecycle/LegacySavedStateHandleController;->tryToAddRecreator(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/Lifecycle;)V PLandroidx/lifecycle/LifecycleRegistry;->markState(Landroidx/lifecycle/Lifecycle$State;)V PLandroidx/lifecycle/LiveData$LifecycleBoundObserver;->detachObserver()V +PLandroidx/lifecycle/MediatorLiveData;->onInactive()V PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V PLandroidx/lifecycle/SavedStateHandle$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/SavedStateHandle;)V PLandroidx/lifecycle/SavedStateHandle$Companion;->()V @@ -36936,8 +34236,10 @@ PLandroidx/lifecycle/SavedStateHandleController;->getHandle()Landroidx/lifecycle PLandroidx/lifecycle/SavedStateHandleController;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V PLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle; PLandroidx/lifecycle/SavedStateHandlesVM;->getHandles()Ljava/util/Map; +PLandroidx/lifecycle/SavedStateViewModelFactoryKt;->access$getVIEWMODEL_SIGNATURE$p()Ljava/util/List; PLandroidx/lifecycle/ViewModel;->closeWithRuntimeException(Ljava/lang/Object;)V PLandroidx/lifecycle/ViewModel;->setTagIfAbsent(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; PLandroidx/loader/app/LoaderManager;->()V PLandroidx/loader/app/LoaderManager;->getInstance(Landroidx/lifecycle/LifecycleOwner;)Landroidx/loader/app/LoaderManager; PLandroidx/loader/app/LoaderManagerImpl$LoaderViewModel$1;->()V @@ -36960,6 +34262,7 @@ PLandroidx/media3/exoplayer/AudioFocusManager$$ExternalSyntheticApiModelOutline2 PLandroidx/media3/exoplayer/AudioFocusManager$$ExternalSyntheticApiModelOutline3;->m(Landroid/media/AudioFocusRequest$Builder;Landroid/media/AudioAttributes;)Landroid/media/AudioFocusRequest$Builder; PLandroidx/media3/exoplayer/AudioFocusManager$$ExternalSyntheticApiModelOutline5;->m(Landroid/media/AudioFocusRequest$Builder;Landroid/media/AudioManager$OnAudioFocusChangeListener;)Landroid/media/AudioFocusRequest$Builder; PLandroidx/media3/exoplayer/AudioFocusManager$$ExternalSyntheticApiModelOutline6;->m(Landroid/media/AudioFocusRequest$Builder;)Landroid/media/AudioFocusRequest; +PLandroidx/media3/exoplayer/mediacodec/MediaCodecUtil$CodecKey;->equals(Ljava/lang/Object;)Z PLandroidx/media3/session/ConnectedControllersManager$$ExternalSyntheticLambda0;->(Landroidx/media3/session/MediaSessionImpl;Landroidx/media3/session/MediaSession$ControllerInfo;)V PLandroidx/media3/session/ConnectedControllersManager$$ExternalSyntheticLambda0;->run()V PLandroidx/media3/session/ConnectedControllersManager;->$r8$lambda$Vom81RksdvuIVXyQfAu6pd1M7BY(Landroidx/media3/session/MediaSessionImpl;Landroidx/media3/session/MediaSession$ControllerInfo;)V @@ -36990,6 +34293,17 @@ PLandroidx/media3/session/MediaSessionStub;->lambda$release$18(Landroidx/media3/ PLandroidx/media3/session/MediaSessionStub;->release(Landroidx/media3/session/IMediaController;I)V PLandroidx/media3/session/SequencedFutureManager;->lazyRelease(JLjava/lang/Runnable;)V PLandroidx/media3/session/SequencedFutureManager;->release()V +PLandroidx/media3/ui/AspectRatioFrameLayout$AspectRatioUpdateDispatcher;->(Landroidx/media3/ui/AspectRatioFrameLayout;)V +PLandroidx/media3/ui/AspectRatioFrameLayout$AspectRatioUpdateDispatcher;->(Landroidx/media3/ui/AspectRatioFrameLayout;Landroidx/media3/ui/AspectRatioFrameLayout$1;)V +PLandroidx/media3/ui/AspectRatioFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLandroidx/media3/ui/AspectRatioFrameLayout;->onMeasure(II)V +PLandroidx/media3/ui/AspectRatioFrameLayout;->setResizeMode(I)V +PLandroidx/media3/ui/PlayerView$ComponentListener;->(Landroidx/media3/ui/PlayerView;)V +PLandroidx/media3/ui/PlayerView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLandroidx/media3/ui/PlayerView;->setResizeMode(I)V +PLandroidx/media3/ui/PlayerView;->setResizeModeRaw(Landroidx/media3/ui/AspectRatioFrameLayout;I)V +PLandroidx/media3/ui/PlayerView;->updateContentDescription()V +PLandroidx/media3/ui/R$styleable;->()V PLandroidx/navigation/NavBackStackEntry;->saveState(Landroid/os/Bundle;)V PLandroidx/navigation/NavBackStackEntryState$Companion$CREATOR$1;->()V PLandroidx/navigation/NavBackStackEntryState$Companion;->()V @@ -37040,14 +34354,51 @@ PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/ 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$Config$StableIdMode;->()V +PLandroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode;->(Ljava/lang/String;I)V +PLandroidx/recyclerview/widget/ConcatAdapter$Config;->()V +PLandroidx/recyclerview/widget/ConcatAdapter$Config;->(ZLandroidx/recyclerview/widget/ConcatAdapter$Config$StableIdMode;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->(Landroidx/recyclerview/widget/ConcatAdapter$Config;Ljava/util/List;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->(Landroidx/recyclerview/widget/ConcatAdapter$Config;[Landroidx/recyclerview/widget/RecyclerView$Adapter;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->([Landroidx/recyclerview/widget/RecyclerView$Adapter;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->addAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Z +PLandroidx/recyclerview/widget/ConcatAdapter;->getItemViewType(I)I +PLandroidx/recyclerview/widget/ConcatAdapter;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V +PLandroidx/recyclerview/widget/ConcatAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; PLandroidx/recyclerview/widget/ConcatAdapter;->onDetachedFromRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLandroidx/recyclerview/widget/ConcatAdapter;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/ConcatAdapter;->onViewDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/ConcatAdapter;->onViewRecycled(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +PLandroidx/recyclerview/widget/ConcatAdapterController$WrapperAndLocalPosition;->()V +PLandroidx/recyclerview/widget/ConcatAdapterController;->(Landroidx/recyclerview/widget/ConcatAdapter;Landroidx/recyclerview/widget/ConcatAdapter$Config;)V +PLandroidx/recyclerview/widget/ConcatAdapterController;->addAdapter(ILandroidx/recyclerview/widget/RecyclerView$Adapter;)Z +PLandroidx/recyclerview/widget/ConcatAdapterController;->addAdapter(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Z +PLandroidx/recyclerview/widget/ConcatAdapterController;->calculateAndUpdateStateRestorationPolicy()V +PLandroidx/recyclerview/widget/ConcatAdapterController;->computeStateRestorationPolicy()Landroidx/recyclerview/widget/RecyclerView$Adapter$StateRestorationPolicy; +PLandroidx/recyclerview/widget/ConcatAdapterController;->findWrapperFor(Landroidx/recyclerview/widget/RecyclerView$Adapter;)Landroidx/recyclerview/widget/NestedAdapterWrapper; +PLandroidx/recyclerview/widget/ConcatAdapterController;->getWrapper(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Landroidx/recyclerview/widget/NestedAdapterWrapper; +PLandroidx/recyclerview/widget/ConcatAdapterController;->hasStableIds()Z +PLandroidx/recyclerview/widget/ConcatAdapterController;->indexOfWrapper(Landroidx/recyclerview/widget/RecyclerView$Adapter;)I +PLandroidx/recyclerview/widget/ConcatAdapterController;->isAttachedTo(Landroidx/recyclerview/widget/RecyclerView;)Z +PLandroidx/recyclerview/widget/ConcatAdapterController;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLandroidx/recyclerview/widget/ConcatAdapterController;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; PLandroidx/recyclerview/widget/ConcatAdapterController;->onDetachedFromRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLandroidx/recyclerview/widget/ConcatAdapterController;->onItemRangeChanged(Landroidx/recyclerview/widget/NestedAdapterWrapper;IILjava/lang/Object;)V +PLandroidx/recyclerview/widget/ConcatAdapterController;->onItemRangeInserted(Landroidx/recyclerview/widget/NestedAdapterWrapper;II)V +PLandroidx/recyclerview/widget/ConcatAdapterController;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/ConcatAdapterController;->onViewDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/ConcatAdapterController;->onViewRecycled(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +PLandroidx/recyclerview/widget/ConversationLayoutManager$Companion;->()V +PLandroidx/recyclerview/widget/ConversationLayoutManager$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLandroidx/recyclerview/widget/ConversationLayoutManager;->()V +PLandroidx/recyclerview/widget/ConversationLayoutManager;->(Landroid/content/Context;)V +PLandroidx/recyclerview/widget/ConversationLayoutManager;->onLayoutCompleted(Landroidx/recyclerview/widget/RecyclerView$State;)V +PLandroidx/recyclerview/widget/ConversationLayoutManager;->scrollToPositionWithOffset(IILkotlin/jvm/functions/Function0;)V +PLandroidx/recyclerview/widget/ConversationLayoutManager;->supportsPredictiveItemAnimations()Z PLandroidx/recyclerview/widget/DiffUtil$CenteredArray;->get(I)I PLandroidx/recyclerview/widget/DiffUtil$CenteredArray;->set(II)V PLandroidx/recyclerview/widget/DiffUtil$Range;->()V @@ -37056,9 +34407,9 @@ 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 PLandroidx/recyclerview/widget/ItemTouchHelper;->onChildViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/recyclerview/widget/ItemTouchHelper;->removeChildDrawingOrderCallbackIfNecessary(Landroid/view/View;)V @@ -37069,34 +34420,43 @@ PLandroidx/recyclerview/widget/LinearLayoutManager$SavedState;->invalidateAnchor PLandroidx/recyclerview/widget/LinearLayoutManager$SavedState;->writeToParcel(Landroid/os/Parcel;I)V PLandroidx/recyclerview/widget/LinearLayoutManager;->getChildClosestToEnd()Landroid/view/View; 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/LinearLayoutManager;->scrollToPositionWithOffset(II)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->(Landroidx/recyclerview/widget/NestedAdapterWrapper;)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->onItemRangeChanged(IILjava/lang/Object;)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper$1;->onItemRangeInserted(II)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper;->(Landroidx/recyclerview/widget/RecyclerView$Adapter;Landroidx/recyclerview/widget/NestedAdapterWrapper$Callback;Landroidx/recyclerview/widget/ViewTypeStorage;Landroidx/recyclerview/widget/StableIdStorage$StableIdLookup;)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)V +PLandroidx/recyclerview/widget/NestedAdapterWrapper;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; PLandroidx/recyclerview/widget/OrientationHelper;->getTotalSpaceChange()I PLandroidx/recyclerview/widget/RecyclerView$5;->removeViewAt(I)V PLandroidx/recyclerview/widget/RecyclerView$6;->markViewHoldersUpdated(IILjava/lang/Object;)V +PLandroidx/recyclerview/widget/RecyclerView$Adapter;->getStateRestorationPolicy()Landroidx/recyclerview/widget/RecyclerView$Adapter$StateRestorationPolicy; PLandroidx/recyclerview/widget/RecyclerView$Adapter;->notifyDataSetChanged()V +PLandroidx/recyclerview/widget/RecyclerView$Adapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;ILjava/util/List;)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$ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V +PLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroidx/recyclerview/widget/RecyclerView$LayoutParams; PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getItemCount()I PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onAddFocusables(Landroidx/recyclerview/widget/RecyclerView;Ljava/util/ArrayList;II)Z -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 PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onItemsUpdated(Landroidx/recyclerview/widget/RecyclerView;IILjava/lang/Object;)V PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->removeAndRecycleViewAt(ILandroidx/recyclerview/widget/RecyclerView$Recycler;)V PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->removeViewAt(I)V +PLandroidx/recyclerview/widget/RecyclerView$LayoutParams;->(Landroid/view/ViewGroup$MarginLayoutParams;)V PLandroidx/recyclerview/widget/RecyclerView$OnScrollListener;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V PLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->detach()V PLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->putRecycledView(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +PLandroidx/recyclerview/widget/RecyclerView$RecycledViewPool;->setMaxRecycledViews(II)V PLandroidx/recyclerview/widget/RecyclerView$Recycler;->addViewHolderToRecycledViewPool(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Z)V PLandroidx/recyclerview/widget/RecyclerView$Recycler;->dispatchViewRecycled(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V -PLandroidx/recyclerview/widget/RecyclerView$Recycler;->onDetachedFromWindow()V -PLandroidx/recyclerview/widget/RecyclerView$Recycler;->poolingContainerDetach(Landroidx/recyclerview/widget/RecyclerView$Adapter;)V PLandroidx/recyclerview/widget/RecyclerView$Recycler;->recycleCachedViewAt(I)V PLandroidx/recyclerview/widget/RecyclerView$Recycler;->recycleView(Landroid/view/View;)V PLandroidx/recyclerview/widget/RecyclerView$Recycler;->recycleViewHolderInternal(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V @@ -37116,50 +34476,84 @@ 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;->addFocusables(Ljava/util/ArrayList;II)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 PLandroidx/recyclerview/widget/RecyclerView;->dispatchSaveInstanceState(Landroid/util/SparseArray;)V +PLandroidx/recyclerview/widget/RecyclerView;->generateLayoutParams(Landroid/view/ViewGroup$LayoutParams;)Landroid/view/ViewGroup$LayoutParams; +PLandroidx/recyclerview/widget/RecyclerView;->getItemAnimator()Landroidx/recyclerview/widget/RecyclerView$ItemAnimator; +PLandroidx/recyclerview/widget/RecyclerView;->getRecycledViewPool()Landroidx/recyclerview/widget/RecyclerView$RecycledViewPool; +PLandroidx/recyclerview/widget/RecyclerView;->invalidateItemDecorations()V PLandroidx/recyclerview/widget/RecyclerView;->onChildDetachedFromWindow(Landroid/view/View;)V -PLandroidx/recyclerview/widget/RecyclerView;->onDetachedFromWindow()V PLandroidx/recyclerview/widget/RecyclerView;->onSaveInstanceState()Landroid/os/Parcelable; PLandroidx/recyclerview/widget/RecyclerView;->removeOnScrollListener(Landroidx/recyclerview/widget/RecyclerView$OnScrollListener;)V -PLandroidx/recyclerview/widget/RecyclerView;->stopNestedScroll()V +PLandroidx/recyclerview/widget/RecyclerView;->setEdgeEffectFactory(Landroidx/recyclerview/widget/RecyclerView$EdgeEffectFactory;)V +PLandroidx/recyclerview/widget/RecyclerView;->setHasFixedSize(Z)V PLandroidx/recyclerview/widget/RecyclerViewAccessibilityDelegate$ItemDelegate;->getAndRemoveOriginalDelegateForItem(Landroid/view/View;)Landroidx/core/view/AccessibilityDelegateCompat; -PLandroidx/recyclerview/widget/ViewInfoStore$InfoRecord;->drainCache()V +PLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage$1;->(Landroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;)V +PLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;->()V +PLandroidx/recyclerview/widget/StableIdStorage$NoStableIdStorage;->createStableIdLookup()Landroidx/recyclerview/widget/StableIdStorage$StableIdLookup; PLandroidx/recyclerview/widget/ViewInfoStore;->addToOldChangeHolders(JLandroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/ViewInfoStore;->isDisappearing(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Z -PLandroidx/recyclerview/widget/ViewInfoStore;->onDetach()V PLandroidx/recyclerview/widget/ViewInfoStore;->popFromPostLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo; PLandroidx/recyclerview/widget/ViewInfoStore;->popFromPreLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo; PLandroidx/recyclerview/widget/ViewInfoStore;->removeViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->(Landroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;Landroidx/recyclerview/widget/NestedAdapterWrapper;)V +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage$WrapperViewTypeLookup;->globalToLocal(I)I +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->()V +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->createViewTypeWrapper(Landroidx/recyclerview/widget/NestedAdapterWrapper;)Landroidx/recyclerview/widget/ViewTypeStorage$ViewTypeLookup; +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->getWrapperForGlobalType(I)Landroidx/recyclerview/widget/NestedAdapterWrapper; +PLandroidx/recyclerview/widget/ViewTypeStorage$IsolatedViewTypeStorage;->obtainViewType(Landroidx/recyclerview/widget/NestedAdapterWrapper;)I 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$2;->getValue(Lcom/airbnb/lottie/value/LottieFrameInfo;)Ljava/lang/Object; PLcom/airbnb/lottie/LottieAnimationView$SavedState$1;->()V 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;->addValueCallback(Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;)V +PLcom/airbnb/lottie/LottieAnimationView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V PLcom/airbnb/lottie/LottieAnimationView;->onSaveInstanceState()Landroid/os/Parcelable; +PLcom/airbnb/lottie/LottieAnimationView;->setImageResource(I)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/animation/keyframe/BaseKeyframeAnimation;->getProgress()F -PLcom/airbnb/lottie/value/LottieFrameInfo;->set(FFLjava/lang/Object;Ljava/lang/Object;FFF)Lcom/airbnb/lottie/value/LottieFrameInfo; -PLcom/airbnb/lottie/value/LottieValueCallback;->getValueInternal(FFLjava/lang/Object;Ljava/lang/Object;FFF)Ljava/lang/Object; +PLcom/airbnb/lottie/animation/keyframe/PathKeyframeAnimation;->(Ljava/util/List;)V +PLcom/airbnb/lottie/model/layer/BaseLayer;->removeAnimation(Lcom/airbnb/lottie/animation/keyframe/BaseKeyframeAnimation;)V +PLcom/airbnb/lottie/value/LottieValueCallback;->(Ljava/lang/Object;)V +PLcom/annimon/stream/IntStream$1;->()V +PLcom/annimon/stream/IntStream$5;->()V +PLcom/annimon/stream/IntStream;->()V +PLcom/annimon/stream/IntStream;->(Lcom/annimon/stream/internal/Params;Lcom/annimon/stream/iterator/PrimitiveIterator$OfInt;)V +PLcom/annimon/stream/IntStream;->(Lcom/annimon/stream/iterator/PrimitiveIterator$OfInt;)V +PLcom/annimon/stream/IntStream;->boxed()Lcom/annimon/stream/Stream; +PLcom/annimon/stream/IntStream;->of(I)Lcom/annimon/stream/IntStream; +PLcom/annimon/stream/IntStream;->rangeClosed(II)Lcom/annimon/stream/IntStream; PLcom/annimon/stream/Optional;->empty()Lcom/annimon/stream/Optional; PLcom/annimon/stream/Optional;->orElse(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/annimon/stream/Stream;->empty()Lcom/annimon/stream/Stream; +PLcom/annimon/stream/Stream;->limit(J)Lcom/annimon/stream/Stream; PLcom/annimon/stream/Stream;->max(Ljava/util/Comparator;)Lcom/annimon/stream/Optional; +PLcom/annimon/stream/Stream;->rangeClosed(II)Lcom/annimon/stream/Stream; PLcom/annimon/stream/Stream;->reduce(Lcom/annimon/stream/function/BiFunction;)Lcom/annimon/stream/Optional; 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/iterator/PrimitiveIterator$OfInt;->()V +PLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->next()Ljava/lang/Integer; +PLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->next()Ljava/lang/Object; +PLcom/annimon/stream/operator/IntArray;->([I)V +PLcom/annimon/stream/operator/IntArray;->hasNext()Z +PLcom/annimon/stream/operator/IntArray;->nextInt()I PLcom/annimon/stream/operator/IntRangeClosed;->(II)V PLcom/annimon/stream/operator/IntRangeClosed;->hasNext()Z PLcom/annimon/stream/operator/IntRangeClosed;->nextInt()I +PLcom/annimon/stream/operator/ObjLimit;->(Ljava/util/Iterator;J)V +PLcom/annimon/stream/operator/ObjLimit;->hasNext()Z 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 @@ -37195,6 +34589,18 @@ PLcom/bumptech/glide/request/target/ViewTarget;->removeCallback(Lcom/bumptech/gl PLcom/bumptech/glide/util/MultiClassKey;->equals(Ljava/lang/Object;)Z PLcom/bumptech/glide/util/Util;->bothNullOrEqual(Ljava/lang/Object;Ljava/lang/Object;)Z PLcom/bumptech/glide/util/Util;->removeCallbacksOnUiThread(Ljava/lang/Runnable;)V +PLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeEndArray()V +PLcom/fasterxml/jackson/core/json/WriterBasedJsonGenerator;->writeStartArray(Ljava/lang/Object;I)V +PLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->getArrayDelegateCreator()Lcom/fasterxml/jackson/databind/introspect/AnnotatedWithParams; +PLcom/fasterxml/jackson/databind/deser/std/StdValueInstantiator;->getDelegateCreator()Lcom/fasterxml/jackson/databind/introspect/AnnotatedWithParams; +PLcom/fasterxml/jackson/databind/introspect/CollectorBase;->_emptyAnnotationMap()Lcom/fasterxml/jackson/databind/introspect/AnnotationMap; +PLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serialize(Ljava/lang/Object;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V +PLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serialize([Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V +PLcom/fasterxml/jackson/databind/ser/impl/StringArraySerializer;->serializeContents([Ljava/lang/String;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;)V +PLcom/fasterxml/jackson/databind/type/CollectionType;->toString()Ljava/lang/String; +PLcom/fasterxml/jackson/databind/type/TypeBindings;->createIfNeeded(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/TypeBindings; +PLcom/fasterxml/jackson/databind/type/TypeFactory;->constructCollectionType(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JavaType;)Lcom/fasterxml/jackson/databind/type/CollectionType; +PLcom/fasterxml/jackson/databind/type/TypeFactory;->constructCollectionType(Ljava/lang/Class;Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/type/CollectionType; PLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V PLcom/google/android/material/appbar/AppBarLayout;->clearLiftOnScrollTargetView()V PLcom/google/android/material/appbar/AppBarLayout;->onDetachedFromWindow()V @@ -37205,93 +34611,183 @@ PLcom/google/android/material/appbar/CollapsingToolbarLayout;->onDetachedFromWin PLcom/google/android/material/button/MaterialButton$SavedState$1;->()V PLcom/google/android/material/button/MaterialButton$SavedState;->()V PLcom/google/android/material/button/MaterialButton$SavedState;->(Landroid/os/Parcelable;)V +PLcom/google/android/material/button/MaterialButton$SavedState;->writeToParcel(Landroid/os/Parcel;I)V +PLcom/google/android/material/button/MaterialButton;->getA11yClassName()Ljava/lang/String; +PLcom/google/android/material/button/MaterialButton;->onAttachedToWindow()V +PLcom/google/android/material/button/MaterialButton;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V +PLcom/google/android/material/button/MaterialButton;->onLayout(ZIIII)V PLcom/google/android/material/button/MaterialButton;->onSaveInstanceState()Landroid/os/Parcelable; +PLcom/google/android/material/button/MaterialButton;->refreshDrawableState()V +PLcom/google/android/material/button/MaterialButton;->setElevation(F)V +PLcom/google/android/material/button/MaterialButtonHelper;->isBackgroundOverwritten()Z +PLcom/google/android/material/button/MaterialButtonHelper;->isCheckable()Z +PLcom/google/android/material/card/MaterialCardView;->()V +PLcom/google/android/material/card/MaterialCardView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLcom/google/android/material/card/MaterialCardView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLcom/google/android/material/card/MaterialCardView;->isCheckable()Z +PLcom/google/android/material/card/MaterialCardView;->isChecked()Z +PLcom/google/android/material/card/MaterialCardView;->isDragged()Z +PLcom/google/android/material/card/MaterialCardView;->onAttachedToWindow()V +PLcom/google/android/material/card/MaterialCardView;->onCreateDrawableState(I)[I +PLcom/google/android/material/card/MaterialCardView;->onInitializeAccessibilityNodeInfo(Landroid/view/accessibility/AccessibilityNodeInfo;)V +PLcom/google/android/material/card/MaterialCardView;->onMeasure(II)V +PLcom/google/android/material/card/MaterialCardView;->setAncestorContentPadding(IIII)V +PLcom/google/android/material/card/MaterialCardView;->setBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V +PLcom/google/android/material/card/MaterialCardView;->setBackgroundInternal(Landroid/graphics/drawable/Drawable;)V +PLcom/google/android/material/card/MaterialCardViewHelper$1;->(Lcom/google/android/material/card/MaterialCardViewHelper;Landroid/graphics/drawable/Drawable;IIII)V +PLcom/google/android/material/card/MaterialCardViewHelper$1;->getMinimumHeight()I +PLcom/google/android/material/card/MaterialCardViewHelper$1;->getMinimumWidth()I +PLcom/google/android/material/card/MaterialCardViewHelper$1;->getPadding(Landroid/graphics/Rect;)Z +PLcom/google/android/material/card/MaterialCardViewHelper;->()V +PLcom/google/android/material/card/MaterialCardViewHelper;->(Lcom/google/android/material/card/MaterialCardView;Landroid/util/AttributeSet;II)V +PLcom/google/android/material/card/MaterialCardViewHelper;->calculateHorizontalBackgroundPadding()F +PLcom/google/android/material/card/MaterialCardViewHelper;->calculateVerticalBackgroundPadding()F +PLcom/google/android/material/card/MaterialCardViewHelper;->getBackground()Lcom/google/android/material/shape/MaterialShapeDrawable; +PLcom/google/android/material/card/MaterialCardViewHelper;->getParentCardViewCalculatedCornerPadding()F +PLcom/google/android/material/card/MaterialCardViewHelper;->insetDrawable(Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; +PLcom/google/android/material/card/MaterialCardViewHelper;->isCheckable()Z +PLcom/google/android/material/card/MaterialCardViewHelper;->loadFromAttributes(Landroid/content/res/TypedArray;)V +PLcom/google/android/material/card/MaterialCardViewHelper;->recalculateCheckedIconPosition(II)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setCardBackgroundColor(Landroid/content/res/ColorStateList;)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setCardForegroundColor(Landroid/content/res/ColorStateList;)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setChecked(Z)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setChecked(ZZ)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIcon(Landroid/graphics/drawable/Drawable;)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIconMargin(I)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setCheckedIconSize(I)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setShapeAppearanceModel(Lcom/google/android/material/shape/ShapeAppearanceModel;)V +PLcom/google/android/material/card/MaterialCardViewHelper;->setUserContentPadding(IIII)V +PLcom/google/android/material/card/MaterialCardViewHelper;->shouldAddCornerPaddingInsideCardBackground()Z +PLcom/google/android/material/card/MaterialCardViewHelper;->shouldAddCornerPaddingOutsideCardBackground()Z +PLcom/google/android/material/card/MaterialCardViewHelper;->updateContentPadding()V +PLcom/google/android/material/card/MaterialCardViewHelper;->updateElevation()V +PLcom/google/android/material/card/MaterialCardViewHelper;->updateRippleColor()V +PLcom/google/android/material/card/MaterialCardViewHelper;->updateStroke()V PLcom/google/android/material/expandable/ExpandableWidgetHelper;->onSaveInstanceState()Landroid/os/Bundle; PLcom/google/android/material/floatingactionbutton/FloatingActionButton;->onDetachedFromWindow()V PLcom/google/android/material/floatingactionbutton/FloatingActionButton;->onSaveInstanceState()Landroid/os/Parcelable; PLcom/google/android/material/floatingactionbutton/FloatingActionButtonImpl;->onDetachedFromWindow()V +PLcom/google/android/material/imageview/ShapeableImageView;->access$000(Lcom/google/android/material/imageview/ShapeableImageView;)Lcom/google/android/material/shape/ShapeAppearanceModel; +PLcom/google/android/material/imageview/ShapeableImageView;->access$100(Lcom/google/android/material/imageview/ShapeableImageView;)Lcom/google/android/material/shape/MaterialShapeDrawable; +PLcom/google/android/material/imageview/ShapeableImageView;->access$102(Lcom/google/android/material/imageview/ShapeableImageView;Lcom/google/android/material/shape/MaterialShapeDrawable;)Lcom/google/android/material/shape/MaterialShapeDrawable; +PLcom/google/android/material/imageview/ShapeableImageView;->access$200(Lcom/google/android/material/imageview/ShapeableImageView;)Landroid/graphics/RectF; PLcom/google/android/material/imageview/ShapeableImageView;->drawStroke(Landroid/graphics/Canvas;)V +PLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingBottom()I +PLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingLeft()I +PLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingRight()I +PLcom/google/android/material/imageview/ShapeableImageView;->getContentPaddingTop()I PLcom/google/android/material/imageview/ShapeableImageView;->getPaddingBottom()I PLcom/google/android/material/imageview/ShapeableImageView;->getPaddingLeft()I PLcom/google/android/material/imageview/ShapeableImageView;->getPaddingRight()I PLcom/google/android/material/imageview/ShapeableImageView;->getPaddingTop()I +PLcom/google/android/material/imageview/ShapeableImageView;->isContentPaddingRelative()Z PLcom/google/android/material/imageview/ShapeableImageView;->onDraw(Landroid/graphics/Canvas;)V +PLcom/google/android/material/imageview/ShapeableImageView;->onMeasure(II)V PLcom/google/android/material/imageview/ShapeableImageView;->onSizeChanged(IIII)V +PLcom/google/android/material/imageview/ShapeableImageView;->setPadding(IIII)V PLcom/google/android/material/imageview/ShapeableImageView;->updateShapeMask(II)V +PLcom/google/android/material/shape/MaterialShapeDrawable;->drawStrokeShape(Landroid/graphics/Canvas;)V +PLcom/google/android/material/shape/MaterialShapeDrawable;->setShadowBitmapDrawingEnable(Z)V +PLcom/google/android/material/shape/MaterialShapeDrawable;->setShadowColor(I)V 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/google/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->format(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->formatNsn(Ljava/lang/String;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->formatNsnUsingPattern(Ljava/lang/String;Lcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/CharSequence;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->getNationalSignificantNumber(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->getNumberTypeHelper(Ljava/lang/String;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;)Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberType; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumber(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->getRegionCodeForNumberFromRegionList(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;Ljava/util/List;)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->hasValidCountryCallingCode(I)Z -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->isNumberMatchingDesc(Ljava/lang/String;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;)Z -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->maybeAppendFormattedExtension(Lcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;Lcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V -PLcom/google/i18n/phonenumbers/PhoneNumberUtil;->prefixNumberWithCountryCallingCode(ILcom/google/i18n/phonenumbers/PhoneNumberUtil$PhoneNumberFormat;Ljava/lang/StringBuilder;)V -PLcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;->getFormat()Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPattern(I)Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;->getLeadingDigitsPatternCount()I -PLcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;->getNationalPrefixFormattingRule()Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonemetadata$NumberFormat;->getPattern()Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getFixedLine()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getIntlNumberFormatList()Ljava/util/List; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getLeadingDigits()Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getNumberFormatList()Ljava/util/List; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPager()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPersonalNumber()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getPremiumRate()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getSameMobileAndFixedLinePattern()Z -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getSharedCost()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getTollFree()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getUan()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getVoicemail()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->getVoip()Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->hasLeadingDigits()Z -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setLeadingDigits(Ljava/lang/String;)Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata;->setNationalPrefixTransformRule(Ljava/lang/String;)Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneMetadata; -PLcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;->getNationalNumberPattern()Ljava/lang/String; -PLcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;->getNationalNumber()J -PLcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;->hasExtension()Z -PLcom/google/i18n/phonenumbers/Phonenumber$PhoneNumber;->isItalianLeadingZero()Z -PLcom/google/i18n/phonenumbers/internal/RegexBasedMatcher;->match(Ljava/lang/CharSequence;Ljava/util/regex/Pattern;Z)Z -PLcom/google/i18n/phonenumbers/internal/RegexBasedMatcher;->matchNationalNumber(Ljava/lang/CharSequence;Lcom/google/i18n/phonenumbers/Phonemetadata$PhoneNumberDesc;Z)Z PLcom/pnikosis/materialishprogress/ProgressWheel$WheelSavedState$1;->()V PLcom/pnikosis/materialishprogress/ProgressWheel$WheelSavedState;->()V PLcom/pnikosis/materialishprogress/ProgressWheel$WheelSavedState;->(Landroid/os/Parcelable;)V PLcom/pnikosis/materialishprogress/ProgressWheel;->onSaveInstanceState()Landroid/os/Parcelable; +PLcom/pnikosis/materialishprogress/ProgressWheel;->onVisibilityChanged(Landroid/view/View;I)V +PLio/reactivex/rxjava3/android/schedulers/HandlerScheduler;->scheduleDirect(Ljava/lang/Runnable;JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/disposables/Disposable; PLio/reactivex/rxjava3/core/Flowable;->distinctUntilChanged(Lio/reactivex/rxjava3/functions/BiPredicate;)Lio/reactivex/rxjava3/core/Flowable; +PLio/reactivex/rxjava3/core/Flowable;->filter(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Flowable; PLio/reactivex/rxjava3/core/Flowable;->switchMapSingle(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Flowable; +PLio/reactivex/rxjava3/core/Flowable;->toObservable()Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Maybe;->()V PLio/reactivex/rxjava3/core/Maybe;->create(Lio/reactivex/rxjava3/core/MaybeOnSubscribe;)Lio/reactivex/rxjava3/core/Maybe; PLio/reactivex/rxjava3/core/Maybe;->doOnSuccess(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Maybe; PLio/reactivex/rxjava3/core/Maybe;->empty()Lio/reactivex/rxjava3/core/Maybe; +PLio/reactivex/rxjava3/core/Maybe;->filter(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Maybe; PLio/reactivex/rxjava3/core/Maybe;->flatMap(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Maybe; PLio/reactivex/rxjava3/core/Maybe;->fromCallable(Ljava/util/concurrent/Callable;)Lio/reactivex/rxjava3/core/Maybe; PLio/reactivex/rxjava3/core/Maybe;->observeOn(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Maybe; +PLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/core/MaybeObserver;)V +PLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/core/Maybe;->subscribe(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/core/Maybe;->subscribeWith(Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; +PLio/reactivex/rxjava3/core/Observable;->buffer(Lio/reactivex/rxjava3/core/ObservableSource;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->buffer(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Supplier;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->combineLatest(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function3;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->combineLatest(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/BiFunction;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->combineLatestArray([Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;I)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->concatArray([Lio/reactivex/rxjava3/core/ObservableSource;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->create(Lio/reactivex/rxjava3/core/ObservableOnSubscribe;)Lio/reactivex/rxjava3/core/Observable; PLio/reactivex/rxjava3/core/Observable;->distinctUntilChanged(Lio/reactivex/rxjava3/functions/BiPredicate;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->doOnEach(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->doOnNext(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->elementAtOrError(J)Lio/reactivex/rxjava3/core/Single; +PLio/reactivex/rxjava3/core/Observable;->firstOrError()Lio/reactivex/rxjava3/core/Single; +PLio/reactivex/rxjava3/core/Observable;->flatMapMaybe(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->flatMapMaybe(Lio/reactivex/rxjava3/functions/Function;Z)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->flatMapSingle(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->flatMapSingle(Lio/reactivex/rxjava3/functions/Function;Z)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->fromArray([Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->just(Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->map(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->replay(I)Lio/reactivex/rxjava3/observables/ConnectableObservable; +PLio/reactivex/rxjava3/core/Observable;->sample(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->sample(JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->skip(J)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->startWithItem(Ljava/lang/Object;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->subscribe()Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/core/Observable;->switchMap(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->switchMap(Lio/reactivex/rxjava3/functions/Function;I)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->take(J)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Observable;->throttleLast(JLjava/util/concurrent/TimeUnit;)Lio/reactivex/rxjava3/core/Observable; PLio/reactivex/rxjava3/core/Scheduler$PeriodicDirectTask;->dispose()V +PLio/reactivex/rxjava3/core/Scheduler;->scheduleDirect(Ljava/lang/Runnable;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/core/Single;->doOnSuccess(Lio/reactivex/rxjava3/functions/Consumer;)Lio/reactivex/rxjava3/core/Single; +PLio/reactivex/rxjava3/core/Single;->flatMapObservable(Lio/reactivex/rxjava3/functions/Function;)Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/core/Single;->observeOn(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Single; +PLio/reactivex/rxjava3/core/Single;->onErrorComplete()Lio/reactivex/rxjava3/core/Maybe; +PLio/reactivex/rxjava3/core/Single;->onErrorComplete(Lio/reactivex/rxjava3/functions/Predicate;)Lio/reactivex/rxjava3/core/Maybe; 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 +PLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->(Lio/reactivex/rxjava3/functions/Function3;)V +PLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/functions/Functions$Array3Func;->apply([Ljava/lang/Object;)Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/functions/Functions;->alwaysTrue()Lio/reactivex/rxjava3/functions/Predicate; +PLio/reactivex/rxjava3/internal/functions/Functions;->toFunction(Lio/reactivex/rxjava3/functions/Function3;)Lio/reactivex/rxjava3/functions/Function; +PLio/reactivex/rxjava3/internal/observers/BasicFuseableObserver;->dispose()V +PLio/reactivex/rxjava3/internal/observers/BasicQueueDisposable;->()V PLio/reactivex/rxjava3/internal/observers/ConsumerSingleObserver;->dispose()V +PLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/fuseable/SimplePlainQueue;)V PLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->cancelled()Z PLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->done()Z PLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->enter()Z PLio/reactivex/rxjava3/internal/observers/QueueDrainObserver;->error()Ljava/lang/Throwable; +PLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad0;->()V +PLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberPad2;->()V +PLio/reactivex/rxjava3/internal/observers/QueueDrainSubscriberWip;->()V PLio/reactivex/rxjava3/internal/operators/flowable/AbstractBackpressureThrottlingSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableCombineLatest$CombineLatestCoordinator;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableCombineLatest$CombineLatestCoordinator;->cancelAll()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableCombineLatest$CombineLatestInnerSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableCreate$BaseEmitter;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableCreate$LatestAsyncEmitter;->onUnsubscribed()V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->(Lio/reactivex/rxjava3/internal/fuseable/ConditionalSubscriber;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter$FilterConditionalSubscriber;->tryOnNext(Ljava/lang/Object;)Z +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter;->(Lio/reactivex/rxjava3/core/Flowable;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFilter;->subscribeActual(Lorg/reactivestreams/Subscriber;)V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableFromObservable$SubscriberObserver;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableInterval$IntervalSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableObserveOn$BaseObserveOnSubscriber;->cancel()V @@ -37302,6 +34798,8 @@ PLio/reactivex/rxjava3/internal/operators/flowable/FlowableObserveOn$ObserveOnSu PLio/reactivex/rxjava3/internal/operators/flowable/FlowableRefCount$RefCountSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableRefCount;->cancel(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableRefCount$RefConnection;)V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableRefCount;->timeout(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableRefCount$RefConnection;)V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->removeFirst()V +PLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$BoundedReplayBuffer;->setFirst(Lio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$Node;)V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$InnerSubscription;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$InnerSubscription;->dispose()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableReplay$ReplaySubscriber;->dispose()V @@ -37311,7 +34809,12 @@ PLio/reactivex/rxjava3/internal/operators/flowable/FlowableSubscribeOn$Subscribe PLio/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchMap$SwitchMapSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableSwitchMap$SwitchMapSubscriber;->disposeInner()V PLio/reactivex/rxjava3/internal/operators/flowable/FlowableThrottleLatest$ThrottleLatestSubscriber;->cancel()V +PLio/reactivex/rxjava3/internal/operators/maybe/AbstractMaybeWithUpstream;->(Lio/reactivex/rxjava3/core/MaybeSource;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->(Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->hasCustomOnError()Z +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->onComplete()V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCallbackObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCreate$Emitter;->(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCreate$Emitter;->isDisposed()Z PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCreate$Emitter;->onSuccess(Ljava/lang/Object;)V @@ -37320,6 +34823,11 @@ PLio/reactivex/rxjava3/internal/operators/maybe/MaybeCreate;->subscribeActual(Li PLio/reactivex/rxjava3/internal/operators/maybe/MaybeEmpty;->()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeEmpty;->()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeEmpty;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter$FilterMaybeObserver;->onSuccess(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter;->(Lio/reactivex/rxjava3/core/MaybeSource;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFilter;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten$FlatMapMaybeObserver$InnerObserver;->(Lio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten$FlatMapMaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten$FlatMapMaybeObserver$InnerObserver;->onComplete()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten$FlatMapMaybeObserver$InnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -37330,6 +34838,7 @@ PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten$FlatMapMaybeObserve PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten;->(Lio/reactivex/rxjava3/core/MaybeSource;Lio/reactivex/rxjava3/functions/Function;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFlatten;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFromCallable;->(Ljava/util/concurrent/Callable;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeFromCallable;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn$ObserveOnMaybeObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/core/Scheduler;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn$ObserveOnMaybeObserver;->onComplete()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn$ObserveOnMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -37337,6 +34846,9 @@ PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn$ObserveOnMaybeObs PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn$ObserveOnMaybeObserver;->run()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn;->(Lio/reactivex/rxjava3/core/MaybeSource;Lio/reactivex/rxjava3/core/Scheduler;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybeObserveOn;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/maybe/MaybeOnErrorComplete$OnErrorCompleteMultiObserver;->onSuccess(Ljava/lang/Object;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybePeek$MaybePeekObserver;->(Lio/reactivex/rxjava3/core/MaybeObserver;Lio/reactivex/rxjava3/internal/operators/maybe/MaybePeek;)V PLio/reactivex/rxjava3/internal/operators/maybe/MaybePeek$MaybePeekObserver;->onAfterTerminate()V PLio/reactivex/rxjava3/internal/operators/maybe/MaybePeek$MaybePeekObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -37358,52 +34870,198 @@ PLio/reactivex/rxjava3/internal/operators/mixed/FlowableSwitchMapSingle;-> PLio/reactivex/rxjava3/internal/operators/mixed/FlowableSwitchMapSingle;->subscribeActual(Lorg/reactivestreams/Subscriber;)V PLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/mixed/ObservableSwitchMapSingle$SwitchMapSingleMainObserver;->disposeInner()V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)V PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->isDisposed()Z +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable$FlatMapObserver;->onSuccess(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/functions/Function;)V +PLio/reactivex/rxjava3/internal/operators/mixed/SingleFlatMapObservable;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferBoundaryObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferBoundaryObserver;->onComplete()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Supplier;Lio/reactivex/rxjava3/core/ObservableSource;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->accept(Lio/reactivex/rxjava3/core/Observer;Ljava/lang/Object;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->accept(Lio/reactivex/rxjava3/core/Observer;Ljava/util/Collection;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->onComplete()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary$BufferExactBoundaryObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Supplier;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableBufferExactBoundary;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;I)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$CombinerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IIZ)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->cancelSources()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->clear(Lio/reactivex/rxjava3/internal/queue/SpscLinkedArrayQueue;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->subscribe([Lio/reactivex/rxjava3/core/ObservableSource;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest;->([Lio/reactivex/rxjava3/core/ObservableSource;Ljava/lang/Iterable;Lio/reactivex/rxjava3/functions/Function;IZ)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IZ)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->drain()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;ILio/reactivex/rxjava3/internal/util/ErrorMode;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->isDisposed()Z +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->setCancellable(Lio/reactivex/rxjava3/functions/Cancellable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->setDisposable(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate;->(Lio/reactivex/rxjava3/core/ObservableOnSubscribe;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Consumer;Lio/reactivex/rxjava3/functions/Action;Lio/reactivex/rxjava3/functions/Action;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->(Lio/reactivex/rxjava3/core/SingleObserver;JLjava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle$ElementAtObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle;->(Lio/reactivex/rxjava3/core/ObservableSource;JLjava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableElementAtSingle;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFilter$FilterObserver;->onNext(Ljava/lang/Object;)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 PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver$InnerObserver;->onSuccess(Ljava/lang/Object;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;Z)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;Z)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver$InnerObserver;->onSuccess(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;Z)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->drainLoop()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->getOrCreateQueue()Lio/reactivex/rxjava3/internal/queue/SpscLinkedArrayQueue; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle$FlatMapSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;Z)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapSingle;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->(Lio/reactivex/rxjava3/core/Observer;[Ljava/lang/Object;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->poll()Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray$FromArrayDisposable;->requestFusion(I)I +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray;->([Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromArray;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher$PublisherSubscriber;->(Lio/reactivex/rxjava3/core/Observer;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher$PublisherSubscriber;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher$PublisherSubscriber;->onNext(Ljava/lang/Object;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher$PublisherSubscriber;->onSubscribe(Lorg/reactivestreams/Subscription;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher;->(Lorg/reactivestreams/Publisher;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFromPublisher;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableJust;->(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableJust;->get()Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;->requestFusion(I)I +PLio/reactivex/rxjava3/internal/operators/observable/ObservableMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->clear()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->drainFused()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->isEmpty()Z +PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->poll()Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->requestFusion(I)I +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->accept(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;->accept(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefCountObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->(Lio/reactivex/rxjava3/observables/ConnectableObservable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->(Lio/reactivex/rxjava3/observables/ConnectableObservable;IJLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->cancel(Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;)V 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;->(Z)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->addLast(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->enterTransform(Ljava/lang/Object;)Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->getHead()Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->leaveTransform(Ljava/lang/Object;)Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->next(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->removeFirst()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$InnerDisposable;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->index()Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;->(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBufferSupplier;->(IZ)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBufferSupplier;->call()Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBuffer; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayBuffer;Ljava/util/concurrent/atomic/AtomicReference;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->isDisposed()Z +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->remove(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->replay()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplaySource;->(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$SizeBoundReplayBuffer;->(IZ)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$SizeBoundReplayBuffer;->truncate()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$UnBoundedFactory;->()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/ObservableSource;Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->connect(Lio/reactivex/rxjava3/functions/Consumer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->create(Lio/reactivex/rxjava3/core/ObservableSource;IZ)Lio/reactivex/rxjava3/observables/ConnectableObservable; +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->create(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BufferSupplier;)Lio/reactivex/rxjava3/observables/ConnectableObservable; PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->reset()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast;->(Lio/reactivex/rxjava3/core/Observer;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast;->complete()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast;->run()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->(Lio/reactivex/rxjava3/core/Observer;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->cancelTimer()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->emit()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->onComplete()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed;->(Lio/reactivex/rxjava3/core/ObservableSource;JLjava/util/concurrent/TimeUnit;Lio/reactivex/rxjava3/core/Scheduler;Z)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableScalarXMap;->tryScalarXMapSubscribe(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;)Z PLio/reactivex/rxjava3/internal/operators/observable/ObservableScanSeed$ScanSeedObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->(Lio/reactivex/rxjava3/core/Observer;J)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip$SkipObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip;->(Lio/reactivex/rxjava3/core/ObservableSource;J)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSkip;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;JI)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->cancel()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapInnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->(Lio/reactivex/rxjava3/core/Observer;Lio/reactivex/rxjava3/functions/Function;IZ)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->disposeInner()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap$SwitchMapObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;IZ)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableSwitchMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->(Lio/reactivex/rxjava3/core/Observer;J)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onComplete()V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake$TakeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake;->(Lio/reactivex/rxjava3/core/ObservableSource;J)V +PLio/reactivex/rxjava3/internal/operators/observable/ObservableTake;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableThrottleFirstTimed$DebounceTimedObserver;->dispose()V +PLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->(Lio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;Lio/reactivex/rxjava3/core/SingleObserver;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess$DoOnSuccess;->onSuccess(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/functions/Consumer;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleDoOnSuccess;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->(Lio/reactivex/rxjava3/core/SingleObserver;Lio/reactivex/rxjava3/core/Scheduler;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->onSuccess(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn$ObserveOnSingleObserver;->run()V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn;->(Lio/reactivex/rxjava3/core/SingleSource;Lio/reactivex/rxjava3/core/Scheduler;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleObserveOn;->subscribeActual(Lio/reactivex/rxjava3/core/SingleObserver;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorComplete;->(Lio/reactivex/rxjava3/core/Single;Lio/reactivex/rxjava3/functions/Predicate;)V +PLio/reactivex/rxjava3/internal/operators/single/SingleOnErrorComplete;->subscribeActual(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/queue/MpscLinkedQueue;->isEmpty()Z PLio/reactivex/rxjava3/internal/queue/MpscLinkedQueue;->lvConsumerNode()Lio/reactivex/rxjava3/internal/queue/MpscLinkedQueue$LinkedQueueNode; PLio/reactivex/rxjava3/internal/queue/SpscArrayQueue;->clear()V @@ -37418,31 +35076,74 @@ 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/ArrayListSupplier;->()V +PLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->(Ljava/lang/String;I)V +PLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->asSupplier()Lio/reactivex/rxjava3/functions/Supplier; +PLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->get()Ljava/lang/Object; +PLio/reactivex/rxjava3/internal/util/ArrayListSupplier;->get()Ljava/util/List; PLio/reactivex/rxjava3/internal/util/AtomicThrowable;->terminate()Ljava/lang/Throwable; PLio/reactivex/rxjava3/internal/util/AtomicThrowable;->tryTerminateAndReport()V +PLio/reactivex/rxjava3/internal/util/EndConsumerHelper;->setOnce(Ljava/util/concurrent/atomic/AtomicReference;Lio/reactivex/rxjava3/disposables/Disposable;Ljava/lang/Class;)Z +PLio/reactivex/rxjava3/internal/util/ErrorMode;->()V +PLio/reactivex/rxjava3/internal/util/ErrorMode;->(Ljava/lang/String;I)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 PLio/reactivex/rxjava3/internal/util/QueueDrainHelper;->drainLoop(Lio/reactivex/rxjava3/internal/fuseable/SimplePlainQueue;Lio/reactivex/rxjava3/core/Observer;ZLio/reactivex/rxjava3/disposables/Disposable;Lio/reactivex/rxjava3/internal/util/ObservableQueueDrain;)V +PLio/reactivex/rxjava3/kotlin/SubscribersKt$sam$io_reactivex_rxjava3_functions_Action$0;->(Lkotlin/jvm/functions/Function0;)V PLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Maybe;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Observable;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy$default(Lio/reactivex/rxjava3/core/Single;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lio/reactivex/rxjava3/disposables/Disposable; PLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Maybe;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/kotlin/SubscribersKt;->subscribeBy(Lio/reactivex/rxjava3/core/Single;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lio/reactivex/rxjava3/disposables/Disposable; +PLio/reactivex/rxjava3/observables/ConnectableObservable;->()V +PLio/reactivex/rxjava3/observables/ConnectableObservable;->refCount()Lio/reactivex/rxjava3/core/Observable; +PLio/reactivex/rxjava3/observers/DisposableObserver;->()V PLio/reactivex/rxjava3/observers/DisposableObserver;->dispose()V +PLio/reactivex/rxjava3/observers/DisposableObserver;->onStart()V +PLio/reactivex/rxjava3/observers/DisposableObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V PLio/reactivex/rxjava3/observers/SerializedObserver;->dispose()V PLio/reactivex/rxjava3/observers/SerializedObserver;->onComplete()V +PLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/core/Maybe;)Lio/reactivex/rxjava3/core/Maybe; +PLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onAssembly(Lio/reactivex/rxjava3/observables/ConnectableObservable;)Lio/reactivex/rxjava3/observables/ConnectableObservable; +PLio/reactivex/rxjava3/plugins/RxJavaPlugins;->onSubscribe(Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; PLio/reactivex/rxjava3/processors/BehaviorProcessor$BehaviorSubscription;->cancel()V PLio/reactivex/rxjava3/processors/BehaviorProcessor;->remove(Lio/reactivex/rxjava3/processors/BehaviorProcessor$BehaviorSubscription;)V +PLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->(Lorg/reactivestreams/Subscriber;Lio/reactivex/rxjava3/processors/PublishProcessor;)V PLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->cancel()V +PLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->isCancelled()Z +PLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->onNext(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;->request(J)V +PLio/reactivex/rxjava3/processors/PublishProcessor;->()V +PLio/reactivex/rxjava3/processors/PublishProcessor;->()V +PLio/reactivex/rxjava3/processors/PublishProcessor;->add(Lio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;)Z +PLio/reactivex/rxjava3/processors/PublishProcessor;->create()Lio/reactivex/rxjava3/processors/PublishProcessor; +PLio/reactivex/rxjava3/processors/PublishProcessor;->onNext(Ljava/lang/Object;)V PLio/reactivex/rxjava3/processors/PublishProcessor;->remove(Lio/reactivex/rxjava3/processors/PublishProcessor$PublishSubscription;)V +PLio/reactivex/rxjava3/processors/PublishProcessor;->subscribeActual(Lorg/reactivestreams/Subscriber;)V 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$/time/chrono/f;->f(J)Z PLj$/util/DesugarCollections;->a()Ljava/lang/reflect/Constructor; PLj$/util/Optional;->ifPresent(Lj$/util/function/Consumer;)V -PLj$/util/S;->s(Lj$/util/function/Consumer;)Z +PLj$/util/concurrent/ConcurrentHashMap;->comparableClassFor(Ljava/lang/Object;)Ljava/lang/Class; +PLj$/util/concurrent/ConcurrentHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +PLj$/util/concurrent/ConcurrentHashMap;->replaceNode(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLj$/util/concurrent/ConcurrentHashMap;->treeifyBin([Lj$/util/concurrent/l;I)V +PLj$/util/concurrent/q;->()V +PLj$/util/concurrent/q;->(Lj$/util/concurrent/r;)V +PLj$/util/concurrent/q;->a(Ljava/lang/Object;I)Lj$/util/concurrent/l; +PLj$/util/concurrent/q;->c(Lj$/util/concurrent/r;Lj$/util/concurrent/r;)Lj$/util/concurrent/r; +PLj$/util/concurrent/q;->e()V +PLj$/util/concurrent/q;->f(ILjava/lang/Object;Ljava/lang/Object;)Lj$/util/concurrent/r; +PLj$/util/concurrent/q;->i(Lj$/util/concurrent/r;Lj$/util/concurrent/r;)Lj$/util/concurrent/r; +PLj$/util/concurrent/q;->j(Ljava/lang/Object;Ljava/lang/Object;)I +PLj$/util/concurrent/r;->(ILjava/lang/Object;Ljava/lang/Object;Lj$/util/concurrent/r;Lj$/util/concurrent/r;)V +PLj$/util/concurrent/r;->b(ILjava/lang/Object;Ljava/lang/Class;)Lj$/util/concurrent/r; +PLj$/util/concurrent/v;->a(Lsun/misc/Unsafe;Ljava/lang/Object;J)I 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 @@ -37456,8 +35157,6 @@ PLj$/util/stream/E1;->n(J)V PLj$/util/stream/E1;->q()Z PLj$/util/stream/Y1;->limit(J)Lj$/util/stream/Stream; PLj$/util/stream/Y1;->max(Ljava/util/Comparator;)Lj$/util/Optional; -PLj$/util/stream/Y1;->n(Lj$/util/function/BinaryOperator;)Lj$/util/Optional; -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 @@ -37467,14 +35166,31 @@ PLj$/util/stream/w0;->C0(JJJ)J PLj$/util/stream/w0;->S0(J)I PLj$/util/stream/w0;->k1(Lj$/util/stream/c;JJ)Lj$/util/stream/Stream; PLj$/util/stream/w0;->p()I +PLkotlin/collections/ArraysKt;->toMutableSet([Ljava/lang/Object;)Ljava/util/Set; +PLkotlin/collections/ArraysKt___ArraysKt;->toMutableSet([Ljava/lang/Object;)Ljava/util/Set; +PLkotlin/collections/CollectionsKt;->chunked(Ljava/lang/Iterable;I)Ljava/util/List; 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;->sorted(Ljava/lang/Iterable;)Ljava/util/List; +PLkotlin/collections/CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;Z)Z PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->retainAll(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Z PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->retainAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z +PLkotlin/collections/CollectionsKt___CollectionsKt;->chunked(Ljava/lang/Iterable;I)Ljava/util/List; PLkotlin/collections/CollectionsKt___CollectionsKt;->intersect(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set; +PLkotlin/collections/CollectionsKt___CollectionsKt;->sorted(Ljava/lang/Iterable;)Ljava/util/List; +PLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; +PLkotlin/collections/EmptyList;->listIterator()Ljava/util/ListIterator; +PLkotlin/collections/EmptyMap;->getSize()I +PLkotlin/collections/EmptyMap;->size()I +PLkotlin/collections/MapsKt;->plus(Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; +PLkotlin/collections/MapsKt__MapsKt;->plus(Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; +PLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +PLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; +PLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V PLkotlin/sequences/SequenceBuilderIterator;->yieldAll(Ljava/util/Iterator;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; PLkotlin/sequences/SequenceScope;->yieldAll(Lkotlin/sequences/Sequence;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLkotlin/sequences/SequencesKt;->filterIsInstance(Lkotlin/sequences/Sequence;Ljava/lang/Class;)Lkotlin/sequences/Sequence; 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; @@ -37519,18 +35235,44 @@ PLme/leolin/shortcutbadger/impl/ZukHomeBadger;->getSupportLaunchers()Ljava/util/ PLme/leolin/shortcutbadger/util/BroadcastHelper;->resolveBroadcast(Landroid/content/Context;Landroid/content/Intent;)Ljava/util/List; PLme/leolin/shortcutbadger/util/BroadcastHelper;->sendDefaultIntentExplicitly(Landroid/content/Context;Landroid/content/Intent;)V PLme/leolin/shortcutbadger/util/BroadcastHelper;->sendIntentExplicitly(Landroid/content/Context;Landroid/content/Intent;)V -PLokhttp3/internal/ws/RealWebSocket$Close;->(ILokio/ByteString;J)V -PLokhttp3/internal/ws/RealWebSocket;->runWriter()V +PLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +PLorg/greenrobot/eventbus/EventBus;->isRegistered(Ljava/lang/Object;)Z +PLorg/greenrobot/eventbus/Subscription;->equals(Ljava/lang/Object;)Z PLorg/signal/core/util/ByteSize;->getInKibiBytes()F PLorg/signal/core/util/ByteSize;->getInMebiBytes()F +PLorg/signal/core/util/CollectionsExtensionsKt;->flatten(Ljava/util/List;)Ljava/util/Map; PLorg/signal/core/util/FloatExtensionsKt;->roundedString(FI)Ljava/lang/String; +PLorg/signal/core/util/ListUtil;->chunk(Ljava/util/List;I)Ljava/util/List; PLorg/signal/core/util/MemoryTracker$$ExternalSyntheticLambda1;->run()V PLorg/signal/core/util/MemoryTracker$AppHeapUsage;->getCurrentTotalBytes()J PLorg/signal/core/util/MemoryTracker$AppHeapUsage;->getUsedBytes()J PLorg/signal/core/util/MemoryTracker;->byteDisplay(J)Ljava/lang/String; PLorg/signal/core/util/MemoryTracker;->poll()V +PLorg/signal/core/util/OptionalExtensionsKt;->orNull(Lj$/util/Optional;)Ljava/lang/Object; PLorg/signal/core/util/PendingIntentFlags;->cancelCurrent()I -PLorg/signal/core/util/StringUtil;->forceLtr(Ljava/lang/CharSequence;)Ljava/lang/String; +PLorg/signal/core/util/SelectBuilderPart4a;->limit(Ljava/lang/String;)Lorg/signal/core/util/SelectBuilderPart5; +PLorg/signal/core/util/SqlUtil$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function1;)V +PLorg/signal/core/util/SqlUtil$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/signal/core/util/SqlUtil$CollectionOperator;->$values()[Lorg/signal/core/util/SqlUtil$CollectionOperator; +PLorg/signal/core/util/SqlUtil$CollectionOperator;->()V +PLorg/signal/core/util/SqlUtil$CollectionOperator;->(Ljava/lang/String;ILjava/lang/String;)V +PLorg/signal/core/util/SqlUtil$CollectionOperator;->getSql()Ljava/lang/String; +PLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->(Ljava/lang/String;)V +PLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/signal/core/util/SqlUtil$buildCustomCollectionQuery$1;->invoke(Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->$r8$lambda$zW4YXJaIlJT3vPgMCfyiQ3eZdqc(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->access$buildSingleCustomCollectionQuery(Lorg/signal/core/util/SqlUtil;Ljava/lang/String;Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->appendArg([Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String; +PLorg/signal/core/util/SqlUtil;->buildCollectionQuery$default(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;ILorg/signal/core/util/SqlUtil$CollectionOperator;ILjava/lang/Object;)Ljava/util/List; +PLorg/signal/core/util/SqlUtil;->buildCollectionQuery(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;ILorg/signal/core/util/SqlUtil$CollectionOperator;)Ljava/util/List; +PLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery$lambda$11(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;)Ljava/util/List; +PLorg/signal/core/util/SqlUtil;->buildCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;I)Ljava/util/List; +PLorg/signal/core/util/SqlUtil;->buildSingleCollectionQuery$default(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;Lorg/signal/core/util/SqlUtil$CollectionOperator;ILjava/lang/Object;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->buildSingleCollectionQuery(Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;Lorg/signal/core/util/SqlUtil$CollectionOperator;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/SqlUtil;->buildSingleCustomCollectionQuery(Ljava/lang/String;Ljava/util/List;)Lorg/signal/core/util/SqlUtil$Query; +PLorg/signal/core/util/StringUtil;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +PLorg/signal/core/util/ToolbarExtensionsKt;->setActionItemTint(Landroidx/appcompat/widget/Toolbar;I)V PLorg/signal/core/util/concurrent/DeadlockDetector$$ExternalSyntheticLambda0;->run()V PLorg/signal/core/util/concurrent/DeadlockDetector$Companion;->access$isExecutorFull(Lorg/signal/core/util/concurrent/DeadlockDetector$Companion;Ljava/util/concurrent/ExecutorService;)Z PLorg/signal/core/util/concurrent/DeadlockDetector$Companion;->isExecutorFull(Ljava/util/concurrent/ExecutorService;)Z @@ -37548,11 +35290,29 @@ 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/RxExtensions$subscribeWithSubject$1;->(Ljava/lang/Object;)V +PLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$1;->invoke(Ljava/lang/Object;)V +PLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$2;->(Ljava/lang/Object;)V +PLorg/signal/core/util/concurrent/RxExtensions$subscribeWithSubject$3;->(Ljava/lang/Object;)V +PLorg/signal/core/util/concurrent/RxExtensions;->subscribeWithSubject(Lio/reactivex/rxjava3/core/Observable;Lio/reactivex/rxjava3/subjects/Subject;Lio/reactivex/rxjava3/disposables/CompositeDisposable;)Lio/reactivex/rxjava3/subjects/Subject; +PLorg/signal/core/util/concurrent/SettableFuture;->set(Ljava/lang/Object;)Z 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;->onDataItemChanged(Ljava/lang/Object;)V +PLorg/signal/paging/ProxyPagingController;->onDataItemChanged(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda59;->isInternal()Z PLorg/thoughtcrime/securesms/LoggingFragment;->onDestroy()V PLorg/thoughtcrime/securesms/LoggingFragment;->onStop()V @@ -37562,6 +35322,10 @@ PLorg/thoughtcrime/securesms/PassphraseRequiredActivity;->removeClearKeyReceiver PLorg/thoughtcrime/securesms/animation/AnimationStartListener;->()V PLorg/thoughtcrime/securesms/animation/AnimationStartListener;->()V PLorg/thoughtcrime/securesms/animation/AnimationStartListener;->onAnimationEnd(Landroid/animation/Animator;)V +PLorg/thoughtcrime/securesms/attachments/Attachment;->isInProgress()Z +PLorg/thoughtcrime/securesms/attachments/Attachment;->isPermanentlyFailed()Z +PLorg/thoughtcrime/securesms/attachments/AttachmentId;->hashCode()I +PLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->hashCode()I PLorg/thoughtcrime/securesms/audio/AudioRecorder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/audio/AudioRecorder;)V PLorg/thoughtcrime/securesms/audio/AudioRecorder;->()V PLorg/thoughtcrime/securesms/audio/AudioRecorder;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/audio/AudioRecordingHandler;)V @@ -37572,80 +35336,271 @@ 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/avatar/view/AvatarView$WhenMappings;->()V +PLorg/thoughtcrime/securesms/avatar/view/AvatarView;->displayChatAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;Z)V +PLorg/thoughtcrime/securesms/avatar/view/AvatarView;->hideStoryRing()V +PLorg/thoughtcrime/securesms/avatar/view/AvatarView;->setStoryRingFromState(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$Companion;->()V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration$onDrawOver$notAnimated$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->()V +PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->access$getAnimationState$p(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)Ljava/util/Map; PLorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;->access$getMessageIdsOpenedThisSession$p(Lorg/thoughtcrime/securesms/badges/gifts/OpenableGiftItemDecoration;)Ljava/util/Set; +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;->setRadii(IIII)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;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/components/AnimatingToggle;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLorg/thoughtcrime/securesms/components/AnimatingToggle;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V PLorg/thoughtcrime/securesms/components/AnimatingToggle;->display(Landroid/view/View;)V +PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/AudioView;)V PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda0;->onChanged(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/AudioView;)V +PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/components/AudioView;I)V +PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda4;->run()V +PLorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;)V +PLorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/AudioView$PlayPauseClickedListener-IA;)V +PLorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;)V +PLorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener;->(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/AudioView$SeekBarModifiedListener-IA;)V PLorg/thoughtcrime/securesms/components/AudioView;->$r8$lambda$70S_ChWvvHg6uKYhRw5m0jX0OG0(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackState;)V +PLorg/thoughtcrime/securesms/components/AudioView;->$r8$lambda$ttH02xbblnAnQbQdy9cXzPNafwQ(Lorg/thoughtcrime/securesms/components/AudioView;I)V +PLorg/thoughtcrime/securesms/components/AudioView;->()V +PLorg/thoughtcrime/securesms/components/AudioView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/components/AudioView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V PLorg/thoughtcrime/securesms/components/AudioView;->getPlaybackStateObserver()Landroidx/lifecycle/Observer; PLorg/thoughtcrime/securesms/components/AudioView;->hasAudioUri()Z PLorg/thoughtcrime/securesms/components/AudioView;->isTarget(Landroid/net/Uri;)Z +PLorg/thoughtcrime/securesms/components/AudioView;->lambda$setTint$3(I)V +PLorg/thoughtcrime/securesms/components/AudioView;->onAttachedToWindow()V PLorg/thoughtcrime/securesms/components/AudioView;->onDetachedFromWindow()V PLorg/thoughtcrime/securesms/components/AudioView;->onDuration(Landroid/net/Uri;J)V PLorg/thoughtcrime/securesms/components/AudioView;->onPlaybackState(Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackState;)V 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/AudioView;->setProgressAndPlayBackgroundTint(I)V +PLorg/thoughtcrime/securesms/components/AudioView;->setTint(I)V PLorg/thoughtcrime/securesms/components/AvatarImageView;->setFallbackPhotoProvider(Lorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;)V +PLorg/thoughtcrime/securesms/components/AvatarImageView;->setOnClickListener(Landroid/view/View$OnClickListener;)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;->ellipsizeToWidth(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +PLorg/thoughtcrime/securesms/components/ComposeText;->isLandscape()Z PLorg/thoughtcrime/securesms/components/ComposeText;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +PLorg/thoughtcrime/securesms/components/ComposeText;->onMeasure(II)V PLorg/thoughtcrime/securesms/components/ComposeText;->setCursorPositionChangedListener(Lorg/thoughtcrime/securesms/components/ComposeText$CursorPositionChangedListener;)V +PLorg/thoughtcrime/securesms/components/ComposeText;->setHint(Ljava/lang/String;)V +PLorg/thoughtcrime/securesms/components/ComposeText;->setHintWithChecks(Ljava/lang/CharSequence;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setInlineQueryChangedListener(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryChangedListener;)V +PLorg/thoughtcrime/securesms/components/ComposeText;->setMediaListener(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setMentionValidator(Lorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher$MentionValidator;)V +PLorg/thoughtcrime/securesms/components/ComposeText;->setMessageSendType(Lorg/thoughtcrime/securesms/conversation/MessageSendType;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setStylingChangedListener(Lorg/thoughtcrime/securesms/components/ComposeText$StylingChangedListener;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda2;->onLayoutChange(Landroid/view/View;IIIIIIII)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->$r8$lambda$rILpFw6OPAVn7dsgVBus6R0qlZk(Lorg/thoughtcrime/securesms/components/ConversationItemFooter;Landroid/view/View;IIIIIIII)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->buildMessageId(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)J +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->disableBubbleBackground()V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->getDateView()Landroid/view/View; +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->getPlaybackSpeedToggleTouchDelegateRect()Landroid/graphics/Rect; +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->hideAudioDurationViews()V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->lambda$init$0(Landroid/view/View;IIIIIIII)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->notifyTouchDelegateChanged(Landroid/graphics/Rect;Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->onDetachedFromWindow()V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentAudioDuration(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentInsecureIndicator(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentSimInfo(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->presentTimer(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setMessageRecord(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/Locale;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setOnlyShowSendingStatus(ZLorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setPlaybackSpeedListener(Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$PlaybackSpeedListener;)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;->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 PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setUnreadCount(I)V +PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setUnreadCountBackgroundTint(I)V +PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setWallpaperEnabled(Z)V +PLorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;->onFinishInflate()V PLorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;->setEventListener(Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar$EventListener;)V +PLorg/thoughtcrime/securesms/components/CornerMask;->setRadius(I)V PLorg/thoughtcrime/securesms/components/DeliveryStatusView;->isPending()Z +PLorg/thoughtcrime/securesms/components/ExpirationTimerView;->stopAnimation()V +PLorg/thoughtcrime/securesms/components/HidingLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLorg/thoughtcrime/securesms/components/HidingLinearLayout;->hide()V PLorg/thoughtcrime/securesms/components/HidingLinearLayout;->show()V PLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->addInputListener(Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout$Listener;)V +PLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->setFragmentManager(Landroidx/fragment/app/FragmentManager;)V PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/InputPanel$Listener;)V PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/components/InputPanel$Listener;)V +PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V +PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V +PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V +PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V +PLorg/thoughtcrime/securesms/components/InputPanel$$ExternalSyntheticLambda8;->(Lorg/thoughtcrime/securesms/components/InputPanel;)V PLorg/thoughtcrime/securesms/components/InputPanel$3;->(Lorg/thoughtcrime/securesms/components/InputPanel;Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/InputPanel$3;->onAnimationStart(Landroid/animation/Animator;)V +PLorg/thoughtcrime/securesms/components/InputPanel$RecordTime;->(Landroid/widget/TextView;Landroid/view/View;JLjava/lang/Runnable;)V +PLorg/thoughtcrime/securesms/components/InputPanel$RecordTime;->(Landroid/widget/TextView;Landroid/view/View;JLjava/lang/Runnable;Lorg/thoughtcrime/securesms/components/InputPanel$RecordTime-IA;)V +PLorg/thoughtcrime/securesms/components/InputPanel$SlideToCancel;->(Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/InputPanel;->fadeIn(Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/InputPanel;->fadeInNormalComposeViews()V PLorg/thoughtcrime/securesms/components/InputPanel;->getPlaybackStateObserver()Landroidx/lifecycle/Observer; PLorg/thoughtcrime/securesms/components/InputPanel;->inEditMessageMode()Z PLorg/thoughtcrime/securesms/components/InputPanel;->isRecordingInLockedMode()Z +PLorg/thoughtcrime/securesms/components/InputPanel;->onFinishInflate()V PLorg/thoughtcrime/securesms/components/InputPanel;->onPause()V PLorg/thoughtcrime/securesms/components/InputPanel;->readDimen(I)I +PLorg/thoughtcrime/securesms/components/InputPanel;->setHideForMessageRequestState(Z)V PLorg/thoughtcrime/securesms/components/InputPanel;->setLinkPreview(Lcom/bumptech/glide/RequestManager;Lj$/util/Optional;)V PLorg/thoughtcrime/securesms/components/InputPanel;->setListener(Lorg/thoughtcrime/securesms/components/InputPanel$Listener;)V +PLorg/thoughtcrime/securesms/components/InputPanel;->setMediaKeyboardToggleMode(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V +PLorg/thoughtcrime/securesms/components/InputPanel;->setMediaListener(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V PLorg/thoughtcrime/securesms/components/InputPanel;->setStickerSuggestions(Ljava/util/List;)V PLorg/thoughtcrime/securesms/components/InputPanel;->setVoiceNoteDraft(Lorg/thoughtcrime/securesms/database/DraftTable$Draft;)V +PLorg/thoughtcrime/securesms/components/InputPanel;->setWallpaperEnabled(Z)V +PLorg/thoughtcrime/securesms/components/InputPanel;->showMediaKeyboardToggle(Z)V +PLorg/thoughtcrime/securesms/components/InputPanel;->updateVisibility()V +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$$ExternalSyntheticLambda1;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$KeyboardInsetAnimator;->getAnimating()Z +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$keyboardGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$keyboardGuideline$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$navigationBarGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$navigationBarGuideline$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentEndGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentEndGuideline$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentStartGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$parentStartGuideline$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuideline$2;->invoke()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$statusBarGuideline$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->$r8$lambda$wNlRlegYRZAGLCv-uS3_baE_8zg(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->_init_$lambda$0(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->addKeyboardStateListener(Lorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout$KeyboardStateListener;)V +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->applyInsets(Landroidx/core/graphics/Insets;Landroidx/core/graphics/Insets;)V +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getKeyboardGuideline()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getNavigationBarGuideline()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getParentEndGuideline()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getParentStartGuideline()Landroidx/constraintlayout/widget/Guideline; +PLorg/thoughtcrime/securesms/components/InsetAwareConstraintLayout;->getStatusBarGuideline()Landroidx/constraintlayout/widget/Guideline; PLorg/thoughtcrime/securesms/components/LinkPreviewView;->onSaveInstanceState()Landroid/os/Parcelable; +PLorg/thoughtcrime/securesms/components/LinkPreviewView;->setCloseClickedListener(Lorg/thoughtcrime/securesms/components/LinkPreviewView$CloseClickedListener;)V PLorg/thoughtcrime/securesms/components/LinkPreviewView;->setCorners(II)V PLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V PLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->copy(IIIILorg/thoughtcrime/securesms/mms/SlidesClickedListener;)Lorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState; PLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->getDownloadListener()Lorg/thoughtcrime/securesms/mms/SlidesClickedListener; +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$FloatingRecordButton;->(Landroid/content/Context;Landroid/widget/ImageView;)V +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$LockDropTarget;->(Landroid/content/Context;Landroid/view/View;)V +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->$values()[Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State; +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->()V +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView$State;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->cancelAction(Z)V PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->isRecordingLocked()Z +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->onFinishInflate()V +PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->setHandler(Lorg/thoughtcrime/securesms/audio/AudioRecordingHandler;)V +PLorg/thoughtcrime/securesms/components/Outliner;->setColor(I)V +PLorg/thoughtcrime/securesms/components/Outliner;->setRadii(IIII)V +PLorg/thoughtcrime/securesms/components/Outliner;->setStrokeWidth(F)V +PLorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView;->setPlaybackSpeedListener(Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$PlaybackSpeedListener;)V PLorg/thoughtcrime/securesms/components/QuoteView;->onDetachedFromWindow()V +PLorg/thoughtcrime/securesms/components/QuoteView;->setWallpaperEnabled(Z)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$2;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$2;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->(Lkotlin/jvm/functions/Function1;)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$4;->(Lkotlin/jvm/functions/Function1;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$5;->(Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$DefaultScrollStrategy;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$DefaultScrollStrategy;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;->(IZLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollStrategy;)V PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;->getPosition()I +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->apply(JLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;)Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest; +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->()V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Landroidx/recyclerview/widget/RecyclerView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lio/reactivex/rxjava3/disposables/CompositeDisposable;)V +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->isListCommitted()Z +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->notifyListCommitted()V 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 PLorg/thoughtcrime/securesms/components/SearchView;->appendEmojiFilter(Landroid/widget/TextView;)[Landroid/text/InputFilter; PLorg/thoughtcrime/securesms/components/SearchView;->initEmojiFilter()V +PLorg/thoughtcrime/securesms/components/SendButton;->()V +PLorg/thoughtcrime/securesms/components/SendButton;->(Landroid/content/Context;Landroid/util/AttributeSet;)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;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +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; PLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/ViewBinderDelegate;->onStop(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->getProgressDrawable()Landroid/graphics/drawable/Drawable; +PLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->init()V +PLorg/thoughtcrime/securesms/components/WaveFormSeekBarView;->setProgressDrawable(Landroid/graphics/drawable/Drawable;)V PLorg/thoughtcrime/securesms/components/emoji/EmojiEditText;->addOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V PLorg/thoughtcrime/securesms/components/emoji/EmojiEditText;->removeOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V PLorg/thoughtcrime/securesms/components/emoji/EmojiEditText;->setOnFocusChangeListener(Landroid/view/View$OnFocusChangeListener;)V @@ -37656,10 +35611,34 @@ PLorg/thoughtcrime/securesms/components/emoji/EmojiProvider;->lambda$getEmojiDra 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/emoji/EmojiTextView;->$r8$lambda$5IPAQraRDnd37oqJyWeDCIArE8A(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Ljava/lang/String;)Ljava/lang/Float; +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->ellipsizeAnyTextForMaxLength()V +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->getLastLineWidth()I +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->isJumbomoji()Z +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->isSingleLine()Z +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->lambda$getLongestLineWidth$0(Ljava/lang/String;)Ljava/lang/Float; +PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setMentionBackgroundTint(I)V +PLorg/thoughtcrime/securesms/components/emoji/EmojiToggle$1;->()V +PLorg/thoughtcrime/securesms/components/emoji/EmojiToggle;->setStickerMode(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V +PLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->()V +PLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->(Landroid/content/Context;Ljava/lang/String;)V +PLorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;->getPersistedCache()Ljava/util/LinkedHashSet; +PLorg/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel;->getEmoji()Ljava/util/List; 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/MentionRendererDelegate;->setTint(I)V PLorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher;->setMentionValidator(Lorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher$MentionValidator;)V +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->()V +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme$Companion;->resolveTheme(ZZZ)Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->$values()[Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->()V +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->(Ljava/lang/String;IIII)V +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getBackgroundColor(Landroid/content/Context;)I +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getBarColor(Landroid/content/Context;)I +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->getForegroundColor(Landroid/content/Context;)I +PLorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme;->resolveTheme(ZZZ)Lorg/thoughtcrime/securesms/components/quotes/QuoteViewColorTheme; 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 PLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;->lambda$onAnimationEnd$0(J)V @@ -37669,9 +35648,61 @@ 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;->setCancelClickListener(Landroid/view/View$OnClickListener;)V +PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setTransferClickListener(Landroid/view/View$OnClickListener;)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 @@ -37685,58 +35716,166 @@ PLorg/thoughtcrime/securesms/components/voice/VoiceNotePlayerCallback;->onDiscon PLorg/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager;->unregisterFromLifecycle()V +PLorg/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto;->asSmallDrawable(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/colors/AvatarColor;Z)Landroid/graphics/drawable/Drawable; PLorg/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto;->equals(Ljava/lang/Object;)Z 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/ClipProjectionDrawable;->draw(Landroid/graphics/Canvas;)V +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZ)V +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZZZ)V +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->(ZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->isHidden()Z +PLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;->isMessageRequestAccepted()Z +PLorg/thoughtcrime/securesms/conversation/ConversationData;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationData;->(Lorg/thoughtcrime/securesms/recipients/Recipient;JJIIIILorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILjava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/ConversationData;->getGroupMemberAcis()Ljava/util/List; +PLorg/thoughtcrime/securesms/conversation/ConversationData;->getMessageRequestData()Lorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData; +PLorg/thoughtcrime/securesms/conversation/ConversationData;->getStartPosition()I +PLorg/thoughtcrime/securesms/conversation/ConversationData;->getThreadSize()I +PLorg/thoughtcrime/securesms/conversation/ConversationData;->getUnreadCount()I +PLorg/thoughtcrime/securesms/conversation/ConversationData;->shouldJumpToMessage()Z +PLorg/thoughtcrime/securesms/conversation/ConversationData;->shouldScrollToLastSeen()Z +PLorg/thoughtcrime/securesms/conversation/ConversationData;->showUniversalExpireTimerMessage()Z 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;->setSubtitle(Ljava/lang/CharSequence;I)V PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->showBackgroundBubble(Z)V +PLorg/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 PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->canInitializeFromDatabase()Z +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->from(Landroid/os/Bundle;)Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getConversationScreenType()Lorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType; +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDistributionType()I PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftContentType()Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftMedia()Landroid/net/Uri; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftMediaType()Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftText()Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getMedia()Ljava/util/ArrayList; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getShareDataTimestamp()J +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getStartingPosition()I PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getStickerLocator()Lorg/thoughtcrime/securesms/stickers/StickerLocator; +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getThreadId()J +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getWallpaper()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isBorderless()Z +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isFirstTimeInSelfCreatedGroup()Z +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isWithSearchOpen()Z +PLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;->isInPopup()Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda9;->(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;->canPlayContent()Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->forceFooter(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBadgeImageView()Landroid/view/View; +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBodyBubbleCorners(IIII)Lorg/thoughtcrime/securesms/util/Projection$Corners; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBubbleViews()Ljava/util/List; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getContactPhotoHolderView()Landroid/view/View; -PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getGiftId()J +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getDefaultBubbleColor(Z)I +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getDefaultTopMarginForRecord(Lorg/thoughtcrime/securesms/database/model/MessageRecord;II)I PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getQuotedIndicatorView()Landroid/view/View; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getReactionsView()Landroid/view/View; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getReactionsView()Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getReplyView()Landroid/view/View; +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getRoot()Landroid/view/ViewGroup; +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasAudio(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasDocument(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasLinkPreview(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasOnlyThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasQuote(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasSharedContact(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasSticker(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->hasThumbnail(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isBorderless(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isCaptionlessMms(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isCondensedMode()Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isContentCondensed()Z PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isGiftMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isSingularMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lj$/util/Optional;Lj$/util/Optional;Z)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isStoryReaction(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->isViewOnceMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z PLorg/thoughtcrime/securesms/conversation/ConversationItem;->onDetachedFromWindow()V PLorg/thoughtcrime/securesms/conversation/ConversationItem;->onRecipientChanged(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->readDimen(Landroid/content/Context;I)I +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setEventListener(Lorg/thoughtcrime/securesms/BindableConversationItem$EventListener;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setGroupMessageStatus(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setHasBeenScheduled(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setOutlinerRadii(Lorg/thoughtcrime/securesms/components/Outliner;IIII)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setParentScrolling(Z)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->setStoryReactionLabel(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItem;->shouldDrawBodyBubbleOutline(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z +PLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->onSizeChanged(IIII)V +PLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setOnSizeChangedListener(Lorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$OnSizeChangedListener;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setOutliners(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setParentScrolling(Z)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 PLorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback;->attachToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V PLorg/thoughtcrime/securesms/conversation/ConversationItemTouchListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItemTouchListener$Callback;)V +PLorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;->(Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;)V +PLorg/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; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/CharSequence;Ljava/util/List;ZLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;)V +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/CharSequence;Ljava/util/List;ZLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;Lorg/thoughtcrime/securesms/conversation/ConversationMessage-IA;)V +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->equals(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getBottomButton()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getFormattedDate(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getMessageRecord()Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getMultiselectCollection()Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->getThreadRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hasBeenQuoted()Z +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->hasStyleLinks()Z +PLorg/thoughtcrime/securesms/conversation/ConversationMessage;->isTextOnly(Landroid/content/Context;)Z PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider$onCreateMenu$1;->(Landroid/view/Menu;Z)V PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider$onCreateMenu$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider$onCreateMenu$1;->invoke(Z)V +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->(Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Callback;Lorg/signal/core/util/concurrent/LifecycleDisposable;Z)V +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->(Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Callback;Lorg/signal/core/util/concurrent/LifecycleDisposable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V 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$Snapshot;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->(Lorg/thoughtcrime/securesms/recipients/Recipient;ZLio/reactivex/rxjava3/core/Observable;ZZZZIJLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Z)V +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component1()Lorg/thoughtcrime/securesms/recipients/Recipient; +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component10()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component11()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component2()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component3()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component4()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component5()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component6()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component7()Z +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component8()I +PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot;->component9()J +PLorg/thoughtcrime/securesms/conversation/ConversationRepository;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationRepository;->()V +PLorg/thoughtcrime/securesms/conversation/ConversationRepository;->getConversationData(JLorg/thoughtcrime/securesms/recipients/Recipient;I)Lorg/thoughtcrime/securesms/conversation/ConversationData; PLorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel;->(Ljava/lang/String;)V PLorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel;->getSearchResults()Landroidx/lifecycle/LiveData; +PLorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter;->(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter$EventListener;)V PLorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter;->setStickers(Ljava/util/List;)V PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper$BubblePositionInterpolator;->(FFF)V PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper$BubblePositionInterpolator;->(FFFLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper$BubblePositionInterpolator-IA;)V @@ -37752,8 +35891,17 @@ PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper;->upd PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper;->updateQuotedIndicatorTransition(Landroid/view/View;FFF)V PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper;->updateReactionsTransition(Landroid/view/View;FF)V PLorg/thoughtcrime/securesms/conversation/ConversationSwipeAnimationHelper;->updateReplyIconTransition(Landroid/view/View;FFF)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Landroid/view/View$OnClickListener;)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->clearExpiring()V PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->onSaveInstanceState()Landroid/os/Parcelable; +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setIndividualRecipientTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setOnStoryRingClickListener(Landroid/view/View$OnClickListener;)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setRecipientTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setStoryRingFromState(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setTitle(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->setVerified(Z)V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->updateSubtitleVisibility()V +PLorg/thoughtcrime/securesms/conversation/ConversationTitleView;->updateVerifiedSubtitleVisibility()V PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/ConversationUpdateTick;)V PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick$1;->(Lkotlin/jvm/functions/Function0;)V PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick$Companion;->()V @@ -37775,10 +35923,31 @@ PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambd 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 +PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->()V +PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;Landroid/content/Context;Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->ignoreViewReveals()V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->lambda$onViewsRevealed$0(J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->lambda$onViewsRevealed$1(J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->onViewsRevealed(J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->stopIgnoringViewReveals(Ljava/lang/Long;)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType$Creator;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->$values()[Lorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType; +PLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->()V +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->(IIIIILorg/thoughtcrime/securesms/conversation/MessageSendType$TransportType;Lorg/thoughtcrime/securesms/util/CharacterCalculator;Ljava/lang/CharSequence;Ljava/lang/Integer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->getButtonDrawableRes()I +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->getComposeHintRes()I +PLorg/thoughtcrime/securesms/conversation/MessageSendType;->getTitleRes()I +PLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->getBottomButton()Lorg/thoughtcrime/securesms/database/model/databaseprotos/BodyRangeList$BodyRange$Button; +PLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->getHasStyleLinks()Z +PLorg/thoughtcrime/securesms/conversation/MessageStyler$Result;->none()Lorg/thoughtcrime/securesms/conversation/MessageStyler$Result; PLorg/thoughtcrime/securesms/conversation/MessageStyler;->boldStyle()Landroid/text/style/CharacterStyle; PLorg/thoughtcrime/securesms/conversation/MessageStyler;->italicStyle()Landroid/text/style/CharacterStyle; PLorg/thoughtcrime/securesms/conversation/MessageStyler;->monoStyle()Landroid/text/style/CharacterStyle; @@ -37790,9 +35959,16 @@ PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository$$ExternalS PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository$$ExternalSyntheticLambda5;->subscribe(Lio/reactivex/rxjava3/core/ObservableEmitter;)V PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->$r8$lambda$2XiX_Dh66c_pIVZzuRFfoiDjp1A(JLio/reactivex/rxjava3/core/ObservableEmitter;)V PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->$r8$lambda$ej8HJIkF2PUVMbFRXSAuhVdCWz4(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->()V +PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->()V PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->getScheduledMessageCount$lambda$6$lambda$5(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->getScheduledMessageCount$lambda$6(JLio/reactivex/rxjava3/core/ObservableEmitter;)V PLorg/thoughtcrime/securesms/conversation/ScheduledMessagesRepository;->getScheduledMessageCount(J)Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;)V +PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->()V +PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->clearDraft()V PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->getPlaybackStateObserver()Landroidx/lifecycle/Observer; PLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->setListener(Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView$Listener;)V @@ -37805,11 +35981,29 @@ 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/colors/ChatColors;->getChatBubbleMask()Landroid/graphics/drawable/Drawable; +PLorg/thoughtcrime/securesms/conversation/colors/ChatColors;->isGradient()Z +PLorg/thoughtcrime/securesms/conversation/colors/Colorizer$onGroupMembershipChanged$$inlined$sortedBy$1;->()V +PLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getDefaultColor(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)I +PLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingFooterIconColor(Landroid/content/Context;Z)I +PLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->getIncomingFooterTextColor(Landroid/content/Context;Z)I +PLorg/thoughtcrime/securesms/conversation/colors/Colorizer;->onGroupMembershipChanged(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$edgeEffectFactory$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$scrollListener$1;->(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)V PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$scrollListener$1;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->()V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getChatColors$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getLayerXfermode$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Landroid/graphics/PorterDuffXfermode; PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getLayoutManager(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Landroidx/recyclerview/widget/LinearLayoutManager; +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getNoLayerXfermode$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Landroid/graphics/PorterDuffXfermode; +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$getUseLayer$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;)Z PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$setUseLayer$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;Z)V PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->getLayoutManager()Landroidx/recyclerview/widget/LinearLayoutManager; +PLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->setChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)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 @@ -37861,14 +36055,57 @@ 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$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->$r8$lambda$IJ0Uk3eauzGuBkd_D1PotCUrlIQ(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animateAppearance(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z 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/Multiselect;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->getMmsParts(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lorg/thoughtcrime/securesms/database/model/MmsMessageRecord;)Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect;->getParts(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion;->fromSet(Ljava/util/Set;)Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->(Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single;->toSet()Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)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;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->consumePulseRequest(Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawFocusShadeOverIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawFocusShadeUnderIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->drawPulseShadeOverIfNecessary(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->getCurrentSelection(Landroidx/recyclerview/widget/RecyclerView;)Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->invalidateIfPulseRequestAnimatorsAreRunning(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onCreate(Landroidx/lifecycle/LifecycleOwner;)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;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onStop(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text;->hashCode()I +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->()V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2;)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2$$ExternalSyntheticLambda1;->onFocusChange(Landroid/view/View;Z)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2$1;->(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2;)V @@ -37892,39 +36129,125 @@ PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsContr PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2;->dismiss()V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2;->onOrientationChange(Z)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2;->updateList(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Results;)V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$1;->(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;)V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$None;->()V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2$None;->()V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->()V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;Lorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;)V +PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;Lorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;Lorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;Lorg/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->getResults()Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2;->getSelection()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->()V +PLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->(Lorg/thoughtcrime/securesms/database/RecipientTable;)V +PLorg/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerRepositoryV2;->(Lorg/thoughtcrime/securesms/database/RecipientTable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract;->()V +PLorg/thoughtcrime/securesms/conversation/v2/AddToContactsContract;->()V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener$$ExternalSyntheticLambda0;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener$TransitionListener;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->()V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onPause(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->$r8$lambda$rJaCnn2xrQlJTPwnM83GXFMdMzE(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->getVoiceNoteMediaController()Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController; PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onCreate$lambda$0(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onDestroy()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onResume()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$ContactShareEditor;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$ContactShareEditor;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$GifSearch;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$GifSearch;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaCapture;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaCapture;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaGallery;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaGallery;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaSelection;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$MediaSelection;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectContact;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectContact;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectFile;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectFile;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectLocation;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$SelectLocation;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$cameraLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$contactShareLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$gifSearchLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaGalleryLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$mediaSelectionLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectContactLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectFileLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$selectLocationLauncher$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts;->(Landroidx/fragment/app/Fragment;Lorg/thoughtcrime/securesms/conversation/v2/ConversationActivityResultContracts$Callbacks;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda5;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda7;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)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;->getNextMessage()Lj$/util/Optional; PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->showProjectionArea()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function1;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$bind$subtitle$2;->()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$bind$subtitle$2;->()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$bind$subtitle$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$bind$subtitle$2;->invoke(Ljava/lang/String;)Ljava/lang/String; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->$r8$lambda$RwrnJe2SKX6YQ0B5PDojQRbXNOc(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/String; +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$OnScrollStateChangedListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)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$lambda$1(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/String; 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; PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$onDetachedFromRecyclerView$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->$r8$lambda$0GW66dll143qhTHiVUdlBHolclI(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->$r8$lambda$u2AJxgyeBquqI1nF9ok3s6g0b5Q(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->(Landroidx/lifecycle/LifecycleOwner;Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener;ZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->_init_$lambda$4(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->_init_$lambda$6(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getColorizer$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getCondensedMode$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getHasWallpaper$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getInlineContent$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$getLifecycleOwner$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Landroidx/lifecycle/LifecycleOwner; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->access$get_selected$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)Ljava/util/HashSet; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->consumePulseRequest()Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge$PulseRequest; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getClickListener()Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getColorizer()Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getDisplayMode()Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getNextMessage(I)Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getPreviousMessage(I)Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getRequestManager()Lcom/bumptech/glide/RequestManager; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->getSearchQuery()Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->hasNoConversationMessages()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->hasWallpaper()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->isMessageRequestAccepted()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->isParentInScroll()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onDetachedFromRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onHasWallpaperChanged(Z)Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onViewRecycled(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->onViewRecycled(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->setMessageRequestAccepted(Z)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->setMessageRequestIsAccepted(Z)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->setSearchQuery(Ljava/lang/String;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->updateSearchQuery(Ljava/lang/String;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reminderStub$2;->invoke()Ljava/lang/Object; @@ -37945,6 +36268,9 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->getUnverif PLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->getVoiceNotePlayerStub()Lorg/thoughtcrime/securesms/util/views/Stub; PLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->hide(Lorg/thoughtcrime/securesms/util/views/Stub;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;->setListener(Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$Listener;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda11;->onLayoutChange(Landroid/view/View;IIIIIIII)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda14;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda16;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda18;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V @@ -37953,19 +36279,27 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSynth PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda21;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda22;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda23;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda24;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ActivityResultCallbacks;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$AttachmentKeyboardFragmentListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$AttachmentManagerListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$BackPressedDelegate;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ComposeTextEventsListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ComposeTextEventsListener;->onFocusChange(Landroid/view/View;Z)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationBannerListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationItemClickListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback$onOptionsMenuCreated$1;->(Landroidx/appcompat/widget/SearchView;Landroidx/appcompat/widget/SearchView$OnQueryTextListener;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/Menu;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback$onOptionsMenuCreated$queryListener$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->clearExpiring()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->getSnapshot()Lorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Snapshot; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOptionsMenuCallback;->onOptionsMenuCreated(Landroid/view/Menu;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$DataObserver;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$DataObserver;->onItemRangeChanged(II)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$DisabledInputListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$InputPanelListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$InputPanelMediaListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$KeyboardEvents;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$LastScrolledPositionUpdater;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroidx/recyclerview/widget/LinearLayoutManager;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$LastScrolledPositionUpdater;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V @@ -37975,6 +36309,7 @@ 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$ScrollDateHeaderHelper;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollDateHeaderHelper;->bind(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)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 @@ -37982,14 +36317,22 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener 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$ScrollListener;->$r8$lambda$SqiWUifYWEV36mNfvnPsrkHWoAw(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->onScrolled$lambda$0(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->presentComposeDivider()V 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 +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration;->setToolbarMargin(I)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroidx/appcompat/widget/Toolbar;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener;->onGlobalLayout()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$VoiceMessageRecordingSessionCallbacks;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$WhenMappings;->()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$binding$3;->invoke(Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGroupViewModel$2;->invoke()Landroidx/lifecycle/ViewModelProvider$Factory; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$conversationGroupViewModel$2;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$doAfterFirstRender$10;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$doAfterFirstRender$10;->invoke(Lj$/util/Optional;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$doAfterFirstRender$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -38028,9 +36371,21 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$doAfterFirstRe PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$doAfterFirstRender$conversationUpdateTick$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$draftViewModel$2;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$draftViewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$groupCallViewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$1;->(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$2;->(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$3;->(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$4;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5;->(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$5;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$6;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$7;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->invoke(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Ljava/lang/Boolean; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeInlineSearch$1$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeInlineSearch$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V @@ -38048,18 +36403,55 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$inlineQueryCon PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$inlineQueryController$2;->invoke()Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2;->invoke(Landroidx/lifecycle/SavedStateHandle;)Lorg/thoughtcrime/securesms/linkpreview/LinkPreviewViewModelV2; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$messageRequestRepository$2;->invoke()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; 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$moveToStartPosition$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$moveToStartPosition$1;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$moveToStartPosition$1;->invoke()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->accept(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$1;->accept(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->accept(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2;->accept(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->apply(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)Lio/reactivex/rxjava3/core/ObservableSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Ljava/util/List;Lkotlin/jvm/internal/Ref$BooleanRef;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$$ExternalSyntheticLambda0;->run()V 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$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1;->(Landroid/view/View;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1;->onLayoutChange(Landroid/view/View;IIIIIIII)V +PLorg/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 +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke$lambda$1(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Ljava/util/List;Lkotlin/jvm/internal/Ref$BooleanRef;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->invoke(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->(Lkotlin/jvm/functions/Function0;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->invoke()Landroidx/lifecycle/ViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$1;->invoke()Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$2;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$conversationToolbarOnScrollHelper$1;->(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$conversationToolbarOnScrollHelper$1;->get()Ljava/lang/Object; 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; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentGroupCallJoinButton$2;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentStoryRing$1;->invoke(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentTypingIndicator$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentTypingIndicator$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$registerForResults$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$registerForResults$1;->()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$sam$androidx_lifecycle_Observer$0;->(Lkotlin/jvm/functions/Function1;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$sam$androidx_lifecycle_Observer$0;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$sam$androidx_lifecycle_Observer$0;->getFunctionDelegate()Lkotlin/Function; @@ -38068,12 +36460,26 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$scheduledMessa PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$scheduledMessagesStub$2;->invoke()Lorg/thoughtcrime/securesms/util/views/Stub; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$searchViewModel$2;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$searchViewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1;->invoke()Landroidx/lifecycle/ViewModelStore; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$2;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$3;->invoke()Landroidx/lifecycle/ViewModelProvider$Factory; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$3;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$4;->invoke()Landroidx/lifecycle/ViewModelStore; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$4;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$5;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$5;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$6;->invoke()Landroidx/lifecycle/ViewModelProvider$Factory; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$activityViewModels$default$6;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$1;->invoke()Landroidx/fragment/app/Fragment; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$2;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$3;->invoke()Landroidx/lifecycle/ViewModelStore; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$3;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$4;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$4;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$6;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$6;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$7;->invoke()Landroidx/lifecycle/ViewModelStore; @@ -38084,33 +36490,55 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlin PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$special$$inlined$viewModels$default$9;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$stickerViewModel$2;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$stickerViewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/StickerSuggestionsViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->$r8$lambda$YDQLzyHN5FWBrQEkaTYrdZ0__OI(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/View;IIIIIIII)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$doAfterFirstRender(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getAdapter$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getAnimationsAllowed$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getBinding(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getColorizer$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getComposeText(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/components/ComposeText; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getComposeTextEventsListener$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ComposeTextEventsListener; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getConversationItemDecorations$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getDataObserver$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$DataObserver; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getGroupCallViewModel(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getInlineQueryViewModel$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryViewModelV2; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getInputPanel(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/components/InputPanel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getLayoutManager$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Landroidx/recyclerview/widget/ConversationLayoutManager; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getMarkReadHelper$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/MarkReadHelper; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getMessageRequestRepository(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getScrollListener$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getScrollToPositionDelegate$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getSearchMenuItem$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Landroid/view/MenuItem; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getTextDraftSaveDebouncer$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/util/Debouncer; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getThreadHeaderMarginDecoration$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$getViewModel(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$handleScheduledMessagesCountChange(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;I)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$invalidateOptionsMenu(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$isScrolledToBottom(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$isSearchRequested$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$moveToStartPosition(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/ConversationData;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$onRecipientChanged(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$presentIdentityRecordsState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$presentInputReadyState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$presentRequestReviewState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$presentScrollButtons(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$setAnimationsAllowed$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Z)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$setScrollListener$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$setSearchMenuItem$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/MenuItem;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$updateMessageRequestAcceptedState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Z)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->access$updateToggleButtonState(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getComposeText()Lorg/thoughtcrime/securesms/components/ComposeText; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getContainer()Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getConversationGroupViewModel()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getDraftViewModel()Lorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getGroupCallViewModel()Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getInlineQueryController()Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryResultsControllerV2; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getInputPanel()Lorg/thoughtcrime/securesms/components/InputPanel; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getKeyboardPagerViewModel()Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getLinkPreviewViewModel()Lorg/thoughtcrime/securesms/linkpreview/LinkPreviewViewModelV2; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getMessageRequestRepository()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getMotionEventRelay()Lorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getScheduledMessagesStub()Lorg/thoughtcrime/securesms/util/views/Stub; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getSearchNav()Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar; @@ -38121,91 +36549,312 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getShareData PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getStickerViewModel()Lorg/thoughtcrime/securesms/conversation/v2/StickerSuggestionsViewModel; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->getVoiceNoteMediaController()Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->handleScheduledMessagesCountChange(I)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeGiphyMp4()Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeInlineSearch()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeLinkPreviews()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeMediaKeyboard()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeSearch()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->initializeStickerSuggestions()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->invalidateOptionsMenu()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->isScrolledToBottom()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->moveToStartPosition(Lorg/thoughtcrime/securesms/conversation/ConversationData;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->observeConversationThread()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onDestroyView()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onPause()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onRecipientChanged(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onResume()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onViewCreated$lambda$0(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroid/view/View;IIIIIIII)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->onViewStateRestored(Landroid/os/Bundle;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentActionBarMenu()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentConversationTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentGroupCallJoinButton()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentIdentityRecordsState(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentInputReadyState(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentNavigationIconForNormal()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentRequestReviewState(Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentScrollButtons(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentStoryRing()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentTypingIndicator()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentWallpaper(Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->registerForResults()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->updateMessageRequestAcceptedState(Z)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/ConversationItemDecorations$UnreadState$None;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->(ZZ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->access$timestamp(Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)J PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->getHasWallpaper()Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setCurrentItems(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setFirstUnreadCount(I)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->setHasWallpaper(Z)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;->updateUnreadState(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$$ExternalSyntheticLambda0;->(J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2$1;->apply(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/ObservableSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->$r8$lambda$C1ukP4YSsuxMkwIfGNrqsHmBxh0(J)Lorg/thoughtcrime/securesms/recipients/RecipientId; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->(J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke$lambda$0(J)Lorg/thoughtcrime/securesms/recipients/RecipientId; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$conversationRecipient$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->$r8$lambda$NvFETYLxPBjE2XjrolSGmoCr9vc(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lj$/util/Optional; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply$lambda$0(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lj$/util/Optional; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lio/reactivex/rxjava3/core/SingleSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->invoke()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->(J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->getConversationRecipient()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->getGroupRecord()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda11;->call()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->(JJ)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->run()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda14;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda14;->call()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda19;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda19;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda7;->(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda7;->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$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->(II)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->getMentions()I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->getUnread()I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1;->apply(Lkotlin/Unit;)Ljava/lang/Integer; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->apply(I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$2;->apply(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$-gMXe-w-Xm5jHJapWlyQ6eOUlEE(JJ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$98QfcuQyzMi7mf2qZrmWDK7X98k(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; 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; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$SEmY6z8BVO3vpDRoIUBmm8tqjes(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$jYghkNuRsI_xLxRgZRxsCeMcFTc(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->(Landroid/content/Context;Z)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->access$getUnreadCount(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->access$getUnreadMentionsCount(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;J)I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getConversationThreadState$lambda$0(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getConversationThreadState(JI)Lio/reactivex/rxjava3/core/Single; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getMessageCounts(J)Lio/reactivex/rxjava3/core/Flowable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getReminder(Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lio/reactivex/rxjava3/core/Maybe; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getRequestReviewState$lambda$15(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getUnreadCount(J)I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getUnreadMentionsCount(J)I PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->markLastSeen$lambda$28(J)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->markLastSeen(J)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->setLastVisibleMessageTimestamp$lambda$5(JJ)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->setLastVisibleMessageTimestamp(JJ)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->startExpirationTimeout(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->(ZZZIZ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->(ZZZIZILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->copy$default(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;ZZZIZILjava/lang/Object;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->copy(ZZZIZ)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->getHasMentions()Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->getShowScrollButtons()Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->getUnreadCount()I PLorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;->toString()Ljava/lang/String; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->(Lorg/signal/paging/ObservablePagedData;Lorg/thoughtcrime/securesms/conversation/ConversationData;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->getItems()Lorg/signal/paging/ObservablePagedData; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;->getMeta()Lorg/thoughtcrime/securesms/conversation/ConversationData; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->(Landroid/app/Activity;Landroid/view/View;Lkotlin/jvm/functions/Function0;Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getActiveColorSet()Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$ColorSet; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getActiveToolbarColor(Z)I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getInactiveColorSet()Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$ColorSet; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationToolbarOnScrollHelper;->getInactiveToolbarColor(Z)I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->(Ljava/util/List;ZZZ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->(Ljava/util/List;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State;->getTypists()Ljava/util/List; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->(Lcom/bumptech/glide/RequestManager;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter;->getItemCount()I +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10;->accept(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$12;->apply(Lkotlin/Unit;Lj$/util/Optional;)Lj$/util/Optional; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->apply(Lj$/util/Optional;)Lio/reactivex/rxjava3/core/MaybeSource; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$14;->apply(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$15;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$16;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onComplete()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onNext(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onNext(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$1;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$2;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;)Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$3;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda0;->subscribe(Lio/reactivex/rxjava3/core/ObservableEmitter;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda1;->(Lorg/signal/paging/PagingController;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda2;->(Lorg/signal/paging/PagingController;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda3;->(Lorg/signal/paging/PagingController;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda4;->(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$$ExternalSyntheticLambda4;->cancel()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->$r8$lambda$-cDP_eKfgHXjbVxKWQM3akAxvQw(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lio/reactivex/rxjava3/core/ObservableEmitter;)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;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)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$4;->apply$lambda$4(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lio/reactivex/rxjava3/core/ObservableEmitter;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)Lio/reactivex/rxjava3/core/ObservableSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$5;->test(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)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$8;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$9;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2;->apply(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;Landroid/graphics/Rect;)Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; 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$getRequestReviewState$1;->apply(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)Lio/reactivex/rxjava3/core/SingleSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->()V 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$groupMemberServiceIds$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$2;->()V 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$storyRingState$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Lio/reactivex/rxjava3/core/ObservableSource; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getHasMessageRequestStateSubject$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lio/reactivex/rxjava3/subjects/BehaviorSubject; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getIdentityRecordsStore$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lorg/thoughtcrime/securesms/util/rx/RxStore; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$getRepository$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$get_conversationThreadState$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)Lio/reactivex/rxjava3/subjects/Subject; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->access$setRecipientSnapshot$p(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->canShowAsBubble(Landroid/content/Context;)Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getConversationThreadState()Lio/reactivex/rxjava3/core/Single; 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; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getInputReadyState()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getMessageRequestState()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getPagingController()Lorg/signal/paging/ProxyPagingController; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getRecipient()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getRecipientSnapshot()Lorg/thoughtcrime/securesms/recipients/Recipient; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getReminder()Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getRequestReviewState()Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getScheduledMessagesCount()Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getScrollButtonState()Lio/reactivex/rxjava3/core/Flowable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getSearchQuery()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getStoryRingState()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getThreadId()J +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getWallpaperSnapshot()Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->isPushAvailable()Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->markLastSeen()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->onChatBoundsChanged(Landroid/graphics/Rect;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->onCleared()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->setLastScrolled(J)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->setShowScrollButtonsForScrollPosition(ZZ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->updateIdentityRecordsInBackground()V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView$inflater$2;->(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->()V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->clear()V PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->setListener(Lorg/thoughtcrime/securesms/conversation/v2/DisabledInputView$Listener;)V +PLorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;->setWallpaperEnabled(Z)V +PLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->()V +PLorg/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 PLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->isGroup()Z PLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->isUnverified()Z PLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->isVerified()Z +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->getConversationRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->getGroupRecord()Lorg/thoughtcrime/securesms/database/model/GroupRecord; +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->getMessageRequestState()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isActiveGroup()Ljava/lang/Boolean; +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isAnnouncementGroup()Ljava/lang/Boolean; +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isClientExpired()Z +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isRequestingMember()Ljava/lang/Boolean; +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isUnauthorized()Z +PLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->shouldShowInviteToSignal()Z PLorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay;->()V PLorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay;->()V PLorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay;->setDrain(Lorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay$Drain;)V 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 @@ -38222,121 +36871,622 @@ 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/computed/FormattedDate;->()V +PLorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;->(ZZLjava/lang/String;)V +PLorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;->getValue()Ljava/lang/String; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2;->invoke()Lorg/thoughtcrime/securesms/recipients/Recipient; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->(Landroid/content/Context;JLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->(Landroid/content/Context;JLorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData;ZILorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->access$getThreadId$p(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;)J +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getKey(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getKey(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getSizeInternal()I +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getThreadRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; +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/ConversationDataSource;->loadThreadHeader()Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader; +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->size()I +PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->toMappingModel(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)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;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)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 PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->areItemsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->getChangePayload(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->areContentsTheSame(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->areContentsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->areItemsTheSame(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->areItemsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingTextOnly;->getChangePayload(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageBackedKey;->(J)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageBackedKey;->hashCode()I +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda0;->(Ljava/util/concurrent/Callable;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda1;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda2;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda2;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda3;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda3;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda4;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda4;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda5;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda5;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda6;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda6;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda7;->(Ljava/util/List;Landroid/app/Application;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$$ExternalSyntheticLambda7;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->(Ljava/util/Map;Ljava/util/Set;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/lang/String;)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getAttachments()Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getCalls()Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getHasBeenQuoted()Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getMentionsById()Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getPayments()Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getReactions()Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;->getTimeLog()Ljava/lang/String; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->(Ljava/lang/Object;J)V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getDuration()Ljava/lang/String; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getDurationNanos()J +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult;->getResult()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$Cs9l2XA1WNP95TiUSxohh7ra3Ww(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$FrUVeLhot38doVCglQFObvc5AaY(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$RMAc6YctMyIBPxCbXNgRTW89bsw(Ljava/util/List;Landroid/app/Application;)Lkotlin/Unit; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$VVeGNqSH8Ds974z_DCkG6lrE4Vk(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$f-lfvLq_IbuaQLneolXX3ub4kj4(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$tRT3GzOp1DPXuQw76v5coP2Wv1s(Ljava/util/List;)Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$xdS5DH5tLLZB1PgnkW3I8tIGiDw(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->$r8$lambda$y9zmNO5eO3RqgCXAGsDgImftxNM(Ljava/util/concurrent/Callable;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$1(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$10(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$11(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$15(Ljava/util/List;Landroid/app/Application;)Lkotlin/Unit; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$2(Ljava/util/List;)Ljava/util/Set; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$3(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->fetch$lambda$4(Ljava/util/List;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->submitTimed$lambda$23(Ljava/util/concurrent/Callable;)Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$TimedResult; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->submitTimed(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Future; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->updateModelsWithData(Ljava/util/List;Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;)Ljava/util/List; +PLorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher;->updateWithData(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/conversation/v2/data/MessageDataFetcher$ExtraMessageData;)Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;)V PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->areContentsTheSame(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->areContentsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->areItemsTheSame(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->areItemsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->getChangePayload(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;->getRecipientInfo()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo; +PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeaderKey;->()V +PLorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeaderKey;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZ)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->copy(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZZZ)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->equals(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getActiveV2Group()Z PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getHasCapacity()Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getOngoingCall()Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;->getRecipientId()Lorg/thoughtcrime/securesms/recipients/RecipientId; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$1;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$2;->apply(Lkotlin/Unit;Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$3;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$Companion;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$1;->test(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2;->apply(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallState;)Ljava/lang/Boolean; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->access$getStore$p(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;)Lorg/thoughtcrime/securesms/util/rx/RxStore; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->getHasOngoingGroupCallSnapshot()Z 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/ConversationGroupCallViewModel;->peekGroupCall()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->test(Lj$/util/Optional;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$3;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$4;->(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$duplicates$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$duplicates$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->test(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(JLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(JLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->onCleared()V +PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->updateGroupStateIfNeeded()V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->()V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;Landroid/graphics/drawable/Drawable;)V PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->getMask()Landroid/graphics/drawable/Drawable; -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1;->()V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->()V +PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->()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/ShrinkWrapLinearLayout;->onMeasure(II)V PLorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;->shrinkWrapWidthMeasureSpec(I)I +PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->addOnMeasureListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnMeasureListener;)V +PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->removeOnMeasureListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnMeasureListener;)V +PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->setOnDispatchTouchEventListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnDispatchTouchEventListener;)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;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +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$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;->getBodyTextColor(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;->getFooterWidth()I 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/conversation/v2/items/V2Payload;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2Payload; +PLorg/thoughtcrime/securesms/conversation/v2/items/V2Payload;->()V +PLorg/thoughtcrime/securesms/conversation/v2/items/V2Payload;->(Ljava/lang/String;I)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/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda1;->()V +PLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda1;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda2;->()V +PLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda2;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda3;->()V +PLorg/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore;->getIdentityRecords(Ljava/util/List;)Lorg/thoughtcrime/securesms/database/identity/IdentityRecordList; +PLorg/thoughtcrime/securesms/database/AttachmentTable;->getAttachmentsForMessages(Ljava/util/Collection;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/database/AttachmentTable;->hasStickerAttachments()Z +PLorg/thoughtcrime/securesms/database/AttachmentTable;->readAttachment(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; +PLorg/thoughtcrime/securesms/database/CallTable;->getCalls(Ljava/util/Collection;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda10;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda10;->run()V 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$$ExternalSyntheticLambda17;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda17;->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$$ExternalSyntheticLambda24;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda24;->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$$ExternalSyntheticLambda28;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda28;->run()V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda30;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda30;->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$6mdIgDDCV4XFVFnyxH8Vj4a6MqU(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)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$P-H8JPj8WgBa8EorlTkjTC0yG1E(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$XpAe1b_YlxfSEkV3hD_v20iDkHw(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$ZjxWKgbWA1SSTmnWoVneQana_Lk(Lorg/thoughtcrime/securesms/database/DatabaseObserver;J)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$oXFDlhvhHFY1OBIQHYp3Oanmq-k(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$wnm9BEANNc03FZmWKcqOLSgrT_U(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyVerboseConversationListeners$20(J)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerConversationObserver$1(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerMessageInsertObserver$11(JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerMessageUpdateObserver$10(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerScheduledMessageObserver$14(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerStoryObserver$13(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerVerboseConversationObserver$2(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V 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;->registerConversationObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMapped(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMessageInsertObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMessageUpdateObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerScheduledMessageObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerStoryObserver(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerVerboseConversationObserver(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 PLorg/thoughtcrime/securesms/database/DraftTable$Drafts;->getDraftOfType(Ljava/lang/String;)Lorg/thoughtcrime/securesms/database/DraftTable$Draft; PLorg/thoughtcrime/securesms/database/DraftTable;->clearDrafts(J)V +PLorg/thoughtcrime/securesms/database/GroupTable;->getGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;Z)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/GroupTable;->getPushGroupNamesContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/GroupTable;->getPushGroupsContainingMember(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/MentionTable;->getMentionsForMessages(Ljava/util/Collection;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/database/MentionTable;->readMentions(Landroid/database/Cursor;)Ljava/util/Map; +PLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->next()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/database/MessageTable$MmsReader$ReaderIterator;->next()Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/database/MessageTable$MmsReader;->buildSlideDeck(Ljava/util/List;)Lorg/thoughtcrime/securesms/mms/SlideDeck; +PLorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor;->(JLorg/thoughtcrime/securesms/recipients/RecipientId;)V +PLorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor;->hashCode()I PLorg/thoughtcrime/securesms/database/MessageTable$markExpireStarted$1;->(Ljava/util/Collection;)V PLorg/thoughtcrime/securesms/database/MessageTable$markExpireStarted$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/database/MessageTable$markExpireStarted$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)V +PLorg/thoughtcrime/securesms/database/MessageTable;->getConversation(JJJ)Landroid/database/Cursor; +PLorg/thoughtcrime/securesms/database/MessageTable;->getMessageCountForThread(J)I PLorg/thoughtcrime/securesms/database/MessageTable;->getMessagePositionOnOrAfterTimestamp(JJ)I PLorg/thoughtcrime/securesms/database/MessageTable;->getMessagesForNotificationState(Ljava/util/Collection;)Landroid/database/Cursor; PLorg/thoughtcrime/securesms/database/MessageTable;->getScheduledMessageCountForThread(J)I +PLorg/thoughtcrime/securesms/database/MessageTable;->getStoryViewState(J)Lorg/thoughtcrime/securesms/database/model/StoryViewState; +PLorg/thoughtcrime/securesms/database/MessageTable;->getStoryViewState(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/StoryViewState; +PLorg/thoughtcrime/securesms/database/MessageTable;->isQuoted(Ljava/util/Collection;)Ljava/util/Set; PLorg/thoughtcrime/securesms/database/MessageTable;->markExpireStarted(Ljava/util/Collection;)V PLorg/thoughtcrime/securesms/database/MessageTable;->setMessagesReadSince(JJ)Ljava/util/List; PLorg/thoughtcrime/securesms/database/MessageTable;->setReactionsSeen(JJ)V +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isBundleKeyExchange(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isDuplicateMessageType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isFailedMessageType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isGroupV1MigrationEvent(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingInsecureSmsFallbackType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingMessageType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isPendingSecureSmsFallbackType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isRateLimited(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isSecureType(J)Z +PLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isSmsExport(J)Z +PLorg/thoughtcrime/securesms/database/PaymentTable;->getPayments(Ljava/util/Collection;)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/ReactionTable;->getReactionsForMessages(Ljava/util/Collection;)Ljava/util/Map; PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda1;->cancel()V +PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;->onChanged()V +PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->(J)V +PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$conversation$1;->invoke(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V PLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->$r8$lambda$6u1bbd117Cl1h38MfeI7BgZPo1A(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V +PLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->conversation(J)Lio/reactivex/rxjava3/core/Flowable; PLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->databaseFlowable$lambda$1$lambda$0(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V +PLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda12;->(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +PLorg/thoughtcrime/securesms/database/SQLiteDatabase$$ExternalSyntheticLambda12;->run()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/database/SQLiteDatabase;->$r8$lambda$PFumX8gsMH0Yn0ZTdDId1_9oWEA(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +PLorg/thoughtcrime/securesms/database/SQLiteDatabase;->lambda$query$4(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +PLorg/thoughtcrime/securesms/database/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; +PLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->payments()Lorg/thoughtcrime/securesms/database/PaymentTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->reactions()Lorg/thoughtcrime/securesms/database/ReactionTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase$Companion;->stickers()Lorg/thoughtcrime/securesms/database/StickerTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase;->getPaymentTable()Lorg/thoughtcrime/securesms/database/PaymentTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase;->getReactionTable()Lorg/thoughtcrime/securesms/database/ReactionTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase;->getStickerTable()Lorg/thoughtcrime/securesms/database/StickerTable; +PLorg/thoughtcrime/securesms/database/SignalDatabase;->stickers()Lorg/thoughtcrime/securesms/database/StickerTable; +PLorg/thoughtcrime/securesms/database/StickerTable;->getAllStickerPacks(Ljava/lang/String;)Landroid/database/Cursor; +PLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->()V +PLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->(JZJI)V +PLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getLastScrolled()J +PLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getLastSeen()J +PLorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata;->getUnreadCount()I 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;->getConversationMetadata(J)Lorg/thoughtcrime/securesms/database/ThreadTable$ConversationMetadata; 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; PLorg/thoughtcrime/securesms/database/ThreadTable;->setReadSince(Ljava/util/Map;Z)Ljava/util/List; 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;->()V PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->equals(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isUnverified()Z +PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isUnverified(Ljava/util/Collection;)Z +PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isVerified()Z +PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->isVerified(Ljava/util/Collection;)Z +PLorg/thoughtcrime/securesms/database/model/DisplayRecord;->getToRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; +PLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isKeyExchange()Z +PLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isPending()Z +PLorg/thoughtcrime/securesms/database/model/DisplayRecord;->isViewed()Z +PLorg/thoughtcrime/securesms/database/model/IdentityRecord;->getVerifiedStatus()Lorg/thoughtcrime/securesms/database/IdentityTable$VerifiedStatus; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getDisplayBody(Landroid/content/Context;Lj$/util/function/Consumer;)Landroid/text/SpannableString; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getExpireStarted()J +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getFromDeviceId()I +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getIdentityKeyMismatches()Ljava/util/Set; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getNetworkFailures()Ljava/util/Set; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getNotifiedTimestamp()J +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getOriginalMessageId()Lorg/thoughtcrime/securesms/database/model/MessageId; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getReactions()Ljava/util/List; +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getReceiptTimestamp()J +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getRevisionNumber()I +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getServerTimestamp()J +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->getSubscriptionId()I +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->hashCode()I +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->isBundleKeyExchange()Z +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->isEditMessage()Z +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->isJumbomoji(Landroid/content/Context;)Z +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->isLegacyMessage()Z +PLorg/thoughtcrime/securesms/database/model/MessageRecord;->isUnidentified()Z +PLorg/thoughtcrime/securesms/database/model/MessageRecordExtensionsKt;->withAttachments(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/MessageRecord; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda1;->(Ljava/util/Map;)V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda2;->(Ljava/util/Map;)V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda3;->()V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda4;->()V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda5;->()V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda6;->()V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda7;->()V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda8;->(Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda8;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda9;->(Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord$$ExternalSyntheticLambda9;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->$r8$lambda$61cfVwuT9NopES3EvrpU58ByOrs(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->$r8$lambda$yFErtnyhgG1o4FUJh3c90u9IkrI(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getCall()Lorg/thoughtcrime/securesms/database/CallTable$Call; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getDisplayBody(Landroid/content/Context;)Landroid/text/SpannableString; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getLatestRevisionId()Lorg/thoughtcrime/securesms/database/model/MessageId; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getParentStoryId()Lorg/thoughtcrime/securesms/database/model/ParentStoryId; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getPayment()Lorg/thoughtcrime/securesms/payments/Payment; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->getStoryType()Lorg/thoughtcrime/securesms/database/model/StoryType; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->isRead()Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->lambda$withAttachments$0(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->lambda$withAttachments$1(Ljava/util/Set;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)Z +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateContacts(Ljava/util/List;Ljava/util/Map;)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateLinkPreviews(Ljava/util/List;Ljava/util/Map;)Ljava/util/List; +PLorg/thoughtcrime/securesms/database/model/MmsMessageRecord;->updateQuote(Lorg/thoughtcrime/securesms/database/model/Quote;Ljava/util/List;)Lorg/thoughtcrime/securesms/database/model/Quote; PLorg/thoughtcrime/securesms/database/model/ProfileAvatarFileDetails;->equals(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda1;->subscribe(Lio/reactivex/rxjava3/core/ObservableEmitter;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda2;->(Lio/reactivex/rxjava3/core/ObservableEmitter;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +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;->$r8$lambda$qlVsO3gJogFXwiR82wyUg4D6NdU(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lio/reactivex/rxjava3/core/ObservableEmitter;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->()V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getForRecipientId(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3$lambda$2(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3$refresh(Lio/reactivex/rxjava3/core/ObservableEmitter;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lio/reactivex/rxjava3/core/ObservableEmitter;)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/database/model/StoryViewState;->$values()[Lorg/thoughtcrime/securesms/database/model/StoryViewState; +PLorg/thoughtcrime/securesms/database/model/StoryViewState;->()V +PLorg/thoughtcrime/securesms/database/model/StoryViewState;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/database/model/StoryViewState;->values()[Lorg/thoughtcrime/securesms/database/model/StoryViewState; 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/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 +PLorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding; +PLorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;->getRoot()Lorg/thoughtcrime/securesms/components/InputPanel; +PLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->(Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;Landroidx/appcompat/widget/AppCompatImageView;Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar;Landroid/widget/TextView;Lcom/pnikosis/materialishprogress/ProgressWheel;Landroidx/appcompat/widget/AppCompatImageView;)V +PLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding; PLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->getRoot()Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar; +PLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->(Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Landroid/widget/FrameLayout;Lorg/thoughtcrime/securesms/avatar/view/AvatarView;Lorg/thoughtcrime/securesms/conversation/ConversationTitleView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/widget/LinearLayout;Lorg/thoughtcrime/securesms/components/FromTextView;Landroidx/appcompat/widget/AppCompatImageView;Landroid/widget/TextView;)V +PLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding; +PLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->getRoot()Lorg/thoughtcrime/securesms/conversation/ConversationTitleView; +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/dependencies/ApplicationDependencies;->getMessageNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; +PLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideMessageNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; 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/emoji/EmojiSource$maxEmojiLength$2;->invoke()Ljava/lang/Integer; +PLorg/thoughtcrime/securesms/emoji/EmojiSource$maxEmojiLength$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/emoji/EmojiSource;->getMaxEmojiLength()I PLorg/thoughtcrime/securesms/emoji/EmojiSourceKt;->access$maxOrZero(Ljava/util/List;)I PLorg/thoughtcrime/securesms/emoji/EmojiSourceKt;->maxOrZero(Ljava/util/List;)I +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration$onDraw$1;->(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->()V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;Lkotlin/jvm/functions/Function1;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$$ExternalSyntheticLambda0;->(Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->(II)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->compare(Ljava/lang/Integer;Ljava/lang/Integer;)I PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$RangeComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->(Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;I)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->attach(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController$Callback;I)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->findFirstVisibleItemPositions(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)[I +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->findLastVisibleItemPositions(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)[I +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->getPlaybackSetForMaximumDistance(Ljava/util/Set;[I[I)Ljava/util/Set; +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->onLayoutChange(Landroid/view/View;IIIIIIII)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackPolicy;->maxSimultaneousPlaybackInConversation()I +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->()V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->(Landroid/widget/FrameLayout;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onCreate(Landroidx/lifecycle/LifecycleOwner;)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;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onStop(Landroidx/lifecycle/LifecycleOwner;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->()V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->getExoPlayer()Landroidx/media3/exoplayer/ExoPlayer; +PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->setResizeMode(I)V +PLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->()V +PLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;->(Landroid/content/Context;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/jobmanager/Job$Parameters$Builder;->setPriority(I)Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters$Builder; +PLorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder;->putStringListAsArray(Ljava/lang/String;Ljava/util/List;)Lorg/thoughtcrime/securesms/jobmanager/JsonJobData$Builder; PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->()V PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->()V PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;)V 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/jobs/RetrieveProfileJob$Companion;->enqueue(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +PLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->forRecipients(Ljava/util/Set;)Ljava/util/List; +PLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->(Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->getFactoryKey()Ljava/lang/String; +PLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob;->serialize()[B +PLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->$values()[Lorg/thoughtcrime/securesms/keyboard/KeyboardPage; +PLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->()V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPage;->values()[Lorg/thoughtcrime/securesms/keyboard/KeyboardPage; +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;)V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel$$ExternalSyntheticLambda0;->onResult(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->$r8$lambda$XJkrNaIPPzC8wWYTIkWhYRIl3fM(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;Ljava/lang/Boolean;)V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->()V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->()V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->_init_$lambda$1(Lorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;Ljava/lang/Boolean;)V +PLorg/thoughtcrime/securesms/keyboard/KeyboardPagerViewModel;->switchToPage(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V +PLorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;->()V +PLorg/thoughtcrime/securesms/keyboard/emoji/search/EmojiSearchRepository;->(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/keyvalue/InternalValues;->useConversationItemV2Media()Z PLorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme;->values()[Lorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme; +PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageFontSize()I +PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getMessageNotificationsPrivacy()Lorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference; +PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getUniversalExpireTimer()I PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isEnterKeySends()Z PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isLinkPreviewsEnabled()Z +PLorg/thoughtcrime/securesms/keyvalue/WallpaperValues;->hasWallpaperSet()Z PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewRepository;->()V PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewRepository;->()V PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewState$Companion;->()V @@ -38367,13 +37517,66 @@ 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/megaphone/BasicMegaphoneView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)V +PLorg/thoughtcrime/securesms/megaphone/BasicMegaphoneView$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)V +PLorg/thoughtcrime/securesms/megaphone/BasicMegaphoneView;->(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/megaphone/BasicMegaphoneView;->init(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/megaphone/BasicMegaphoneView;->onAttachedToWindow()V +PLorg/thoughtcrime/securesms/megaphone/BasicMegaphoneView;->present(Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)V +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->canSnooze()Z +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getBody()Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getButtonText()Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getImageRes()I +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getOnVisibleListener()Lorg/thoughtcrime/securesms/megaphone/Megaphone$EventListener; +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getSecondaryButtonText()Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->getTitle()Lorg/thoughtcrime/securesms/megaphone/MegaphoneText; +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->hasButton()Z +PLorg/thoughtcrime/securesms/megaphone/Megaphone;->hasSecondaryButton()Z +PLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->hasText()Z +PLorg/thoughtcrime/securesms/megaphone/MegaphoneText;->resolve(Landroid/content/Context;)Ljava/lang/String; +PLorg/thoughtcrime/securesms/megaphone/MegaphoneViewBuilder;->buildBasicMegaphone(Landroid/content/Context;Lorg/thoughtcrime/securesms/megaphone/Megaphone;Lorg/thoughtcrime/securesms/megaphone/MegaphoneActionController;)Landroid/view/View; +PLorg/thoughtcrime/securesms/messagerequests/GroupInfo$Companion;->()V +PLorg/thoughtcrime/securesms/messagerequests/GroupInfo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->()V +PLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->(IILjava/lang/String;Z)V +PLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->(IILjava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/messagerequests/GroupInfo;->getDescription()Ljava/lang/String; +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->()V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/messagerequests/GroupInfo;Ljava/util/List;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;)V PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->component1()Lorg/thoughtcrime/securesms/recipients/Recipient; PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->component2()Lorg/thoughtcrime/securesms/messagerequests/GroupInfo; PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->component3()Ljava/util/List; PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo;->component4()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->()V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestRepository;->getRecipientInfo(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)Lorg/thoughtcrime/securesms/messagerequests/MessageRequestRecipientInfo; +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$Companion;->()V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->$values()[Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State; +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->()V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->()V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;Z)V +PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;ZILkotlin/jvm/internal/DefaultConstructorMarker;)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/messagerequests/MessageRequestState;->isAccepted()Z +PLorg/thoughtcrime/securesms/mms/AttachmentManager;->()V +PLorg/thoughtcrime/securesms/mms/AttachmentManager;->(Landroid/content/Context;Landroid/view/View;Lorg/thoughtcrime/securesms/mms/AttachmentManager$AttachmentListener;)V PLorg/thoughtcrime/securesms/mms/AttachmentManager;->isAttachmentPresent()Z +PLorg/thoughtcrime/securesms/mms/ImageSlide;->hasPlaceholder()Z +PLorg/thoughtcrime/securesms/mms/Slide;->asAttachment()Lorg/thoughtcrime/securesms/attachments/Attachment; +PLorg/thoughtcrime/securesms/mms/Slide;->getBody()Lj$/util/Optional; +PLorg/thoughtcrime/securesms/mms/Slide;->getCaption()Lj$/util/Optional; +PLorg/thoughtcrime/securesms/mms/Slide;->getFileSize()J +PLorg/thoughtcrime/securesms/mms/Slide;->getPlaceholderBlur()Lorg/thoughtcrime/securesms/blurhash/BlurHash; +PLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->()V +PLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/mms/SlideDeck;->getBody()Ljava/lang/String; +PLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->$values()[Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; +PLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->()V +PLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->(Ljava/lang/String;ILjava/lang/String;)V +PLorg/thoughtcrime/securesms/mms/SlideFactory$MediaType;->from(Ljava/lang/String;)Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->()V PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->process(Ljava/util/List;)V PLorg/thoughtcrime/securesms/notifications/NotificationCancellationHelper;->()V @@ -38388,19 +37591,35 @@ PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier$$ExternalSyn PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->$r8$lambda$0MHafWJB8CwezqWVbncoEq_a3Xg(Ljava/lang/Runnable;Ljava/lang/Throwable;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->$r8$lambda$dClU2s1olLC6PkCR84cT7C2dqfA(Lorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;Landroid/content/Context;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->$r8$lambda$mDf5wVelzwBtc0Vgo342P1gCo0c(Lorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->(Landroid/app/Application;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->clearVisibleThread()V +PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->getNotifier()Lorg/thoughtcrime/securesms/notifications/MessageNotifier; PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->lambda$runOnLimiter$11(Ljava/lang/Runnable;Ljava/lang/Throwable;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->lambda$updateNotification$3(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->lambda$updateNotification$4(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->runOnLimiter(Ljava/lang/Runnable;)V +PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->setVisibleThread(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)V PLorg/thoughtcrime/securesms/notifications/OptimizedMessageNotifier;->updateNotification(Landroid/content/Context;)V +PLorg/thoughtcrime/securesms/notifications/v2/CancelableExecutor;->()V +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->()V +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Companion;->forConversation(J)Lorg/thoughtcrime/securesms/notifications/v2/ConversationId; +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId$Creator;->()V +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->()V +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->(JLjava/lang/Long;)V PLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->getGroupStoryId()Ljava/lang/Long; PLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->getThreadId()J +PLorg/thoughtcrime/securesms/notifications/v2/ConversationId;->hashCode()I +PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->()V +PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->access$updateBadge(Lorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;Landroid/content/Context;I)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$Companion;->updateBadge(Landroid/content/Context;I)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier$updateNotification$7;->(Ljava/util/Set;)V +PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->()V +PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->(Landroid/app/Application;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->clearReminderInternal(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->clearVisibleThread()V +PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->setVisibleThread(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->updateNotification(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifier;->updateNotification(Landroid/content/Context;Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;Lorg/thoughtcrime/securesms/util/BubbleUtil$BubbleState;)V PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifierKt;->access$getDisplayedNotificationIds(Landroid/app/NotificationManager;)Ljava/lang/Object; @@ -38408,6 +37627,15 @@ PLorg/thoughtcrime/securesms/notifications/v2/DefaultMessageNotifierKt;->getDisp PLorg/thoughtcrime/securesms/notifications/v2/NotificationPendingIntentHelper;->()V PLorg/thoughtcrime/securesms/notifications/v2/NotificationPendingIntentHelper;->()V PLorg/thoughtcrime/securesms/notifications/v2/NotificationPendingIntentHelper;->getBroadcast(Landroid/content/Context;ILandroid/content/Intent;I)Landroid/app/PendingIntent; +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->()V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$Companion;->getEMPTY()Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$messageCount$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationIds$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState$notificationItems$2;->(Lorg/thoughtcrime/securesms/notifications/v2/NotificationState;)V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->()V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->(Ljava/util/List;Ljava/util/List;Ljava/util/List;)V +PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->access$getEMPTY$cp()Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->getConversations()Ljava/util/List; PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->getMuteFilteredMessages()Ljava/util/List; PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->getProfileFilteredMessages()Ljava/util/List; @@ -38417,18 +37645,14 @@ PLorg/thoughtcrime/securesms/notifications/v2/NotificationState;->toString()Ljav PLorg/thoughtcrime/securesms/notifications/v2/NotificationStateProvider;->()V PLorg/thoughtcrime/securesms/notifications/v2/NotificationStateProvider;->()V 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/phonenumbers/PhoneNumberFormatter$PhoneNumber;->-$$Nest$fgetcountryCode(Lorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter$PhoneNumber;)I -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter$PhoneNumber;->(Ljava/lang/String;ILjava/lang/String;)V -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter$PhoneNumber;->getCountryCode()I -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->()V -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->(Ljava/lang/String;)V -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->get(Landroid/content/Context;)Lorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter; -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->parseAreaCode(Ljava/lang/String;I)Ljava/lang/String; -PLorg/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter;->prettyPrint(Ljava/lang/String;)Ljava/lang/String; +PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->(Ljava/lang/String;)V PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->isDisplayContact()Z +PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->toString()Ljava/lang/String; +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$$ExternalSyntheticLambda3;->onChanged(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda4;->contentsMatch(Ljava/lang/Object;Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda7;->run()V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda9;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/Recipient;)V @@ -38441,19 +37665,33 @@ 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;->observable()Lio/reactivex/rxjava3/core/Observable; +PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->observeForever(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->removeForeverObserver(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/Recipient;->getCombinedAboutAndEmoji()Ljava/lang/String; PLorg/thoughtcrime/securesms/recipients/Recipient;->getContactUri()Landroid/net/Uri; +PLorg/thoughtcrime/securesms/recipients/Recipient;->getExpiresInSeconds()I PLorg/thoughtcrime/securesms/recipients/Recipient;->getNotificationChannel()Ljava/lang/String; PLorg/thoughtcrime/securesms/recipients/Recipient;->getPhoneNumberSharing()Lorg/thoughtcrime/securesms/database/RecipientTable$PhoneNumberSharingState; +PLorg/thoughtcrime/securesms/recipients/Recipient;->getSmallFallbackContactPhotoDrawable(Landroid/content/Context;ZLorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;I)Landroid/graphics/drawable/Drawable; PLorg/thoughtcrime/securesms/recipients/Recipient;->isActiveGroup()Z +PLorg/thoughtcrime/securesms/recipients/Recipient;->isPushV1Group()Z +PLorg/thoughtcrime/securesms/recipients/Recipient;->isPushV2Group()Z +PLorg/thoughtcrime/securesms/recipients/Recipient;->isSystemContact()Z +PLorg/thoughtcrime/securesms/recipients/Recipient;->observable(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/recipients/Recipient;->shouldShowE164()Z +PLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isLegacyProfileSharingAccepted(Lorg/thoughtcrime/securesms/recipients/Recipient;)Z +PLorg/thoughtcrime/securesms/recipients/RecipientUtil;->isRecipientHidden(J)Z PLorg/thoughtcrime/securesms/service/ExpiringMessageManager$$ExternalSyntheticLambda0;->()V PLorg/thoughtcrime/securesms/service/ExpiringMessageManager;->scheduleDeletion(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository;Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository$$ExternalSyntheticLambda0;->run()V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->$r8$lambda$WI32balUk_XG4AC9j0YR1mfsJE0(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository;Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->()V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->getStickerFeatureAvailability(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->getStickerFeatureAvailabilitySync()Ljava/lang/Boolean; +PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->lambda$getStickerFeatureAvailability$2(Lorg/thoughtcrime/securesms/stickers/StickerSearchRepository$Callback;)V PLorg/thoughtcrime/securesms/stickers/StickerSearchRepository;->searchByEmoji(Ljava/lang/String;)Lio/reactivex/rxjava3/core/Single; -PLorg/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment$$ExternalSyntheticLambda1;->getValue(Lcom/airbnb/lottie/value/LottieFrameInfo;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment;->$r8$lambda$vljyddRZJoI08m5GmCfix0xaN1o(ILcom/airbnb/lottie/value/LottieFrameInfo;)Ljava/lang/Integer; -PLorg/thoughtcrime/securesms/stories/tabs/ConversationListTabsFragment;->onViewCreated$lambda$1(ILcom/airbnb/lottie/value/LottieFrameInfo;)Ljava/lang/Integer; PLorg/thoughtcrime/securesms/stories/tabs/ConversationListTabsViewModel;->onCleared()V PLorg/thoughtcrime/securesms/util/AppForegroundObserver;->removeListener(Lorg/thoughtcrime/securesms/util/AppForegroundObserver$Listener;)V PLorg/thoughtcrime/securesms/util/BubbleUtil$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/lang/String;Ljava/lang/String;)Landroid/app/NotificationChannel; @@ -38464,13 +37702,16 @@ PLorg/thoughtcrime/securesms/util/BubbleUtil$BubbleState;->$values()[Lorg/though PLorg/thoughtcrime/securesms/util/BubbleUtil$BubbleState;->()V PLorg/thoughtcrime/securesms/util/BubbleUtil$BubbleState;->(Ljava/lang/String;I)V PLorg/thoughtcrime/securesms/util/BubbleUtil;->()V -PLorg/thoughtcrime/securesms/util/CenteredImageSpan;->(Landroid/graphics/drawable/Drawable;)V -PLorg/thoughtcrime/securesms/util/CenteredImageSpan;->draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V -PLorg/thoughtcrime/securesms/util/CenteredImageSpan;->getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I +PLorg/thoughtcrime/securesms/util/CharacterCalculator;->()V PLorg/thoughtcrime/securesms/util/ConversationUtil;->()V PLorg/thoughtcrime/securesms/util/ConversationUtil;->getChannelId(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Ljava/lang/String; PLorg/thoughtcrime/securesms/util/ConversationUtil;->getShortcutId(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/lang/String; PLorg/thoughtcrime/securesms/util/ConversationUtil;->refreshRecipientShortcuts()V +PLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/DateUtils$sameDayDateFormat$2;->invoke()Ljava/text/SimpleDateFormat; +PLorg/thoughtcrime/securesms/util/DateUtils;->getConversationDateHeaderString(Landroid/content/Context;Ljava/util/Locale;J)Ljava/lang/String; +PLorg/thoughtcrime/securesms/util/DateUtils;->getDatelessRelativeTimeSpanFormattedDate(Landroid/content/Context;Ljava/util/Locale;J)Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate; +PLorg/thoughtcrime/securesms/util/DateUtils;->isSameExtendedRelativeTimestamp(JJ)Z PLorg/thoughtcrime/securesms/util/Debouncer;->clear()V PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate$lazyDefault$2;->(Lkotlin/jvm/functions/Function0;)V PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate$lazyDefault$2;->invoke()Ljava/lang/Object; @@ -38478,21 +37719,47 @@ PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate;->(Landr PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate;->getLazyDefault()Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/DefaultSavedStateHandleDelegate;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->postValue(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/util/DefaultValueLiveData;->setValue(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/util/FeatureFlags;->gifSearchAvailable()Z +PLorg/thoughtcrime/securesms/util/FullscreenHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowManager$LayoutParams;I)V +PLorg/thoughtcrime/securesms/util/FullscreenHelper;->(Landroid/app/Activity;)V +PLorg/thoughtcrime/securesms/util/FullscreenHelper;->(Landroid/app/Activity;Z)V +PLorg/thoughtcrime/securesms/util/FullscreenHelper;->showSystemUI()V +PLorg/thoughtcrime/securesms/util/FullscreenHelper;->showSystemUI(Landroid/view/Window;)V +PLorg/thoughtcrime/securesms/util/JsonUtils;->getMapper()Lcom/fasterxml/jackson/databind/ObjectMapper; PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/util/LeakyBucketLimiter;)V PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->$r8$lambda$1L8FIPWGmHakh7u9Krsm8K4DSjQ(Lorg/thoughtcrime/securesms/util/LeakyBucketLimiter;)V +PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->()V +PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->(IJLandroid/os/Handler;)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;->$r8$lambda$T0JnL_tDtAWK4RNMpbrK8xUunio(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;IIIILandroid/animation/ValueAnimator;)V +PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->(Landroid/app/Activity;Ljava/util/List;Ljava/util/List;Landroidx/lifecycle/LifecycleOwner;ILkotlin/jvm/internal/DefaultConstructorMarker;)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/MediaUtil;->isInstantVideoSupported(Lorg/thoughtcrime/securesms/mms/Slide;)Z +PLorg/thoughtcrime/securesms/util/MessageRecordUtil;->hasLocation(Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +PLorg/thoughtcrime/securesms/util/NoCrossfadeChangeDefaultAnimator;->()V 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/ProjectionList;->close()V PLorg/thoughtcrime/securesms/util/ProjectionList;->size()I +PLorg/thoughtcrime/securesms/util/PushCharacterCalculator$1;->()V +PLorg/thoughtcrime/securesms/util/PushCharacterCalculator;->()V +PLorg/thoughtcrime/securesms/util/PushCharacterCalculator;->()V 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; @@ -38503,17 +37770,38 @@ PLorg/thoughtcrime/securesms/util/SavedStateViewModelFactory;->(Lkotlin/jv 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;->onDataLoaded()V +PLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onDataPostedToMain()V +PLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onMetadataLoadStarted()V +PLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onMetadataLoaded()V PLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onRenderFinished()V -PLorg/thoughtcrime/securesms/util/SpanUtil;->()V -PLorg/thoughtcrime/securesms/util/SpanUtil;->buildCenteredImageSpan(Landroid/graphics/drawable/Drawable;)Ljava/lang/CharSequence; -PLorg/thoughtcrime/securesms/util/SpanUtil;->space(ILorg/signal/core/util/DimensionUnit;)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$MediaKeyboardMode;->$values()[Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; +PLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->()V +PLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->(Ljava/lang/String;I)V +PLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->valueOf(Ljava/lang/String;)Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; +PLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->values()[Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; +PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMediaKeyboardMode(Landroid/content/Context;)Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; +PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getMessageBodyTextSize(Landroid/content/Context;)I +PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getNotificationPrivacy(Landroid/content/Context;)Lorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference; +PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->hasSeenStickerIntroTooltip(Landroid/content/Context;)Z PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isEnterSendsEnabled(Landroid/content/Context;)Z +PLorg/thoughtcrime/securesms/util/ThemeUtil;->getAttribute(Landroid/content/Context;ILjava/lang/String;)Ljava/lang/String; +PLorg/thoughtcrime/securesms/util/ThemeUtil;->getThemedBoolean(Landroid/content/Context;I)Z +PLorg/thoughtcrime/securesms/util/ThemeUtil;->isDarkTheme(Landroid/content/Context;)Z PLorg/thoughtcrime/securesms/util/Util;->clamp(FFF)F +PLorg/thoughtcrime/securesms/util/Util;->hashCode([Ljava/lang/Object;)I PLorg/thoughtcrime/securesms/util/Util;->isEmpty(Ljava/util/Collection;)Z +PLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->getVisible(Landroid/view/View;)Z +PLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->padding$default(Landroid/view/View;IIIIILjava/lang/Object;)V +PLorg/thoughtcrime/securesms/util/ViewExtensionsKt;->padding(Landroid/view/View;IIII)V +PLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion$factoryProducer$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/ViewModelFactory$Companion$factoryProducer$1;->invoke()Lorg/thoughtcrime/securesms/util/ViewModelFactory; +PLorg/thoughtcrime/securesms/util/ViewModelFactory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +PLorg/thoughtcrime/securesms/util/ViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; 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; PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$2;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; @@ -38524,12 +37812,45 @@ PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inline PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$4;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$1;->invoke()Landroidx/savedstate/SavedStateRegistryOwner; PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$1;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$4;->invoke()Landroidx/fragment/app/Fragment; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$4;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$5;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$5;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$6;->invoke()Landroidx/lifecycle/ViewModelStore; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$6;->invoke()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$7;->invoke()Landroidx/lifecycle/viewmodel/CreationExtras; +PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$viewModel$$inlined$viewModels$default$7;->invoke()Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/ViewUtil;->animateOut(Landroid/view/View;Landroid/view/animation/Animation;I)Lorg/signal/core/util/concurrent/ListenableFuture; PLorg/thoughtcrime/securesms/util/ViewUtil;->fadeOut(Landroid/view/View;I)Lorg/signal/core/util/concurrent/ListenableFuture; PLorg/thoughtcrime/securesms/util/ViewUtil;->fadeOut(Landroid/view/View;II)Lorg/signal/core/util/concurrent/ListenableFuture; PLorg/thoughtcrime/securesms/util/ViewUtil;->getAlphaAnimation(FFI)Landroid/view/animation/Animation; +PLorg/thoughtcrime/securesms/util/ViewUtil;->getLeftMargin(Landroid/view/View;)I +PLorg/thoughtcrime/securesms/util/ViewUtil;->getRightMargin(Landroid/view/View;)I +PLorg/thoughtcrime/securesms/util/ViewUtil;->getTopMargin(Landroid/view/View;)I +PLorg/thoughtcrime/securesms/util/ViewUtil;->isRtl(Landroid/view/View;)Z +PLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingBottom(Landroid/view/View;I)V +PLorg/thoughtcrime/securesms/util/ViewUtil;->setPaddingTop(Landroid/view/View;I)V +PLorg/thoughtcrime/securesms/util/ViewUtil;->setTopMargin(Landroid/view/View;I)V +PLorg/thoughtcrime/securesms/util/ViewUtil;->setVisibilityIfNonNull(Landroid/view/View;I)V +PLorg/thoughtcrime/securesms/util/ViewUtil;->updateLayoutParamsIfNonNull(Landroid/view/View;II)V +PLorg/thoughtcrime/securesms/util/WindowUtil;->setLightNavigationBar(Landroid/view/Window;)V +PLorg/thoughtcrime/securesms/util/WindowUtil;->setLightNavigationBarFromTheme(Landroid/app/Activity;)V +PLorg/thoughtcrime/securesms/util/WindowUtil;->setLightStatusBar(Landroid/view/Window;)V +PLorg/thoughtcrime/securesms/util/WindowUtil;->setLightStatusBarFromTheme(Landroid/app/Activity;)V +PLorg/thoughtcrime/securesms/util/WindowUtil;->setSystemUiFlags(Landroid/view/Window;I)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->getItemTypes()Ljava/util/Map; +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onAttachedToRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;ILjava/util/List;)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;I)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onBindViewHolder(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;ILjava/util/List;)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Landroidx/recyclerview/widget/RecyclerView$ViewHolder; +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onCreateViewHolder(Landroid/view/ViewGroup;I)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewAttachedToWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewAttachedToWindow(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;)V 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/MappingAdapter;->registerFactory(Ljava/lang/Class;Lj$/util/function/Function;I)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 @@ -38537,7 +37858,10 @@ PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areItems 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/adapter/mapping/PagingMappingAdapter;->getItem(I)Ljava/lang/Object; 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 PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->$r8$lambda$axI96jKiGgASw-5DyS1pXfSexxk(Lorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;Ljava/lang/Runnable;)V @@ -38545,7 +37869,24 @@ 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/NullableStub;->isResolvable()Z PLorg/thoughtcrime/securesms/util/views/Stub;->getVisibility()I PLorg/thoughtcrime/securesms/util/views/Stub;->isVisible()Z +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda0;->(Lrxdogtag2/DogTagMaybeObserver;)V +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda1;->(Lrxdogtag2/DogTagMaybeObserver;Lio/reactivex/rxjava3/disposables/Disposable;)V +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda1;->run()V +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda4;->(Lrxdogtag2/DogTagMaybeObserver;)V +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda5;->(Lio/reactivex/rxjava3/core/MaybeObserver;)V +PLrxdogtag2/DogTagMaybeObserver$$ExternalSyntheticLambda5;->run()V +PLrxdogtag2/DogTagMaybeObserver;->$r8$lambda$oZbZwTXdH3PbkXhPwGJJZ5hucwc(Lrxdogtag2/DogTagMaybeObserver;Lio/reactivex/rxjava3/disposables/Disposable;)V +PLrxdogtag2/DogTagMaybeObserver;->(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/MaybeObserver;)V +PLrxdogtag2/DogTagMaybeObserver;->lambda$onSubscribe$1(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLrxdogtag2/DogTagMaybeObserver;->onComplete()V +PLrxdogtag2/DogTagMaybeObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V +PLrxdogtag2/ObserverHandler$-CC;->$default$handle(Lrxdogtag2/ObserverHandler;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; +PLrxdogtag2/RxDogTag$$ExternalSyntheticLambda3;->apply(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +PLrxdogtag2/RxDogTag$Configuration$1;->handle(Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; +PLrxdogtag2/RxDogTag;->$r8$lambda$G5J9svI7_WWihw7QCY8ugVE_Jmo(Lrxdogtag2/RxDogTag$Configuration;Lio/reactivex/rxjava3/core/Maybe;Lio/reactivex/rxjava3/core/MaybeObserver;)Lio/reactivex/rxjava3/core/MaybeObserver; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index d66a15c550..e5c604ee43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -216,7 +216,7 @@ private void onCreateUnlock() { .addNonBlocking(this::initializeCleanup) .addNonBlocking(this::initializeGlideCodecs) .addNonBlocking(StorageSyncHelper::scheduleRoutineSync) - .addNonBlocking(() -> ApplicationDependencies.getJobManager().beginJobLoop()) + .addNonBlocking(this::beginJobLoop) .addNonBlocking(EmojiSource::refresh) .addNonBlocking(() -> ApplicationDependencies.getGiphyMp4Cache().onAppStart(this)) .addNonBlocking(this::ensureProfileUploaded) @@ -599,6 +599,11 @@ private void executePendingContactSync() { } } + @VisibleForTesting + protected void beginJobLoop() { + ApplicationDependencies.getJobManager().beginJobLoop(); + } + @WorkerThread private void initializeBlobProvider() { BlobProvider.getInstance().initialize(this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index c9aaf77766..4a15618ab8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -890,11 +890,11 @@ private void smoothScrollChipsToEnd() { return ContactSearchConfiguration.build(builder -> { builder.setQuery(contactSearchState.getQuery()); - if (newConversationCallback != null) { + if (newConversationCallback != null && !hasQuery) { builder.arbitrary(ContactSelectionListAdapter.ArbitraryRepository.ArbitraryRow.NEW_GROUP.getCode()); } - if (findByCallback != null) { + if (findByCallback != null && !hasQuery) { builder.arbitrary(ContactSelectionListAdapter.ArbitraryRepository.ArbitraryRow.FIND_BY_USERNAME.getCode()); builder.arbitrary(ContactSelectionListAdapter.ArbitraryRepository.ArbitraryRow.FIND_BY_PHONE_NUMBER.getCode()); } @@ -913,12 +913,14 @@ private void smoothScrollChipsToEnd() { )); } + boolean hideHeader = newCallCallback != null || (newConversationCallback != null && !hasQuery); builder.addSection(new ContactSearchConfiguration.Section.Individuals( includeSelf, transportType, - newCallCallback == null && findByCallback == null, + !hideHeader, null, - !hideLetterHeaders() + !hideLetterHeaders(), + newConversationCallback != null ? ContactSearchSortOrder.RECENCY : ContactSearchSortOrder.NATURAL )); } @@ -944,7 +946,7 @@ private void smoothScrollChipsToEnd() { builder.username(newRowMode); } - if (newCallCallback != null || newConversationCallback != null) { + if ((newCallCallback != null || newConversationCallback != null) && !hasQuery) { addMoreSection(builder); builder.withEmptyState(emptyBuilder -> { emptyBuilder.addSection(ContactSearchConfiguration.Section.Empty.INSTANCE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java index ba214acbc6..ca8850efdb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java @@ -2,6 +2,7 @@ import android.annotation.SuppressLint; import android.content.Context; +import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; @@ -49,6 +50,8 @@ public class DeviceActivity extends PassphraseRequiredActivity private static final String TAG = Log.tag(DeviceActivity.class); + private static final String EXTRA_DIRECT_TO_SCANNER = "add"; + private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); private final DynamicLanguage dynamicLanguage = new DynamicLanguage(); @@ -57,6 +60,13 @@ public class DeviceActivity extends PassphraseRequiredActivity private DeviceLinkFragment deviceLinkFragment; private MenuItem cameraSwitchItem = null; + + public static Intent getIntentForScanner(Context context) { + Intent intent = new Intent(context, DeviceActivity.class); + intent.putExtra(EXTRA_DIRECT_TO_SCANNER, true); + return intent; + } + @Override public void onPreCreate() { dynamicTheme.onCreate(this); @@ -80,7 +90,7 @@ public void onCreate(Bundle bundle, boolean ready) { this.deviceListFragment.setAddDeviceButtonListener(this); this.deviceAddFragment.setScanListener(this); - if (getIntent().getBooleanExtra("add", false)) { + if (getIntent().getBooleanExtra(EXTRA_DIRECT_TO_SCANNER, false)) { initFragment(R.id.fragment_container, deviceAddFragment, dynamicLanguage.getCurrentLocale()); } else { initFragment(R.id.fragment_container, deviceListFragment, dynamicLanguage.getCurrentLocale()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceProvisioningActivity.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceProvisioningActivity.java index 02ae868dd5..d48e2d140f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/DeviceProvisioningActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceProvisioningActivity.java @@ -26,9 +26,7 @@ protected void onCreate(Bundle bundle, boolean ready) { .setTitle(getString(R.string.DeviceProvisioningActivity_link_a_signal_device)) .setMessage(getString(R.string.DeviceProvisioningActivity_it_looks_like_youre_trying_to_link_a_signal_device_using_a_3rd_party_scanner)) .setPositiveButton(R.string.DeviceProvisioningActivity_continue, (dialog1, which) -> { - Intent intent = new Intent(DeviceProvisioningActivity.this, DeviceActivity.class); - intent.putExtra("add", true); - startActivity(intent); + startActivity(DeviceActivity.getIntentForScanner(this)); finish(); }) .setNegativeButton(android.R.string.cancel, (dialog12, which) -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index fe02026843..c51384735b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.recipients.RecipientRepository; import org.thoughtcrime.securesms.recipients.ui.findby.FindByActivity; import org.thoughtcrime.securesms.recipients.ui.findby.FindByMode; import org.thoughtcrime.securesms.util.CommunicationActions; @@ -120,6 +121,8 @@ public void onCreate(Bundle bundle, boolean ready) { @Override public void onBeforeContactSelected(boolean isFromUnknownSearchKey, @NonNull Optional recipientId, String number, @NonNull Consumer callback) { + boolean smsSupported = false + if (recipientId.isPresent()) { launch(Recipient.resolved(recipientId.get())); } else { @@ -130,33 +133,19 @@ public void onBeforeContactSelected(boolean isFromUnknownSearchKey, @NonNull Opt AlertDialog progress = SimpleProgressDialog.show(this); - SimpleTask.run(getLifecycle(), () -> { - Recipient resolved = Recipient.external(this, number); - - if (!resolved.isRegistered() || !resolved.hasServiceId()) { - Log.i(TAG, "[onContactSelected] Not registered or no UUID. Doing a directory refresh."); - try { - ContactDiscovery.refresh(this, resolved, false, TimeUnit.SECONDS.toMillis(10)); - resolved = Recipient.resolved(resolved.getId()); - } catch (IOException e) { - Log.w(TAG, "[onContactSelected] Failed to refresh directory for new contact."); - return null; - } - } - - return resolved; - }, resolved -> { + SimpleTask.run(getLifecycle(), () -> RecipientRepository.lookupNewE164(this, number), result -> { progress.dismiss(); - if (resolved != null) { - if (resolved.isRegistered() && resolved.hasServiceId()) { + if (result instanceof RecipientRepository.LookupResult.Success) { + Recipient resolved = Recipient.resolved(((RecipientRepository.LookupResult.Success) result).getRecipientId()); + if (smsSupported || resolved.isRegistered() && resolved.hasServiceId()) { launch(resolved); - } else { - new MaterialAlertDialogBuilder(this) - .setMessage(getString(R.string.NewConversationActivity__s_is_not_registered_with_signal, resolved.getDisplayName(this))) - .setPositiveButton(android.R.string.ok, null) - .show(); } + } else if (result instanceof RecipientRepository.LookupResult.NotFound || result instanceof RecipientRepository.LookupResult.InvalidEntry) { + new MaterialAlertDialogBuilder(this) + .setMessage(getString(R.string.NewConversationActivity__s_is_not_a_signal_user, number)) + .setPositiveButton(android.R.string.ok, null) + .show(); } else { new MaterialAlertDialogBuilder(this) .setMessage(R.string.NetworkFailure__network_error_check_your_connection_and_try_again) @@ -164,6 +153,8 @@ public void onBeforeContactSelected(boolean isFromUnknownSearchKey, @NonNull Opt .show(); } }); + } else if (smsSupported) { + launch(Recipient.external(this, number)); } } 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 fa1570a529..1fb11a06e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt @@ -22,6 +22,9 @@ class DatabaseAttachment : Attachment { @JvmField val hasData: Boolean + @JvmField + val dataHash: String? + private val hasThumbnail: Boolean val displayOrder: Int @@ -53,7 +56,8 @@ class DatabaseAttachment : Attachment { audioHash: AudioHash?, transformProperties: TransformProperties?, displayOrder: Int, - uploadTimestamp: Long + uploadTimestamp: Long, + dataHash: String? ) : super( contentType = contentType!!, transferState = transferProgress, @@ -81,6 +85,7 @@ class DatabaseAttachment : Attachment { this.attachmentId = attachmentId this.mmsId = mmsId this.hasData = hasData + this.dataHash = dataHash this.hasThumbnail = hasThumbnail this.displayOrder = displayOrder } @@ -88,6 +93,7 @@ class DatabaseAttachment : Attachment { constructor(parcel: Parcel) : super(parcel) { attachmentId = ParcelCompat.readParcelable(parcel, AttachmentId::class.java.classLoader, AttachmentId::class.java)!! hasData = ParcelUtil.readBoolean(parcel) + dataHash = parcel.readString() hasThumbnail = ParcelUtil.readBoolean(parcel) mmsId = parcel.readLong() displayOrder = parcel.readInt() @@ -97,6 +103,7 @@ class DatabaseAttachment : Attachment { super.writeToParcel(dest, flags) dest.writeParcelable(attachmentId, 0) ParcelUtil.writeBoolean(dest, hasData) + dest.writeString(dataHash) ParcelUtil.writeBoolean(dest, hasThumbnail) dest.writeLong(mmsId) dest.writeInt(displayOrder) 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 4416414bac..506058880e 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 @@ -5,10 +5,16 @@ package org.thoughtcrime.securesms.backup.v2 +import org.signal.core.util.Base64 import org.signal.core.util.EventTimer import org.signal.core.util.logging.Log import org.signal.core.util.withinTransaction +import org.signal.libsignal.messagebackup.MessageBackup +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.DatabaseAttachment import org.thoughtcrime.securesms.backup.v2.database.ChatItemImportInserter import org.thoughtcrime.securesms.backup.v2.database.clearAllDataForBackupRestore import org.thoughtcrime.securesms.backup.v2.processor.AccountDataProcessor @@ -16,6 +22,7 @@ import org.thoughtcrime.securesms.backup.v2.processor.CallLogBackupProcessor import org.thoughtcrime.securesms.backup.v2.processor.ChatBackupProcessor import org.thoughtcrime.securesms.backup.v2.processor.ChatItemBackupProcessor import org.thoughtcrime.securesms.backup.v2.processor.RecipientBackupProcessor +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.stream.BackupExportWriter import org.thoughtcrime.securesms.backup.v2.stream.EncryptedBackupReader import org.thoughtcrime.securesms.backup.v2.stream.EncryptedBackupWriter @@ -23,12 +30,22 @@ import org.thoughtcrime.securesms.backup.v2.stream.PlainTextBackupReader import org.thoughtcrime.securesms.backup.v2.stream.PlainTextBackupWriter import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.groups.GroupId +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.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.backup.BackupKey +import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.ServiceId.PNI +import org.whispersystems.signalservice.internal.crypto.PaddingInputStream import java.io.ByteArrayOutputStream import java.io.InputStream import kotlin.time.Duration.Companion.milliseconds @@ -36,6 +53,7 @@ import kotlin.time.Duration.Companion.milliseconds object BackupRepository { private val TAG = Log.tag(BackupRepository::class.java) + private const val VERSION = 1L fun export(plaintext: Boolean = false): ByteArray { val eventTimer = EventTimer() @@ -52,7 +70,15 @@ object BackupRepository { ) } + val exportState = ExportState() + writer.use { + writer.write( + BackupInfo( + version = VERSION, + backupTimeMs = System.currentTimeMillis() + ) + ) // Note: Without a transaction, we may export inconsistent state. But because we have a transaction, // writes from other threads are blocked. This is something to think more about. SignalDatabase.rawDatabase.withinTransaction { @@ -61,12 +87,12 @@ object BackupRepository { eventTimer.emit("account") } - RecipientBackupProcessor.export { + RecipientBackupProcessor.export(exportState) { writer.write(it) eventTimer.emit("recipient") } - ChatBackupProcessor.export { frame -> + ChatBackupProcessor.export(exportState) { frame -> writer.write(frame) eventTimer.emit("thread") } @@ -76,7 +102,7 @@ object BackupRepository { eventTimer.emit("call") } - ChatItemBackupProcessor.export { frame -> + ChatItemBackupProcessor.export(exportState) { frame -> writer.write(frame) eventTimer.emit("message") } @@ -88,6 +114,13 @@ object BackupRepository { return outputStream.toByteArray() } + fun validate(length: Long, inputStreamFactory: () -> InputStream, selfData: SelfData): ValidationResult { + val masterKey = SignalStore.svr().getOrCreateMasterKey() + val key = MessageBackupKey(masterKey.serialize(), Aci.parseFromBinary(selfData.aci.toByteArray())) + + return MessageBackup.validate(key, inputStreamFactory, length) + } + fun import(length: Long, inputStreamFactory: () -> InputStream, selfData: SelfData, plaintext: Boolean = false) { val eventTimer = EventTimer() @@ -102,6 +135,15 @@ object BackupRepository { ) } + val header = frameReader.getHeader() + if (header == null) { + Log.e(TAG, "Backup is missing header!") + return + } else if (header.version > VERSION) { + Log.e(TAG, "Backup version is newer than we understand: ${header.version}") + return + } + // Note: Without a transaction, bad imports could lead to lost data. But because we have a transaction, // writes from other threads are blocked. This is something to think more about. SignalDatabase.rawDatabase.withinTransaction { @@ -117,6 +159,7 @@ object BackupRepository { SignalDatabase.recipients.setProfileKey(selfId, selfData.profileKey) SignalDatabase.recipients.setProfileSharing(selfId, true) + eventTimer.emit("setup") val backupState = BackupState() val chatItemInserter: ChatItemImportInserter = ChatItemBackupProcessor.beginImport(backupState) @@ -161,6 +204,14 @@ object BackupRepository { } } + val groups = SignalDatabase.groups.getGroups() + while (groups.hasNext()) { + val group = groups.next() + if (group.id.isV2) { + ApplicationDependencies.getJobManager().add(RequestGroupV2InfoJob(group.id as GroupId.V2)) + } + } + Log.d(TAG, "import() ${eventTimer.stop().summary}") } @@ -230,6 +281,77 @@ object BackupRepository { .also { Log.i(TAG, "OverallResult: $it") } is NetworkResult.Success } + /** + * Returns an object with details about the remote backup state. + */ + fun debugGetArchivedMediaState(): NetworkResult> { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return api + .triggerBackupIdReservation(backupKey) + .then { getAuthCredential() } + .then { credential -> + api.debugGetUploadedMediaItemMetadata(backupKey, credential) + } + } + + fun archiveMedia(attachment: DatabaseAttachment): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return api + .triggerBackupIdReservation(backupKey) + .then { getAuthCredential() } + .then { credential -> + api.archiveAttachmentMedia( + backupKey = backupKey, + serviceCredential = credential, + item = attachment.toArchiveMediaRequest(backupKey) + ) + } + .also { Log.i(TAG, "backupMediaResult: $it") } + } + + fun archiveMedia(attachments: List): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return api + .triggerBackupIdReservation(backupKey) + .then { getAuthCredential() } + .then { credential -> + api.archiveAttachmentMedia( + backupKey = backupKey, + serviceCredential = credential, + items = attachments.map { it.toArchiveMediaRequest(backupKey) } + ) + } + .also { Log.i(TAG, "backupMediaResult: $it") } + } + + fun deleteArchivedMedia(attachments: List): 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() + ) + } + + return getAuthCredential() + .then { credential -> + api.deleteArchivedMedia( + backupKey = backupKey, + serviceCredential = credential, + mediaToDelete = mediaToDelete + ) + } + .also { Log.i(TAG, "deleteBackupMediaResult: $it") } + } + /** * Retrieves an auth credential, preferring a cached value if available. */ @@ -257,6 +379,26 @@ object BackupRepository { val e164: String, val profileKey: ProfileKey ) + + private fun DatabaseAttachment.toArchiveMediaRequest(backupKey: BackupKey): ArchiveMediaRequest { + val mediaSecrets = backupKey.deriveMediaSecrets(Base64.decode(dataHash!!)) + return ArchiveMediaRequest( + sourceAttachment = ArchiveMediaRequest.SourceAttachment( + cdn = cdnNumber, + key = remoteLocation!! + ), + objectLength = AttachmentCipherStreamUtil.getCiphertextLength(PaddingInputStream.getPaddedSize(size)).toInt(), + mediaId = mediaSecrets.id.toString(), + hmacKey = Base64.encodeWithPadding(mediaSecrets.macKey), + encryptionKey = Base64.encodeWithPadding(mediaSecrets.cipherKey), + iv = Base64.encodeWithPadding(mediaSecrets.iv) + ) + } +} + +class ExportState { + val recipientIds = HashSet() + val threadIds = HashSet() } class BackupState { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/CallTableBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/CallTableBackupExtensions.kt index 0f48979fa3..5f3116b0d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/CallTableBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/CallTableBackupExtensions.kt @@ -39,17 +39,12 @@ fun CallTable.restoreCallLogFromBackup(call: BackupCall, backupState: BackupStat Call.Type.UNKNOWN_TYPE -> return } - val event = when (call.event) { - Call.Event.DELETE -> CallTable.Event.DELETE - Call.Event.JOINED -> CallTable.Event.JOINED - Call.Event.GENERIC_GROUP_CALL -> CallTable.Event.GENERIC_GROUP_CALL - Call.Event.DECLINED -> CallTable.Event.DECLINED - Call.Event.ACCEPTED -> CallTable.Event.ACCEPTED - Call.Event.MISSED -> CallTable.Event.MISSED - Call.Event.OUTGOING_RING -> CallTable.Event.OUTGOING_RING - Call.Event.OUTGOING -> CallTable.Event.ONGOING - Call.Event.NOT_ACCEPTED -> CallTable.Event.NOT_ACCEPTED - Call.Event.UNKNOWN_EVENT -> return + val event = when (call.state) { + Call.State.MISSED -> CallTable.Event.MISSED + Call.State.COMPLETED -> CallTable.Event.ACCEPTED + Call.State.DECLINED_BY_USER -> CallTable.Event.DECLINED + Call.State.DECLINED_BY_NOTIFICATION_PROFILE -> CallTable.Event.MISSED_NOTIFICATION_PROFILE + Call.State.UNKNOWN_EVENT -> return } val direction = if (call.outgoing) CallTable.Direction.OUTGOING else CallTable.Direction.INCOMING @@ -62,7 +57,8 @@ fun CallTable.restoreCallLogFromBackup(call: BackupCall, backupState: BackupStat CallTable.TYPE to CallTable.Type.serialize(type), CallTable.DIRECTION to CallTable.Direction.serialize(direction), CallTable.EVENT to CallTable.Event.serialize(event), - CallTable.TIMESTAMP to call.timestamp + CallTable.TIMESTAMP to call.timestamp, + CallTable.RINGER to if (call.ringerRecipientId != null) backupState.backupToLocalRecipientId[call.ringerRecipientId]?.toLong() else null ) writableDatabase.insert(CallTable.TABLE_NAME, SQLiteDatabase.CONFLICT_IGNORE, values) @@ -102,18 +98,18 @@ class CallLogIterator(private val cursor: Cursor) : Iterator, Close }, timestamp = cursor.requireLong(CallTable.TIMESTAMP), ringerRecipientId = if (cursor.isNull(CallTable.RINGER)) null else cursor.requireLong(CallTable.RINGER), - event = when (event) { - CallTable.Event.ONGOING -> Call.Event.OUTGOING - CallTable.Event.OUTGOING_RING -> Call.Event.OUTGOING_RING - CallTable.Event.ACCEPTED -> Call.Event.ACCEPTED - CallTable.Event.DECLINED -> Call.Event.DECLINED - CallTable.Event.GENERIC_GROUP_CALL -> Call.Event.GENERIC_GROUP_CALL - CallTable.Event.JOINED -> Call.Event.JOINED - CallTable.Event.MISSED, - CallTable.Event.MISSED_NOTIFICATION_PROFILE -> Call.Event.MISSED - CallTable.Event.DELETE -> Call.Event.DELETE - CallTable.Event.RINGING -> Call.Event.UNKNOWN_EVENT - CallTable.Event.NOT_ACCEPTED -> Call.Event.NOT_ACCEPTED + state = when (event) { + CallTable.Event.ONGOING -> Call.State.COMPLETED + CallTable.Event.OUTGOING_RING -> Call.State.COMPLETED + CallTable.Event.ACCEPTED -> Call.State.COMPLETED + CallTable.Event.DECLINED -> Call.State.DECLINED_BY_USER + CallTable.Event.GENERIC_GROUP_CALL -> Call.State.COMPLETED + CallTable.Event.JOINED -> Call.State.COMPLETED + CallTable.Event.MISSED -> Call.State.MISSED + CallTable.Event.MISSED_NOTIFICATION_PROFILE -> Call.State.DECLINED_BY_NOTIFICATION_PROFILE + CallTable.Event.DELETE -> Call.State.COMPLETED + CallTable.Event.RINGING -> Call.State.MISSED + CallTable.Event.NOT_ACCEPTED -> Call.State.MISSED } ) } 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 b1c893ccf0..233b986a2a 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 @@ -9,6 +9,7 @@ import android.database.Cursor import com.annimon.stream.Stream import okio.ByteString.Companion.toByteString import org.signal.core.util.Base64 +import org.signal.core.util.Base64.decode import org.signal.core.util.Base64.decodeOrThrow import org.signal.core.util.logging.Log import org.signal.core.util.requireBlob @@ -40,11 +41,16 @@ import org.thoughtcrime.securesms.database.SignalDatabase.Companion.calls import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchSet import org.thoughtcrime.securesms.database.documents.NetworkFailureSet import org.thoughtcrime.securesms.database.model.GroupCallUpdateDetailsUtil +import org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageConverter +import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.ReactionRecord import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList +import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDetails import org.thoughtcrime.securesms.database.model.databaseprotos.SessionSwitchoverEvent import org.thoughtcrime.securesms.database.model.databaseprotos.ThreadMergeEvent +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.mms.QuoteModel import org.thoughtcrime.securesms.util.JsonUtils import org.whispersystems.signalservice.api.push.ServiceId.ACI @@ -99,6 +105,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } val reactionsById: Map> = SignalDatabase.reactions.getReactionsForMessages(records.keys) + val mentionsById: Map> = SignalDatabase.mentions.getMentionsForMessages(records.keys) val groupReceiptsById: Map> = SignalDatabase.groupReceipts.getGroupReceiptInfoForMessages(records.keys) for ((id, record) in records) { @@ -154,6 +161,26 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } ) } + MessageTypes.isGroupV2(record.type) && MessageTypes.isGroupUpdate(record.type) -> { + val groupChange = record.messageExtras?.gv2UpdateDescription?.groupChangeUpdate + if (groupChange != null) { + builder.updateMessage = ChatUpdateMessage( + groupChange = groupChange + ) + } else if (record.body != null) { + try { + val decoded: ByteArray = decode(record.body) + val context = DecryptedGroupV2Context.ADAPTER.decode(decoded) + builder.updateMessage = ChatUpdateMessage( + groupChange = GroupsV2UpdateMessageConverter.translateDecryptedChange(selfIds = SignalStore.account().getServiceIds(), context) + ) + } catch (e: IOException) { + continue + } + } else { + continue + } + } MessageTypes.isCallLog(record.type) -> { val call = calls.getCallByMessageId(record.id) if (call != null) { @@ -207,7 +234,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: Log.w(TAG, "Record missing a body, skipping") continue } - else -> builder.standardMessage = record.toTextMessage(reactionsById[id]) + else -> builder.standardMessage = record.toTextMessage(reactionsById[id], mentions = mentionsById[id]) } buffer += builder.build() @@ -261,12 +288,12 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } } - private fun BackupMessageRecord.toTextMessage(reactionRecords: List?): StandardMessage { + private fun BackupMessageRecord.toTextMessage(reactionRecords: List?, mentions: List?): StandardMessage { return StandardMessage( quote = this.toQuote(), text = Text( body = this.body!!, - bodyRanges = this.bodyRanges?.toBackupBodyRanges() ?: emptyList() + bodyRanges = (this.bodyRanges?.toBackupBodyRanges() ?: emptyList()) + (mentions?.toBackupBodyRanges() ?: emptyList()) ), // TODO Link previews! linkPreview = emptyList(), @@ -294,6 +321,16 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } } + private fun List.toBackupBodyRanges(): List { + return this.map { + BackupBodyRange( + start = it.start, + length = it.length, + mentionAci = SignalDatabase.recipients.getRecord(it.recipientId).aci?.toByteString() + ) + } + } + private fun ByteArray.toBackupBodyRanges(): List { val decoded: BodyRangeList = try { BodyRangeList.ADAPTER.decode(this) @@ -306,7 +343,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: BackupBodyRange( start = it.start, length = it.length, - mentionAci = it.mentionUuid?.let { UuidUtil.parseOrThrow(it) }?.toByteArray()?.toByteString(), + mentionAci = it.mentionUuid?.let { uuid -> UuidUtil.parseOrThrow(uuid) }?.toByteArray()?.toByteString(), style = it.style?.toBackupBodyRangeStyle() ) } @@ -412,6 +449,17 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } } + private fun ByteArray?.parseMessageExtras(): MessageExtras? { + if (this == null) { + return null + } + return try { + MessageExtras.ADAPTER.decode(this) + } catch (e: java.lang.Exception) { + null + } + } + private fun Cursor.toBackupMessageRecord(): BackupMessageRecord { return BackupMessageRecord( id = this.requireLong(MessageTable.ID), @@ -443,7 +491,8 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: receiptTimestamp = this.requireLong(MessageTable.RECEIPT_TIMESTAMP), networkFailureRecipientIds = this.requireString(MessageTable.NETWORK_FAILURES).parseNetworkFailures(), identityMismatchRecipientIds = this.requireString(MessageTable.MISMATCHED_IDENTITIES).parseIdentityMismatches(), - baseType = this.requireLong(COLUMN_BASE_TYPE) + baseType = this.requireLong(COLUMN_BASE_TYPE), + messageExtras = this.requireBlob(MessageTable.MESSAGE_EXTRAS).parseMessageExtras() ) } @@ -477,6 +526,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: val read: Boolean, val networkFailureRecipientIds: Set, val identityMismatchRecipientIds: Set, - val baseType: Long + val baseType: Long, + val messageExtras: MessageExtras? ) } 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 5c049409c9..3fe1131b80 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 @@ -28,11 +28,15 @@ import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.MessageTypes import org.thoughtcrime.securesms.database.ReactionTable import org.thoughtcrime.securesms.database.SQLiteDatabase +import org.thoughtcrime.securesms.database.SignalDatabase 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.Mention import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDetails import org.thoughtcrime.securesms.database.model.databaseprotos.SessionSwitchoverEvent import org.thoughtcrime.securesms.database.model.databaseprotos.ThreadMergeEvent @@ -40,6 +44,7 @@ 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.push.ServiceId import org.whispersystems.signalservice.api.util.UuidUtil /** @@ -152,7 +157,6 @@ class ChatItemImportInserter( if (buffer.size == 0) { return false } - buildBulkInsert(MessageTable.TABLE_NAME, MESSAGE_COLUMNS, buffer.messages).forEach { db.rawQuery("${it.query.where} RETURNING ${MessageTable.ID}", it.query.whereArgs).use { cursor -> var index = 0 @@ -177,6 +181,8 @@ class ChatItemImportInserter( messageId = SqlUtil.getNextAutoIncrementId(db, MessageTable.TABLE_NAME) + buffer.reset() + return true } @@ -202,6 +208,27 @@ class ChatItemImportInserter( } } } + if (this.standardMessage != null) { + val bodyRanges = this.standardMessage.text?.bodyRanges + if (!bodyRanges.isNullOrEmpty()) { + val mentions = bodyRanges.filter { it.mentionAci != null && it.start != null && it.length != null } + .mapNotNull { + val aci = ServiceId.ACI.parseOrNull(it.mentionAci!!) + + if (aci != null && !aci.isUnknown) { + val id = RecipientId.from(aci) + Mention(id, it.start!!, it.length!!) + } else { + null + } + } + if (mentions.isNotEmpty()) { + followUp = { messageId -> + SignalDatabase.mentions.insert(threadId, messageId, mentions) + } + } + } + } return MessageInsert(contentValues, followUp) } @@ -243,6 +270,7 @@ class ChatItemImportInserter( contentValues.put(MessageTable.HAS_DELIVERY_RECEIPT, 0) contentValues.put(MessageTable.UNIDENTIFIED, this.sealedSender?.toInt()) contentValues.put(MessageTable.READ, this.incoming?.read?.toInt() ?: 0) + contentValues.put(MessageTable.NOTIFIED, 1) } contentValues.put(MessageTable.QUOTE_ID, 0) @@ -265,7 +293,6 @@ class ChatItemImportInserter( val reactions: List = when { this.standardMessage != null -> this.standardMessage.reactions this.contactMessage != null -> this.contactMessage.reactions - this.voiceMessage != null -> this.voiceMessage.reactions this.stickerMessage != null -> this.stickerMessage.reactions else -> emptyList() } @@ -342,7 +369,7 @@ class ChatItemImportInserter( this.put(MessageTable.BODY, standardMessage.text.body) if (standardMessage.text.bodyRanges.isNotEmpty()) { - this.put(MessageTable.MESSAGE_RANGES, standardMessage.text.bodyRanges.toLocalBodyRanges()?.encode() as ByteArray?) + this.put(MessageTable.MESSAGE_RANGES, standardMessage.text.bodyRanges.toLocalBodyRanges()?.encode()) } } @@ -410,6 +437,17 @@ class ChatItemImportInserter( // Calls don't use the incoming/outgoing flags, so we overwrite the flags here this.put(MessageTable.TYPE, typeFlags) } + updateMessage.groupChange != null -> { + put(MessageTable.BODY, "") + put( + MessageTable.MESSAGE_EXTRAS, + MessageExtras( + gv2UpdateDescription = + GV2UpdateDescription(groupChangeUpdate = updateMessage.groupChange) + ).encode() + ) + typeFlags = MessageTypes.GROUP_V2_BIT or MessageTypes.GROUP_UPDATE_BIT + } } this.put(MessageTable.TYPE, getAsLong(MessageTable.TYPE) or typeFlags) } @@ -512,5 +550,11 @@ class ChatItemImportInserter( ) { val size: Int get() = listOf(messages.size, reactions.size, groupReceipts.size).max() + + fun reset() { + messages.clear() + reactions.clear() + groupReceipts.clear() + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/DistributionListTablesBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/DistributionListTablesBackupExtensions.kt index 919251b0bc..596b868211 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/DistributionListTablesBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/DistributionListTablesBackupExtensions.kt @@ -28,38 +28,45 @@ import org.thoughtcrime.securesms.backup.v2.proto.DistributionList as BackupDist private val TAG = Log.tag(DistributionListTables::class.java) +data class DistributionRecipient(val id: RecipientId, val record: DistributionListRecord) + fun DistributionListTables.getAllForBackup(): List { val records = readableDatabase .select() .from(DistributionListTables.ListTable.TABLE_NAME) + .where(DistributionListTables.ListTable.IS_NOT_DELETED) .run() .readToList { cursor -> val id: DistributionListId = DistributionListId.from(cursor.requireLong(DistributionListTables.ListTable.ID)) val privacyMode: DistributionListPrivacyMode = cursor.requireObject(DistributionListTables.ListTable.PRIVACY_MODE, DistributionListPrivacyMode.Serializer) - - DistributionListRecord( - id = id, - name = cursor.requireNonNullString(DistributionListTables.ListTable.NAME), - distributionId = DistributionId.from(cursor.requireNonNullString(DistributionListTables.ListTable.DISTRIBUTION_ID)), - allowsReplies = CursorUtil.requireBoolean(cursor, DistributionListTables.ListTable.ALLOWS_REPLIES), - rawMembers = getRawMembers(id, privacyMode), - members = getMembers(id), - deletedAtTimestamp = 0L, - isUnknown = CursorUtil.requireBoolean(cursor, DistributionListTables.ListTable.IS_UNKNOWN), - privacyMode = privacyMode + val recipientId: RecipientId = RecipientId.from(cursor.requireLong(DistributionListTables.ListTable.RECIPIENT_ID)) + DistributionRecipient( + id = recipientId, + record = DistributionListRecord( + id = id, + name = cursor.requireNonNullString(DistributionListTables.ListTable.NAME), + distributionId = DistributionId.from(cursor.requireNonNullString(DistributionListTables.ListTable.DISTRIBUTION_ID)), + allowsReplies = CursorUtil.requireBoolean(cursor, DistributionListTables.ListTable.ALLOWS_REPLIES), + rawMembers = getRawMembers(id, privacyMode), + members = getMembers(id), + deletedAtTimestamp = 0L, + isUnknown = CursorUtil.requireBoolean(cursor, DistributionListTables.ListTable.IS_UNKNOWN), + privacyMode = privacyMode + ) ) } return records - .map { record -> + .map { recipient -> BackupRecipient( + id = recipient.id.toLong(), distributionList = BackupDistributionList( - name = record.name, - distributionId = record.distributionId.asUuid().toByteArray().toByteString(), - allowReplies = record.allowsReplies, - deletionTimestamp = record.deletedAtTimestamp, - privacyMode = record.privacyMode.toBackupPrivacyMode(), - memberRecipientIds = record.members.map { it.toLong() } + name = recipient.record.name, + distributionId = recipient.record.distributionId.asUuid().toByteArray().toByteString(), + allowReplies = recipient.record.allowsReplies, + deletionTimestamp = recipient.record.deletedAtTimestamp, + privacyMode = recipient.record.privacyMode.toBackupPrivacyMode(), + memberRecipientIds = recipient.record.members.map { it.toLong() } ) ) } 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 4b90c64955..5c483431d4 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 @@ -47,7 +47,8 @@ fun MessageTable.getMessagesForBackup(): ChatItemExportIterator { MessageTable.READ, MessageTable.NETWORK_FAILURES, MessageTable.MISMATCHED_IDENTITIES, - "${MessageTable.TYPE} & ${MessageTypes.BASE_TYPE_MASK} AS ${ChatItemExportIterator.COLUMN_BASE_TYPE}" + "${MessageTable.TYPE} & ${MessageTypes.BASE_TYPE_MASK} AS ${ChatItemExportIterator.COLUMN_BASE_TYPE}", + MessageTable.MESSAGE_EXTRAS ) .from(MessageTable.TABLE_NAME) .where( 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 c669acb1e3..9a99d9bb86 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 @@ -22,23 +22,31 @@ import org.signal.core.util.select 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.storageservice.protos.groups.local.DecryptedGroup import org.thoughtcrime.securesms.backup.v2.BackupState import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.Contact import org.thoughtcrime.securesms.backup.v2.proto.Group import org.thoughtcrime.securesms.backup.v2.proto.Self +import org.thoughtcrime.securesms.conversation.colors.AvatarColorHash import org.thoughtcrime.securesms.database.GroupTable import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.RecipientTableCursorUtil 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.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.ServiceId.PNI +import org.whispersystems.signalservice.api.util.toByteArray import java.io.Closeable typealias BackupRecipient = org.thoughtcrime.securesms.backup.v2.proto.Recipient @@ -94,7 +102,8 @@ fun RecipientTable.getGroupsForBackup(): BackupGroupIterator { "${RecipientTable.TABLE_NAME}.${RecipientTable.MUTE_UNTIL}", "${RecipientTable.TABLE_NAME}.${RecipientTable.EXTRAS}", "${GroupTable.TABLE_NAME}.${GroupTable.V2_MASTER_KEY}", - "${GroupTable.TABLE_NAME}.${GroupTable.SHOW_AS_STORY_STATE}" + "${GroupTable.TABLE_NAME}.${GroupTable.SHOW_AS_STORY_STATE}", + "${GroupTable.TABLE_NAME}.${GroupTable.TITLE}" ) .from( """ @@ -102,6 +111,7 @@ fun RecipientTable.getGroupsForBackup(): BackupGroupIterator { INNER JOIN ${GroupTable.TABLE_NAME} ON ${RecipientTable.TABLE_NAME}.${RecipientTable.ID} = ${GroupTable.TABLE_NAME}.${GroupTable.RECIPIENT_ID} """ ) + .where("${GroupTable.TABLE_NAME}.${GroupTable.V2_MASTER_KEY} IS NOT NULL") .run() return BackupGroupIterator(cursor) @@ -115,8 +125,10 @@ fun RecipientTable.restoreRecipientFromBackup(recipient: BackupRecipient, backup // TODO Also, should we move this when statement up to mimic the export? Kinda weird that this calls distributionListTable functions return when { recipient.contact != null -> restoreContactFromBackup(recipient.contact) + recipient.group != null -> restoreGroupFromBackup(recipient.group) recipient.distributionList != null -> SignalDatabase.distributionLists.restoreFromBackup(recipient.distributionList, backupState) recipient.self != null -> Recipient.self().id + recipient.releaseNotes != null -> restoreReleaseNotes() else -> { Log.w(TAG, "Unrecognized recipient type!") null @@ -177,6 +189,7 @@ private fun RecipientTable.restoreContactFromBackup(contact: Contact): Recipient .values( RecipientTable.BLOCKED to contact.blocked, RecipientTable.HIDDEN to contact.hidden, + RecipientTable.TYPE to RecipientTable.RecipientType.INDIVIDUAL.id, RecipientTable.PROFILE_FAMILY_NAME to contact.profileFamilyName.nullIfBlank(), RecipientTable.PROFILE_GIVEN_NAME to contact.profileGivenName.nullIfBlank(), RecipientTable.PROFILE_JOINED_NAME to ProfileName.fromParts(contact.profileGivenName.nullIfBlank(), contact.profileFamilyName.nullIfBlank()).toString().nullIfBlank(), @@ -193,6 +206,50 @@ private fun RecipientTable.restoreContactFromBackup(contact: Contact): Recipient return id } +private fun RecipientTable.restoreReleaseNotes(): RecipientId { + val releaseChannelId: RecipientId = insertReleaseChannelRecipient() + SignalStore.releaseChannelValues().setReleaseChannelRecipientId(releaseChannelId) + + setProfileName(releaseChannelId, ProfileName.asGiven("Signal")) + setMuted(releaseChannelId, Long.MAX_VALUE) + return releaseChannelId +} + +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 values = ContentValues().apply { + put(RecipientTable.GROUP_ID, groupId.toString()) + put(RecipientTable.AVATAR_COLOR, AvatarColorHash.forGroupId(groupId).serialize()) + put(RecipientTable.PROFILE_SHARING, group.whitelisted) + put(RecipientTable.TYPE, RecipientTable.RecipientType.GV2.id) + put(RecipientTable.STORAGE_SERVICE_ID, Base64.encodeWithPadding(StorageSyncHelper.generateKey())) + if (group.hideStory) { + val extras = RecipientExtras.Builder().hideStory(true).build() + put(RecipientTable.EXTRAS, extras.encode()) + } + } + + 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) + + return RecipientId.from(recipientId) +} + private fun Contact.toLocalExtras(): RecipientExtras { return RecipientExtras( hideStory = this.hideStory @@ -235,8 +292,8 @@ class BackupContactIterator(private val cursor: Cursor, private val selfId: Long return BackupRecipient( id = id, contact = Contact( - aci = aci?.toByteArray()?.toByteString(), - pni = pni?.toByteArray()?.toByteString(), + aci = aci?.rawUuid?.toByteArray()?.toByteString(), + pni = pni?.rawUuid?.toByteArray()?.toByteString(), username = cursor.requireString(RecipientTable.USERNAME), e164 = cursor.requireString(RecipientTable.E164)?.e164ToLong(), blocked = cursor.requireBoolean(RecipientTable.BLOCKED), @@ -280,7 +337,8 @@ class BackupGroupIterator(private val cursor: Cursor) : Iterator GroupTable.ShowAsStoryState.ALWAYS + Group.StorySendMode.DISABLED -> GroupTable.ShowAsStoryState.NEVER + Group.StorySendMode.DEFAULT -> GroupTable.ShowAsStoryState.IF_ACTIVE + } +} + private val Contact.formattedE164: String? get() { return e164?.let { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt index 8dc6c432d2..0e8af87cce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ThreadTableBackupExtensions.kt @@ -6,15 +6,16 @@ package org.thoughtcrime.securesms.backup.v2.database import android.database.Cursor +import androidx.core.content.contentValuesOf import org.signal.core.util.SqlUtil import org.signal.core.util.insertInto import org.signal.core.util.logging.Log import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt import org.signal.core.util.requireLong -import org.signal.core.util.select import org.signal.core.util.toInt import org.thoughtcrime.securesms.backup.v2.proto.Chat +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.ThreadTable import org.thoughtcrime.securesms.recipients.RecipientId import java.io.Closeable @@ -22,16 +23,21 @@ import java.io.Closeable private val TAG = Log.tag(ThreadTable::class.java) fun ThreadTable.getThreadsForBackup(): ChatIterator { - val cursor = readableDatabase - .select( - ThreadTable.ID, - ThreadTable.RECIPIENT_ID, - ThreadTable.ARCHIVED, - ThreadTable.PINNED, - ThreadTable.EXPIRES_IN - ) - .from(ThreadTable.TABLE_NAME) - .run() + //language=sql + val query = """ + SELECT + ${ThreadTable.TABLE_NAME}.${ThreadTable.ID}, + ${ThreadTable.RECIPIENT_ID}, + ${ThreadTable.PINNED}, + ${ThreadTable.READ}, + ${ThreadTable.ARCHIVED}, + ${RecipientTable.TABLE_NAME}.${RecipientTable.MESSAGE_EXPIRATION_TIME}, + ${RecipientTable.TABLE_NAME}.${RecipientTable.MUTE_UNTIL}, + ${RecipientTable.TABLE_NAME}.${RecipientTable.MENTION_SETTING} + FROM ${ThreadTable.TABLE_NAME} + LEFT OUTER JOIN ${RecipientTable.TABLE_NAME} ON ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} = ${RecipientTable.TABLE_NAME}.${RecipientTable.ID} + """ + val cursor = readableDatabase.query(query) return ChatIterator(cursor) } @@ -43,14 +49,29 @@ fun ThreadTable.clearAllDataForBackupRestore() { } fun ThreadTable.restoreFromBackup(chat: Chat, recipientId: RecipientId): Long? { - return writableDatabase + val threadId = writableDatabase .insertInto(ThreadTable.TABLE_NAME) .values( ThreadTable.RECIPIENT_ID to recipientId.serialize(), ThreadTable.PINNED to chat.pinnedOrder, - ThreadTable.ARCHIVED to chat.archived.toInt() + ThreadTable.ARCHIVED to chat.archived.toInt(), + ThreadTable.READ to if (chat.markedUnread) ThreadTable.ReadStatus.FORCED_UNREAD.serialize() else ThreadTable.ReadStatus.READ.serialize(), + ThreadTable.ACTIVE to 1 ) .run() + writableDatabase + .update( + RecipientTable.TABLE_NAME, + contentValuesOf( + RecipientTable.MENTION_SETTING to (if (chat.dontNotifyForMentionsIfMuted) RecipientTable.MentionSetting.DO_NOT_NOTIFY.id else RecipientTable.MentionSetting.ALWAYS_NOTIFY.id), + RecipientTable.MUTE_UNTIL to chat.muteUntilMs, + RecipientTable.MESSAGE_EXPIRATION_TIME to chat.expirationTimerMs + ), + "${RecipientTable.ID} = ?", + SqlUtil.buildArgs(recipientId.toLong()) + ) + + return threadId } class ChatIterator(private val cursor: Cursor) : Iterator, Closeable { @@ -68,7 +89,10 @@ class ChatIterator(private val cursor: Cursor) : Iterator, Closeable { recipientId = cursor.requireLong(ThreadTable.RECIPIENT_ID), archived = cursor.requireBoolean(ThreadTable.ARCHIVED), pinnedOrder = cursor.requireInt(ThreadTable.PINNED), - expirationTimerMs = cursor.requireLong(ThreadTable.EXPIRES_IN) + expirationTimerMs = cursor.requireLong(RecipientTable.MESSAGE_EXPIRATION_TIME), + muteUntilMs = cursor.requireLong(RecipientTable.MUTE_UNTIL), + markedUnread = ThreadTable.ReadStatus.deserialize(cursor.requireInt(ThreadTable.READ)) == ThreadTable.ReadStatus.FORCED_UNREAD, + dontNotifyForMentionsIfMuted = RecipientTable.MentionSetting.DO_NOT_NOTIFY.id == cursor.requireInt(RecipientTable.MENTION_SETTING) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt index 68e3452355..984377d089 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/AccountDataProcessor.kt @@ -28,6 +28,7 @@ import org.whispersystems.signalservice.api.push.UsernameLinkComponents import org.whispersystems.signalservice.api.storage.StorageRecordProtoUtil.defaultAccountRecord import org.whispersystems.signalservice.api.subscriptions.SubscriberId import org.whispersystems.signalservice.api.util.UuidUtil +import kotlin.jvm.optionals.getOrNull object AccountDataProcessor { @@ -47,12 +48,11 @@ object AccountDataProcessor { familyName = self.profileName.familyName, avatarUrlPath = self.profileAvatar ?: "", subscriptionManuallyCancelled = SignalStore.signalDonationsValues().isUserManuallyCancelled(), - username = SignalStore.account().username, + username = self.username.getOrNull(), subscriberId = subscriber?.subscriberId?.bytes?.toByteString() ?: defaultAccountRecord.subscriberId, subscriberCurrencyCode = subscriber?.currencyCode ?: defaultAccountRecord.subscriberCurrencyCode, accountSettings = AccountData.AccountSettings( storyViewReceiptsEnabled = SignalStore.storyValues().viewedReceiptsEnabled, - noteToSelfMarkedUnread = record != null && record.syncExtras.isForcedUnread, typingIndicators = TextSecurePreferences.isTypingIndicatorsEnabled(context), readReceipts = TextSecurePreferences.isReadReceiptsEnabled(context), sealedSenderIndicators = TextSecurePreferences.isShowUnidentifiedDeliveryIndicatorsEnabled(context), @@ -61,13 +61,14 @@ object AccountDataProcessor { phoneNumberSharingMode = SignalStore.phoneNumberPrivacy().phoneNumberSharingMode.toBackupPhoneNumberSharingMode(), preferContactAvatars = SignalStore.settings().isPreferSystemContactPhotos, universalExpireTimer = SignalStore.settings().universalExpireTimer, - preferredReactionEmoji = SignalStore.emojiValues().reactions, + preferredReactionEmoji = SignalStore.emojiValues().rawReactions, storiesDisabled = SignalStore.storyValues().isFeatureDisabled, hasViewedOnboardingStory = SignalStore.storyValues().userHasViewedOnboardingStory, hasSetMyStoriesPrivacy = SignalStore.storyValues().userHasBeenNotifiedAboutStories, keepMutedChatsArchived = SignalStore.settings().shouldKeepMutedChatsArchived(), displayBadgesOnProfile = SignalStore.signalDonationsValues().getDisplayBadgesOnProfile(), - hasSeenGroupStoryEducationSheet = SignalStore.storyValues().userHasSeenGroupStoryEducationSheet + hasSeenGroupStoryEducationSheet = SignalStore.storyValues().userHasSeenGroupStoryEducationSheet, + hasCompletedUsernameOnboarding = SignalStore.uiHints().hasCompletedUsernameOnboarding() ) ) ) @@ -122,6 +123,14 @@ object AccountDataProcessor { ) SignalStore.misc().usernameQrCodeColorScheme = accountData.usernameLink.color.toLocalUsernameColor() } + + if (settings.preferredReactionEmoji.isNotEmpty()) { + SignalStore.emojiValues().reactions = settings.preferredReactionEmoji + } + + if (settings.hasCompletedUsernameOnboarding) { + SignalStore.uiHints().setHasCompletedUsernameOnboarding(true) + } } SignalDatabase.runPostSuccessfulTransaction { ProfileUtil.handleSelfProfileKeyChange() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatBackupProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatBackupProcessor.kt index e10d0921e2..a6e13af11f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatBackupProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatBackupProcessor.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.BackupState +import org.thoughtcrime.securesms.backup.v2.ExportState import org.thoughtcrime.securesms.backup.v2.database.getThreadsForBackup import org.thoughtcrime.securesms.backup.v2.database.restoreFromBackup import org.thoughtcrime.securesms.backup.v2.proto.Chat @@ -18,10 +19,15 @@ import org.thoughtcrime.securesms.recipients.RecipientId object ChatBackupProcessor { val TAG = Log.tag(ChatBackupProcessor::class.java) - fun export(emitter: BackupFrameEmitter) { + fun export(exportState: ExportState, emitter: BackupFrameEmitter) { SignalDatabase.threads.getThreadsForBackup().use { reader -> for (chat in reader) { - emitter.emit(Frame(chat = chat)) + if (exportState.recipientIds.contains(chat.recipientId)) { + exportState.threadIds.add(chat.id) + emitter.emit(Frame(chat = chat)) + } else { + Log.w(TAG, "dropping thread for deleted recipient ${chat.recipientId}") + } } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatItemBackupProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatItemBackupProcessor.kt index e739fc9a28..ef1aa6ab57 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatItemBackupProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/ChatItemBackupProcessor.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.BackupState +import org.thoughtcrime.securesms.backup.v2.ExportState import org.thoughtcrime.securesms.backup.v2.database.ChatItemImportInserter import org.thoughtcrime.securesms.backup.v2.database.createChatItemInserter import org.thoughtcrime.securesms.backup.v2.database.getMessagesForBackup @@ -17,10 +18,12 @@ import org.thoughtcrime.securesms.database.SignalDatabase object ChatItemBackupProcessor { val TAG = Log.tag(ChatItemBackupProcessor::class.java) - fun export(emitter: BackupFrameEmitter) { + fun export(exportState: ExportState, emitter: BackupFrameEmitter) { SignalDatabase.messages.getMessagesForBackup().use { chatItems -> for (chatItem in chatItems) { - emitter.emit(Frame(chatItem = chatItem)) + if (exportState.threadIds.contains(chatItem.chatId)) { + emitter.emit(Frame(chatItem = chatItem)) + } } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientBackupProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientBackupProcessor.kt index 0c8db3753e..ae8c81b743 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientBackupProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/processor/RecipientBackupProcessor.kt @@ -7,13 +7,17 @@ package org.thoughtcrime.securesms.backup.v2.processor import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.backup.v2.BackupState +import org.thoughtcrime.securesms.backup.v2.ExportState +import org.thoughtcrime.securesms.backup.v2.database.BackupRecipient import org.thoughtcrime.securesms.backup.v2.database.getAllForBackup import org.thoughtcrime.securesms.backup.v2.database.getContactsForBackup import org.thoughtcrime.securesms.backup.v2.database.getGroupsForBackup import org.thoughtcrime.securesms.backup.v2.database.restoreRecipientFromBackup import org.thoughtcrime.securesms.backup.v2.proto.Frame +import org.thoughtcrime.securesms.backup.v2.proto.ReleaseNotes import org.thoughtcrime.securesms.backup.v2.stream.BackupFrameEmitter import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient typealias BackupRecipient = org.thoughtcrime.securesms.backup.v2.proto.Recipient @@ -22,12 +26,24 @@ object RecipientBackupProcessor { val TAG = Log.tag(RecipientBackupProcessor::class.java) - fun export(emitter: BackupFrameEmitter) { + fun export(state: ExportState, emitter: BackupFrameEmitter) { val selfId = Recipient.self().id.toLong() + val releaseChannelId = SignalStore.releaseChannelValues().releaseChannelRecipientId + if (releaseChannelId != null) { + emitter.emit( + Frame( + recipient = BackupRecipient( + id = releaseChannelId.toLong(), + releaseNotes = ReleaseNotes() + ) + ) + ) + } SignalDatabase.recipients.getContactsForBackup(selfId).use { reader -> for (backupRecipient in reader) { if (backupRecipient != null) { + state.recipientIds.add(backupRecipient.id) emitter.emit(Frame(recipient = backupRecipient)) } } @@ -35,11 +51,13 @@ object RecipientBackupProcessor { SignalDatabase.recipients.getGroupsForBackup().use { reader -> for (backupRecipient in reader) { + state.recipientIds.add(backupRecipient.id) emitter.emit(Frame(recipient = backupRecipient)) } } SignalDatabase.distributionLists.getAllForBackup().forEach { + state.recipientIds.add(it.id) emitter.emit(Frame(recipient = it)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupExportWriter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupExportWriter.kt index 24d3e34eb3..3c8023d95f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupExportWriter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupExportWriter.kt @@ -5,8 +5,10 @@ package org.thoughtcrime.securesms.backup.v2.stream +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame interface BackupExportWriter : AutoCloseable { + fun write(header: BackupInfo) fun write(frame: Frame) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupImportReader.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupImportReader.kt new file mode 100644 index 0000000000..f5b5e4d24c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupImportReader.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2023 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.stream + +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo +import org.thoughtcrime.securesms.backup.v2.proto.Frame + +interface BackupImportReader : Iterator, AutoCloseable { + fun getHeader(): BackupInfo? +} 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 c32da6ab00..1c597850b6 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 @@ -10,6 +10,7 @@ import org.signal.core.util.readNBytesOrThrow import org.signal.core.util.readVarInt32 import org.signal.core.util.stream.MacInputStream import org.signal.core.util.stream.TruncatingInputStream +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.whispersystems.signalservice.api.backup.BackupKey import org.whispersystems.signalservice.api.push.ServiceId.ACI @@ -33,8 +34,9 @@ class EncryptedBackupReader( aci: ACI, streamLength: Long, dataStream: () -> InputStream -) : Iterator, AutoCloseable { +) : BackupImportReader { + val backupInfo: BackupInfo? var next: Frame? = null val stream: InputStream @@ -56,10 +58,14 @@ class EncryptedBackupReader( cipher ) ) - + backupInfo = readHeader() next = read() } + override fun getHeader(): BackupInfo? { + return backupInfo + } + override fun hasNext(): Boolean { return next != null } @@ -71,6 +77,17 @@ class EncryptedBackupReader( } ?: throw NoSuchElementException() } + private fun readHeader(): BackupInfo? { + try { + val length = stream.readVarInt32().takeIf { it >= 0 } ?: return null + val headerBytes: ByteArray = stream.readNBytesOrThrow(length) + + return BackupInfo.ADAPTER.decode(headerBytes) + } catch (e: EOFException) { + return null + } + } + private fun read(): Frame? { try { val length = stream.readVarInt32().also { if (it < 0) return null } 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 530f383195..c8d2ea4de9 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 @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.stream 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.whispersystems.signalservice.api.backup.BackupKey import org.whispersystems.signalservice.api.push.ServiceId.ACI @@ -56,6 +57,13 @@ class EncryptedBackupWriter( ) } + override fun write(header: BackupInfo) { + val headerBytes = header.encode() + + mainStream.writeVarInt32(headerBytes.size) + mainStream.write(headerBytes) + } + @Throws(IOException::class) override fun write(frame: Frame) { val frameBytes: ByteArray = frame.encode() diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupReader.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupReader.kt index 91c9945d9d..136ee50dd0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupReader.kt @@ -7,6 +7,7 @@ package org.thoughtcrime.securesms.backup.v2.stream import org.signal.core.util.readNBytesOrThrow import org.signal.core.util.readVarInt32 +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame import java.io.EOFException import java.io.InputStream @@ -14,14 +15,20 @@ import java.io.InputStream /** * Reads a plaintext backup import stream one frame at a time. */ -class PlainTextBackupReader(val inputStream: InputStream) : Iterator { +class PlainTextBackupReader(val inputStream: InputStream) : BackupImportReader { + val backupInfo: BackupInfo? var next: Frame? = null init { + backupInfo = readHeader() next = read() } + override fun getHeader(): BackupInfo? { + return backupInfo + } + override fun hasNext(): Boolean { return next != null } @@ -33,6 +40,21 @@ class PlainTextBackupReader(val inputStream: InputStream) : Iterator { } ?: throw NoSuchElementException() } + override fun close() { + inputStream.close() + } + + private fun readHeader(): BackupInfo? { + try { + val length = inputStream.readVarInt32().takeIf { it >= 0 } ?: return null + val headerBytes: ByteArray = inputStream.readNBytesOrThrow(length) + + return BackupInfo.ADAPTER.decode(headerBytes) + } catch (e: EOFException) { + return null + } + } + private fun read(): Frame? { try { val length = inputStream.readVarInt32().also { if (it < 0) return null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupWriter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupWriter.kt index a4e414dcba..b56f1627b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupWriter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PlainTextBackupWriter.kt @@ -6,6 +6,7 @@ package org.thoughtcrime.securesms.backup.v2.stream import org.signal.core.util.writeVarInt32 +import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame import java.io.IOException import java.io.OutputStream @@ -15,6 +16,14 @@ import java.io.OutputStream */ class PlainTextBackupWriter(private val outputStream: OutputStream) : BackupExportWriter { + @Throws(IOException::class) + override fun write(header: BackupInfo) { + val headerBytes: ByteArray = header.encode() + + outputStream.writeVarInt32(headerBytes.size) + outputStream.write(headerBytes) + } + @Throws(IOException::class) override fun write(frame: Frame) { val frameBytes: ByteArray = frame.encode() diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt index 502c5d19b3..f2d4dc0dbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt @@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.badges.glide.BadgeSpriteTransformation import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.ThemeUtil +import org.thoughtcrime.securesms.util.visible class BadgeImageView @JvmOverloads constructor( context: Context, @@ -71,6 +72,10 @@ class BadgeImageView @JvmOverloads constructor( } } + fun isShowingBadge(): Boolean { + return drawable != null + } + private fun clearDrawable() { if (drawable != null) { setImageDrawable(null) diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/links/UpdateCallLinkRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/links/UpdateCallLinkRepository.kt index 8f2f21cca6..88d04130af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/links/UpdateCallLinkRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/links/UpdateCallLinkRepository.kt @@ -48,18 +48,25 @@ class UpdateCallLinkRepository( .subscribeOn(Schedulers.io()) } - fun revokeCallLink(credentials: CallLinkCredentials): Single { + fun deleteCallLink(credentials: CallLinkCredentials): Single { return callLinkManager - .updateCallLinkRevoked(credentials, true) + .deleteCallLink(credentials) .doOnSuccess(updateState(credentials)) .subscribeOn(Schedulers.io()) } private fun updateState(credentials: CallLinkCredentials): (UpdateCallLinkResult) -> Unit { return { result -> - if (result is UpdateCallLinkResult.Success) { - SignalDatabase.callLinks.updateCallLinkState(credentials.roomId, result.state) - ApplicationDependencies.getJobManager().add(CallLinkUpdateSendJob(credentials.roomId)) + when (result) { + is UpdateCallLinkResult.Update -> { + SignalDatabase.callLinks.updateCallLinkState(credentials.roomId, result.state) + ApplicationDependencies.getJobManager().add(CallLinkUpdateSendJob(credentials.roomId)) + } + is UpdateCallLinkResult.Delete -> { + SignalDatabase.callLinks.markRevoked(credentials.roomId) + ApplicationDependencies.getJobManager().add(CallLinkUpdateSendJob(credentials.roomId)) + } + else -> {} } } } 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 fe80e42dd6..1be045338f 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 @@ -159,7 +159,7 @@ class CreateCallLinkBottomSheetDialogFragment : ComposeBottomSheetDialogFragment private fun setCallName(callName: String) { lifecycleDisposable += viewModel.setCallName(callName).subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to update call link name") toastFailure() } @@ -168,7 +168,7 @@ class CreateCallLinkBottomSheetDialogFragment : ComposeBottomSheetDialogFragment private fun setApproveAllMembers(approveAllMembers: Boolean) { lifecycleDisposable += viewModel.setApproveAllMembers(approveAllMembers).subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to update call link restrictions") toastFailure() } @@ -177,7 +177,7 @@ class CreateCallLinkBottomSheetDialogFragment : ComposeBottomSheetDialogFragment private fun toggleApproveAllMembers() { lifecycleDisposable += viewModel.toggleApproveAllMembers().subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to update call link restrictions") toastFailure() } 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 c7fcbbdf1f..f0689ac88a 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 @@ -49,7 +49,9 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.links.CallLinkCredentials import org.thoughtcrime.securesms.service.webrtc.links.SignalCallLinkState import org.thoughtcrime.securesms.service.webrtc.links.UpdateCallLinkResult +import org.thoughtcrime.securesms.sharing.v2.ShareActivity import org.thoughtcrime.securesms.util.CommunicationActions +import org.thoughtcrime.securesms.util.Util import java.time.Instant /** @@ -119,15 +121,29 @@ class CallLinkDetailsFragment : ComposeFragment(), CallLinkDetailsCallback { } } + override fun onCopyClicked() { + Util.copyToClipboard(requireContext(), CallLinks.url(viewModel.rootKeySnapshot)) + Toast.makeText(requireContext(), R.string.CreateCallLinkBottomSheetDialogFragment__copied_to_clipboard, Toast.LENGTH_LONG).show() + } + + override fun onShareLinkViaSignalClicked() { + startActivity( + ShareActivity.sendSimpleText( + requireContext(), + getString(R.string.CreateCallLink__use_this_link_to_join_a_signal_call, CallLinks.url(viewModel.rootKeySnapshot)) + ) + ) + } + override fun onDeleteClicked() { viewModel.setDisplayRevocationDialog(true) } override fun onDeleteConfirmed() { viewModel.setDisplayRevocationDialog(false) - lifecycleDisposable += viewModel.revoke().observeOn(AndroidSchedulers.mainThread()).subscribeBy(onSuccess = { + lifecycleDisposable += viewModel.delete().observeOn(AndroidSchedulers.mainThread()).subscribeBy(onSuccess = { when (it) { - is UpdateCallLinkResult.Success -> ActivityCompat.finishAfterTransition(requireActivity()) + is UpdateCallLinkResult.Update -> ActivityCompat.finishAfterTransition(requireActivity()) else -> { Log.w(TAG, "Failed to revoke. $it") toastFailure() @@ -142,7 +158,7 @@ class CallLinkDetailsFragment : ComposeFragment(), CallLinkDetailsCallback { override fun onApproveAllMembersChanged(checked: Boolean) { lifecycleDisposable += viewModel.setApproveAllMembers(checked).observeOn(AndroidSchedulers.mainThread()).subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to change restrictions. $it") toastFailure() } @@ -151,7 +167,7 @@ class CallLinkDetailsFragment : ComposeFragment(), CallLinkDetailsCallback { private fun setName(name: String) { lifecycleDisposable += viewModel.setName(name).observeOn(AndroidSchedulers.mainThread()).subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to set name. $it") toastFailure() } @@ -175,6 +191,8 @@ private interface CallLinkDetailsCallback { fun onJoinClicked() fun onEditNameClicked() fun onShareClicked() + fun onCopyClicked() + fun onShareLinkViaSignalClicked() fun onDeleteClicked() fun onDeleteConfirmed() fun onDeleteCanceled() @@ -216,6 +234,8 @@ private fun CallLinkDetailsPreview() { override fun onJoinClicked() = Unit override fun onEditNameClicked() = Unit override fun onShareClicked() = Unit + override fun onCopyClicked() = Unit + override fun onShareLinkViaSignalClicked() = Unit override fun onDeleteClicked() = Unit override fun onApproveAllMembersChanged(checked: Boolean) = Unit } @@ -265,6 +285,18 @@ private fun CallLinkDetails( Dividers.Default() } + Rows.TextRow( + text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__share_link_via_signal), + icon = ImageVector.vectorResource(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), + onClick = callback::onCopyClicked + ) + Rows.TextRow( text = stringResource(id = R.string.CallLinkDetailsFragment__share_link), icon = ImageVector.vectorResource(id = R.drawable.symbol_link_24), diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsViewModel.kt index 9bfdf9f1bc..877a8186c3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsViewModel.kt @@ -71,9 +71,9 @@ class CallLinkDetailsViewModel( return mutationRepository.setCallName(credentials, name) } - fun revoke(): Single { + fun delete(): Single { val credentials = _state.value.callLink?.credentials ?: error("User cannot change the name of this call.") - return mutationRepository.revokeCallLink(credentials) + return mutationRepository.deleteCallLink(credentials) } class Factory(private val callLinkRoomId: CallLinkRoomId) : ViewModelProvider.Factory { diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRepository.kt index a2ab894fd5..81bbf06834 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogRepository.kt @@ -43,7 +43,8 @@ class CallLogRepository( fun markAllCallEventsRead() { SignalExecutors.BOUNDED_IO.execute { - SignalDatabase.messages.markAllCallEventsRead() + SignalDatabase.calls.markAllCallEventsRead() + ApplicationDependencies.getJobManager().add(CallLogEventSendJob.forMarkedAsRead(System.currentTimeMillis())) } } @@ -101,7 +102,7 @@ class CallLogRepository( } SignalDatabase.callLinks.getAllAdminCallLinksExcept(emptySet()) - }.flatMap(this::revokeAndCollectResults).map { 0 }.subscribeOn(Schedulers.io()) + }.flatMap(this::deleteAndCollectResults).map { 0 }.subscribeOn(Schedulers.io()) } /** @@ -117,7 +118,7 @@ class CallLogRepository( val allCallLinkIds = SignalDatabase.calls.getCallLinkRoomIdsFromCallRowIds(selectedCallRowIds) + selectedRoomIds SignalDatabase.callLinks.deleteNonAdminCallLinks(allCallLinkIds) SignalDatabase.callLinks.getAdminCallLinks(allCallLinkIds) - }.flatMap(this::revokeAndCollectResults).subscribeOn(Schedulers.io()) + }.flatMap(this::deleteAndCollectResults).subscribeOn(Schedulers.io()) } /** @@ -133,16 +134,16 @@ class CallLogRepository( val allCallLinkIds = SignalDatabase.calls.getCallLinkRoomIdsFromCallRowIds(selectedCallRowIds) + selectedRoomIds SignalDatabase.callLinks.deleteAllNonAdminCallLinksExcept(allCallLinkIds) SignalDatabase.callLinks.getAllAdminCallLinksExcept(allCallLinkIds) - }.flatMap(this::revokeAndCollectResults).subscribeOn(Schedulers.io()) + }.flatMap(this::deleteAndCollectResults).subscribeOn(Schedulers.io()) } - private fun revokeAndCollectResults(callLinksToRevoke: Set): Single { + private fun deleteAndCollectResults(callLinksToRevoke: Set): Single { return Single.merge( callLinksToRevoke.map { - updateCallLinkRepository.revokeCallLink(it.credentials!!) + updateCallLinkRepository.deleteCallLink(it.credentials!!) } ).reduce(0) { acc, current -> - acc + (if (current is UpdateCallLinkResult.Success) 0 else 1) + acc + (if (current is UpdateCallLinkResult.Update) 0 else 1) }.doOnTerminate { SignalDatabase.calls.updateAdHocCallEventDeletionTimestamps() }.doOnDispose { diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/new/NewCallActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/new/NewCallActivity.kt index 810f12686f..8e6ce68ff4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/new/NewCallActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/new/NewCallActivity.kt @@ -16,16 +16,14 @@ import org.thoughtcrime.securesms.ContactSelectionListFragment import org.thoughtcrime.securesms.InviteActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode -import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery.refresh import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.recipients.RecipientRepository import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.views.SimpleProgressDialog -import java.io.IOException import java.util.Optional import java.util.function.Consumer -import kotlin.time.Duration.Companion.seconds class NewCallActivity : ContactSelectionActivity(), ContactSelectionListFragment.NewCallCallback { @@ -46,38 +44,36 @@ class NewCallActivity : ContactSelectionActivity(), ContactSelectionListFragment Log.i(TAG, "[onContactSelected] Maybe creating a new recipient.") if (SignalStore.account().isRegistered) { Log.i(TAG, "[onContactSelected] Doing contact refresh.") + val progress = SimpleProgressDialog.show(this) - SimpleTask.run(lifecycle, { - var resolved = Recipient.external(this, number!!) - if (!resolved.isRegistered || !resolved.hasServiceId()) { - Log.i(TAG, "[onContactSelected] Not registered or no UUID. Doing a directory refresh.") - resolved = try { - refresh(this, resolved, false, 10.seconds.inWholeMilliseconds) - Recipient.resolved(resolved.id) - } catch (e: IOException) { - Log.w(TAG, "[onContactSelected] Failed to refresh directory for new contact.") - return@run null - } - } - resolved - }) { resolved: Recipient? -> + + SimpleTask.run(lifecycle, { RecipientRepository.lookupNewE164(this, number!!) }, { result -> progress.dismiss() - if (resolved != null) { - if (resolved.isRegistered && resolved.hasServiceId()) { - launch(resolved) - } else { + + when (result) { + is RecipientRepository.LookupResult.Success -> { + val resolved = Recipient.resolved(result.recipientId) + if (resolved.isRegistered && resolved.hasServiceId()) { + launch(resolved) + } + } + + is RecipientRepository.LookupResult.NotFound, + is RecipientRepository.LookupResult.InvalidEntry -> { + MaterialAlertDialogBuilder(this) + .setMessage(getString(R.string.NewConversationActivity__s_is_not_a_signal_user, number)) + .setPositiveButton(android.R.string.ok, null) + .show() + } + + else -> { MaterialAlertDialogBuilder(this) - .setMessage(getString(R.string.NewConversationActivity__s_is_not_a_signal_user, resolved.getDisplayName(this))) + .setMessage(R.string.NetworkFailure__network_error_check_your_connection_and_try_again) .setPositiveButton(android.R.string.ok, null) .show() } - } else { - MaterialAlertDialogBuilder(this) - .setMessage(R.string.NetworkFailure__network_error_check_your_connection_and_try_again) - .setPositiveButton(android.R.string.ok, null) - .show() } - } + }) } } callback.accept(true) 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 61a6442c01..6504c2eee5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java @@ -9,7 +9,6 @@ import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; -import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.SimpleEmojiTextView; import org.thoughtcrime.securesms.recipients.Recipient; @@ -20,8 +19,6 @@ public class FromTextView extends SimpleEmojiTextView { - private static final String TAG = Log.tag(FromTextView.class); - public FromTextView(Context context) { super(context); } @@ -31,22 +28,18 @@ public FromTextView(Context context, AttributeSet attrs) { } public void setText(Recipient recipient) { - setText(recipient, true); - } - - public void setText(Recipient recipient, boolean read) { - setText(recipient, read, null); + setText(recipient, null); } - public void setText(Recipient recipient, boolean read, @Nullable String suffix) { - setText(recipient, recipient.getDisplayNameOrUsername(getContext()), read, suffix); + public void setText(Recipient recipient, @Nullable CharSequence suffix) { + setText(recipient, recipient.getDisplayName(getContext()), suffix); } - public void setText(Recipient recipient, @Nullable CharSequence fromString, boolean read, @Nullable String suffix) { - setText(recipient, fromString, read, suffix, true); + public void setText(Recipient recipient, @Nullable CharSequence fromString, @Nullable CharSequence suffix) { + setText(recipient, fromString, suffix, true); } - public void setText(Recipient recipient, @Nullable CharSequence fromString, boolean read, @Nullable String suffix, boolean asThread) { + public void setText(Recipient recipient, @Nullable CharSequence fromString, @Nullable CharSequence suffix, boolean asThread) { SpannableStringBuilder builder = new SpannableStringBuilder(); if (asThread && recipient.isSelf()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java index 4e60014ef8..75d817d51d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java @@ -351,6 +351,13 @@ private void setQuoteAttachment(@NonNull RequestManager requestManager, @NonNull boolean outgoing = messageType != MessageType.INCOMING && messageType != MessageType.STORY_REPLY_INCOMING; boolean preview = messageType == MessageType.PREVIEW || messageType == MessageType.STORY_REPLY_PREVIEW; + if (isStoryReply() && originalMissing) { + thumbnailView.setVisibility(GONE); + attachmentVideoOVerlayStub.setVisibility(GONE); + attachmentNameViewStub.setVisibility(GONE); + return; + } + // TODO [alex] -- do we need this? mainView.setMinimumHeight(isStoryReply() && originalMissing ? 0 : thumbHeight); thumbnailView.setPadding(0, 0, 0, 0); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt index f9c9a1f149..8ee18e1265 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberRepository.kt @@ -279,6 +279,7 @@ class ChangeNumberRepository( ) ) pniMetadataStore.isSignedPreKeyRegistered = true + pniMetadataStore.lastResortKyberPreKeyId = pniLastResortKyberPreKeyId pniProtocolStore.identities().saveIdentityWithoutSideEffects( Recipient.self().id, 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 5b32b5e547..b1ece67d5d 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 @@ -12,7 +12,11 @@ import android.os.Bundle import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer @@ -20,12 +24,26 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +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.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Surface import androidx.compose.material3.Switch +import androidx.compose.material3.Tab +import androidx.compose.material3.TabRow import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign @@ -34,6 +52,7 @@ import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels import org.signal.core.ui.Buttons import org.signal.core.ui.Dividers +import org.signal.core.ui.Snackbars import org.signal.core.ui.theme.SignalTheme import org.signal.core.util.bytes import org.signal.core.util.getLength @@ -48,6 +67,7 @@ class InternalBackupPlaygroundFragment : ComposeFragment() { private val viewModel: InternalBackupPlaygroundViewModel by viewModels() private lateinit var exportFileLauncher: ActivityResultLauncher private lateinit var importFileLauncher: ActivityResultLauncher + private lateinit var validateFileLauncher: ActivityResultLauncher override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -72,43 +92,110 @@ class InternalBackupPlaygroundFragment : ComposeFragment() { } ?: Toast.makeText(requireContext(), "No URI selected", Toast.LENGTH_SHORT).show() } } + + validateFileLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + result.data?.data?.let { uri -> + requireContext().contentResolver.getLength(uri)?.let { length -> + viewModel.validate(length) { requireContext().contentResolver.openInputStream(uri)!! } + } + } ?: Toast.makeText(requireContext(), "No URI selected", Toast.LENGTH_SHORT).show() + } + } } @Composable override fun FragmentContent() { val state by viewModel.state + val mediaState by viewModel.mediaState - Screen( - state = state, - onExportClicked = { viewModel.export() }, - onImportMemoryClicked = { viewModel.import() }, - onImportFileClicked = { - val intent = Intent().apply { - action = Intent.ACTION_GET_CONTENT - type = "application/octet-stream" - addCategory(Intent.CATEGORY_OPENABLE) - } - - importFileLauncher.launch(intent) - }, - onPlaintextClicked = { viewModel.onPlaintextToggled() }, - onSaveToDiskClicked = { - val intent = Intent().apply { - action = Intent.ACTION_CREATE_DOCUMENT - type = "application/octet-stream" - addCategory(Intent.CATEGORY_OPENABLE) - putExtra(Intent.EXTRA_TITLE, "backup-${if (state.plaintext) "plaintext" else "encrypted"}-${System.currentTimeMillis()}.bin") - } + LaunchedEffect(Unit) { + viewModel.loadMedia() + } - exportFileLauncher.launch(intent) + Tabs( + mainContent = { + Screen( + state = state, + onExportClicked = { viewModel.export() }, + onImportMemoryClicked = { viewModel.import() }, + onImportFileClicked = { + val intent = Intent().apply { + action = Intent.ACTION_GET_CONTENT + type = "application/octet-stream" + addCategory(Intent.CATEGORY_OPENABLE) + } + + importFileLauncher.launch(intent) + }, + onPlaintextClicked = { viewModel.onPlaintextToggled() }, + onSaveToDiskClicked = { + val intent = Intent().apply { + action = Intent.ACTION_CREATE_DOCUMENT + type = "application/octet-stream" + addCategory(Intent.CATEGORY_OPENABLE) + putExtra(Intent.EXTRA_TITLE, "backup-${if (state.plaintext) "plaintext" else "encrypted"}-${System.currentTimeMillis()}.bin") + } + + exportFileLauncher.launch(intent) + }, + onUploadToRemoteClicked = { viewModel.uploadBackupToRemote() }, + onCheckRemoteBackupStateClicked = { viewModel.checkRemoteBackupState() }, + onValidateFileClicked = { + val intent = Intent().apply { + action = Intent.ACTION_GET_CONTENT + type = "application/octet-stream" + addCategory(Intent.CATEGORY_OPENABLE) + } + + validateFileLauncher.launch(intent) + } + ) }, - onUploadToRemoteClicked = { viewModel.uploadBackupToRemote() }, - onCheckRemoteBackupStateClicked = { viewModel.checkRemoteBackupState() } + mediaContent = { snackbarHostState -> + MediaList( + state = mediaState, + snackbarHostState = snackbarHostState, + backupAttachmentMedia = { viewModel.backupAttachmentMedia(it) }, + deleteBackupAttachmentMedia = { viewModel.deleteBackupAttachmentMedia(it) }, + batchBackupAttachmentMedia = { viewModel.backupAttachmentMedia(it) }, + batchDeleteBackupAttachmentMedia = { viewModel.deleteBackupAttachmentMedia(it) } + ) + } ) } +} - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) +@Composable +fun Tabs( + mainContent: @Composable () -> Unit, + mediaContent: @Composable (snackbarHostState: SnackbarHostState) -> Unit +) { + val tabs = listOf("Main", "Media") + var tabIndex by remember { mutableIntStateOf(0) } + + val snackbarHostState: SnackbarHostState = remember { SnackbarHostState() } + + Scaffold( + snackbarHost = { Snackbars.Host(snackbarHostState) }, + topBar = { + TabRow(selectedTabIndex = tabIndex) { + tabs.forEachIndexed { index, tab -> + Tab( + text = { Text(tab) }, + selected = index == tabIndex, + onClick = { tabIndex = index } + ) + } + } + } + ) { + Surface(modifier = Modifier.padding(it)) { + when (tabIndex) { + 0 -> mainContent() + 1 -> mediaContent(snackbarHostState) + } + } } } @@ -120,6 +207,7 @@ fun Screen( onImportFileClicked: () -> Unit = {}, onPlaintextClicked: () -> Unit = {}, onSaveToDiskClicked: () -> Unit = {}, + onValidateFileClicked: () -> Unit = {}, onUploadToRemoteClicked: () -> Unit = {}, onCheckRemoteBackupStateClicked: () -> Unit = {} ) { @@ -165,15 +253,23 @@ fun Screen( Text("Import from file") } + Buttons.LargeTonal( + onClick = onValidateFileClicked + ) { + Text("Validate file") + } + Spacer(modifier = Modifier.height(16.dp)) when (state.backupState) { BackupState.NONE -> { StateLabel("") } + BackupState.EXPORT_IN_PROGRESS -> { StateLabel("Export in progress...") } + BackupState.EXPORT_DONE -> { StateLabel("Export complete. Sitting in memory. You can click 'Import' to import that data, save it to a file, or upload it to remote.") @@ -183,6 +279,7 @@ fun Screen( Text("Save to file") } } + BackupState.IMPORT_IN_PROGRESS -> { StateLabel("Import in progress...") } @@ -202,12 +299,15 @@ fun Screen( is InternalBackupPlaygroundViewModel.RemoteBackupState.Available -> { StateLabel("Exists/allocated. ${state.remoteBackupState.response.mediaCount} media items, using ${state.remoteBackupState.response.usedSpace} bytes (${state.remoteBackupState.response.usedSpace.bytes.inMebiBytes.roundedString(3)} MiB)") } + InternalBackupPlaygroundViewModel.RemoteBackupState.GeneralError -> { StateLabel("Hit an unknown error. Check the logs.") } + InternalBackupPlaygroundViewModel.RemoteBackupState.NotFound -> { StateLabel("Not found.") } + InternalBackupPlaygroundViewModel.RemoteBackupState.Unknown -> { StateLabel("Hit the button above to check the state.") } @@ -228,12 +328,15 @@ fun Screen( BackupUploadState.NONE -> { StateLabel("") } + BackupUploadState.UPLOAD_IN_PROGRESS -> { StateLabel("Upload in progress...") } + BackupUploadState.UPLOAD_DONE -> { StateLabel("Upload complete.") } + BackupUploadState.UPLOAD_FAILED -> { StateLabel("Upload failed.") } @@ -251,6 +354,124 @@ private fun StateLabel(text: String) { ) } +@OptIn(ExperimentalFoundationApi::class) +@Composable +fun MediaList( + state: InternalBackupPlaygroundViewModel.MediaState, + snackbarHostState: SnackbarHostState, + backupAttachmentMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, + deleteBackupAttachmentMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, + batchBackupAttachmentMedia: (Set) -> Unit, + batchDeleteBackupAttachmentMedia: (Set) -> Unit +) { + LaunchedEffect(state.error?.id) { + state.error?.let { + snackbarHostState.showSnackbar(it.errorText) + } + } + + var selectionState by remember { mutableStateOf(MediaMultiSelectState()) } + + Box(modifier = Modifier.fillMaxSize()) { + LazyColumn(modifier = Modifier.fillMaxSize()) { + items( + count = state.attachments.size, + key = { index -> state.attachments[index].id } + ) { index -> + val attachment = state.attachments[index] + Row( + modifier = Modifier + .combinedClickable( + onClick = { + if (selectionState.selecting) { + selectionState = selectionState.copy(selected = if (selectionState.selected.contains(attachment.mediaId)) selectionState.selected - attachment.mediaId else selectionState.selected + attachment.mediaId) + } + }, + onLongClick = { + selectionState = if (selectionState.selecting) MediaMultiSelectState() else MediaMultiSelectState(selecting = true, selected = setOf(attachment.mediaId)) + } + ) + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + if (selectionState.selecting) { + Checkbox( + checked = selectionState.selected.contains(attachment.mediaId), + onCheckedChange = { selected -> + selectionState = selectionState.copy(selected = if (selected) selectionState.selected + attachment.mediaId else selectionState.selected - attachment.mediaId) + } + ) + } + + Column(modifier = Modifier.weight(1f, true)) { + Text(text = "Attachment ${attachment.title}") + Text(text = "State: ${attachment.state}") + } + + if (attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.INIT || + 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) + else -> throw AssertionError("Unsupported state: ${attachment.state}") + } + } + ) { + Text( + text = when (attachment.state) { + InternalBackupPlaygroundViewModel.BackupAttachment.State.LOCAL_ONLY -> "Backup" + InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED -> "Remote Delete" + else -> throw AssertionError("Unsupported state: ${attachment.state}") + } + ) + } + } + } + } + } + + if (selectionState.selecting) { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 24.dp) + .background( + color = MaterialTheme.colorScheme.secondaryContainer, + shape = RoundedCornerShape(8.dp) + ) + .padding(8.dp) + ) { + Button(onClick = { selectionState = MediaMultiSelectState() }) { + Text("Cancel") + } + Button(onClick = { + batchBackupAttachmentMedia(selectionState.selected) + selectionState = MediaMultiSelectState() + }) { + Text("Backup") + } + Button(onClick = { + batchDeleteBackupAttachmentMedia(selectionState.selected) + selectionState = MediaMultiSelectState() + }) { + Text("Delete") + } + } + } + } +} + +private data class MediaMultiSelectState( + val selecting: Boolean = false, + val selected: Set = emptySet() +) + @Preview(name = "Light Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_NO) @Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable 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 58d9626a06..c785ef55fc 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 @@ -13,17 +13,27 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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.DatabaseAttachment import org.thoughtcrime.securesms.backup.v2.BackupMetadata import org.thoughtcrime.securesms.backup.v2.BackupRepository +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.whispersystems.signalservice.api.NetworkResult +import org.whispersystems.signalservice.api.backup.BackupKey import java.io.ByteArrayInputStream import java.io.InputStream +import java.util.UUID +import kotlin.random.Random class InternalBackupPlaygroundViewModel : ViewModel() { + private val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + var backupData: ByteArray? = null val disposables = CompositeDisposable() @@ -31,6 +41,9 @@ class InternalBackupPlaygroundViewModel : ViewModel() { private val _state: MutableState = mutableStateOf(ScreenState(backupState = BackupState.NONE, uploadState = BackupUploadState.NONE, plaintext = false)) val state: State = _state + private val _mediaState: MutableState = mutableStateOf(MediaState()) + val mediaState: State = _mediaState + fun export() { _state.value = _state.value.copy(backupState = BackupState.EXPORT_IN_PROGRESS) val plaintext = _state.value.plaintext @@ -78,6 +91,19 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } } + fun validate(length: Long, inputStreamFactory: () -> InputStream) { + val self = Recipient.self() + val selfData = BackupRepository.SelfData(self.aci.get(), self.pni.get(), self.e164.get(), ProfileKey(self.profileKey)) + + disposables += Single.fromCallable { BackupRepository.validate(length, inputStreamFactory, selfData) } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { nothing -> + backupData = null + _state.value = _state.value.copy(backupState = BackupState.NONE) + } + } + fun onPlaintextToggled() { _state.value = _state.value.copy(plaintext = !_state.value.plaintext) } @@ -104,9 +130,11 @@ class InternalBackupPlaygroundViewModel : ViewModel() { result is NetworkResult.Success -> { _state.value = _state.value.copy(remoteBackupState = RemoteBackupState.Available(result.result)) } + result is NetworkResult.StatusCodeError && result.code == 404 -> { _state.value = _state.value.copy(remoteBackupState = RemoteBackupState.NotFound) } + else -> { _state.value = _state.value.copy(remoteBackupState = RemoteBackupState.GeneralError) } @@ -114,6 +142,98 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } } + 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) }) } + } + + disposables += Single + .fromCallable { BackupRepository.debugGetArchivedMediaState() } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.single()) + .subscribeBy { result -> + when (result) { + is NetworkResult.Success -> _mediaState.set { update(archiveStateLoaded = true, backedUpMediaIds = result.result.map { it.mediaId }.toSet()) } + 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) } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.single()) + .doOnSubscribe { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds + mediaIds) } } + .doOnTerminate { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds - mediaIds) } } + .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 + } + } + + else -> _mediaState.set { copy(error = MediaStateError(errorText = "$result")) } + } + } + } + + fun backupAttachmentMedia(attachment: BackupAttachment) { + disposables += Single.fromCallable { BackupRepository.archiveMedia(attachment.dbAttachment) } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.single()) + .doOnSubscribe { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds + attachment.mediaId) } } + .doOnTerminate { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds - attachment.mediaId) } } + .subscribeBy { + when (it) { + is NetworkResult.Success -> { + _mediaState.set { update(backedUpMediaIds = backedUpMediaIds + attachment.mediaId) } + } + + else -> _mediaState.set { copy(error = MediaStateError(errorText = "$it")) } + } + } + } + + fun deleteBackupAttachmentMedia(mediaIds: Set) { + deleteBackupAttachmentMedia(mediaIds.mapNotNull { mediaState.value.idToAttachment[it] }.toList()) + } + + fun deleteBackupAttachmentMedia(attachment: BackupAttachment) { + deleteBackupAttachmentMedia(listOf(attachment)) + } + + private fun deleteBackupAttachmentMedia(attachments: List) { + val ids = attachments.map { it.mediaId }.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) } } + .subscribeBy { + when (it) { + is NetworkResult.Success -> { + _mediaState.set { update(backedUpMediaIds = backedUpMediaIds - ids) } + } + + else -> _mediaState.set { copy(error = MediaStateError(errorText = "$it")) } + } + } + } + override fun onCleared() { disposables.clear() } @@ -139,4 +259,77 @@ class InternalBackupPlaygroundViewModel : ViewModel() { object GeneralError : RemoteBackupState() data class Available(val response: BackupMetadata) : RemoteBackupState() } + + data class MediaState( + val backupStateLoaded: Boolean = false, + val attachments: List = emptyList(), + val backedUpMediaIds: 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 + ): 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 + } else { + BackupAttachment.State.LOCAL_ONLY + } + + it.copy(state = state) + } + } else { + attachments + } + + return copy( + backupStateLoaded = archiveStateLoaded, + attachments = updatedAttachments, + backedUpMediaIds = backedUpMediaIds + ) + } + } + + data class BackupAttachment( + val dbAttachment: DatabaseAttachment, + val state: State = State.INIT, + val mediaId: String = Base64.encodeUrlSafeWithPadding(Random.nextBytes(15)) + ) { + val id: Any = dbAttachment.attachmentId + val title: String = dbAttachment.attachmentId.toString() + + enum class State { + INIT, + LOCAL_ONLY, + UPLOADED, + 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( + val id: UUID = UUID.randomUUID(), + val errorText: String + ) + + fun MutableState.set(update: T.() -> T) { + this.value = this.value.update() + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt index e519242972..2b8524bfa1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.launch import org.signal.core.ui.Dividers import org.signal.core.ui.Rows @@ -65,7 +66,7 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() { onEveryoneCanFindMeByNumberClicked = viewModel::setEveryoneCanFindMeByMyNumber, onNobodyCanFindMeByNumberClicked = { if (!state.phoneNumberSharing) { - viewModel.setNobodyCanFindMeByMyNumber() + onNobodyCanFindMeByNumberClicked() } else { lifecycleScope.launch { snackbarHostState.showSnackbar( @@ -77,6 +78,15 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() { } ) } + + private fun onNobodyCanFindMeByNumberClicked() { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.PhoneNumberPrivacySettingsFragment__nobody_can_find_me_warning_title) + .setMessage(getString(R.string.PhoneNumberPrivacySettingsFragment__nobody_can_find_me_warning_message)) + .setNegativeButton(getString(R.string.PhoneNumberPrivacySettingsFragment__cancel), null) + .setPositiveButton(android.R.string.ok) { _, _ -> viewModel.setNobodyCanFindMeByMyNumber() } + .show() + } } @Composable diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/QrScanResult.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/QrScanResult.kt index 0a4cb1af02..4a2339e5af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/QrScanResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/QrScanResult.kt @@ -13,4 +13,6 @@ sealed class QrScanResult { object InvalidData : QrScanResult() object NetworkError : QrScanResult() + + object QrNotFound : QrScanResult() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsFragment.kt index f6629e5d09..47216c2353 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsFragment.kt @@ -8,6 +8,8 @@ import android.content.res.Configuration import android.graphics.Bitmap import android.os.Bundle import android.view.View +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideOutHorizontally @@ -40,11 +42,13 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext 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 androidx.core.app.ShareCompat +import androidx.core.app.TaskStackBuilder import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle @@ -52,9 +56,11 @@ import androidx.lifecycle.LifecycleOwner import androidx.navigation.NavController import androidx.navigation.fragment.findNavController import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.MultiplePermissionsState import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.isGranted +import com.google.accompanist.permissions.rememberMultiplePermissionsState import com.google.accompanist.permissions.rememberPermissionState import io.reactivex.rxjava3.disposables.CompositeDisposable import kotlinx.coroutines.CoroutineScope @@ -63,13 +69,16 @@ import org.signal.core.ui.Dialogs import org.signal.core.ui.Snackbars import org.signal.core.ui.theme.SignalTheme import org.signal.core.util.concurrent.LifecycleDisposable +import org.thoughtcrime.securesms.MainActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCodeData import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCodeState import org.thoughtcrime.securesms.components.settings.app.usernamelinks.UsernameQrCodeColorScheme import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.UsernameLinkSettingsState.ActiveTab import org.thoughtcrime.securesms.compose.ComposeFragment +import org.thoughtcrime.securesms.permissions.PermissionCompat import org.thoughtcrime.securesms.providers.BlobProvider +import org.thoughtcrime.securesms.util.CommunicationActions import java.io.ByteArrayOutputStream import java.util.UUID @@ -79,6 +88,18 @@ class UsernameLinkSettingsFragment : ComposeFragment() { private val viewModel: UsernameLinkSettingsViewModel by viewModels() private val disposables: LifecycleDisposable = LifecycleDisposable() + private lateinit var galleryLauncher: ActivityResultLauncher + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + galleryLauncher = registerForActivityResult(UsernameQrImageSelectionActivity.Contract()) { uri -> + if (uri != null) { + viewModel.scanImage(requireContext(), uri) + } + } + } + override fun onStart() { super.onStart() setFragmentResultListener(UsernameLinkShareBottomSheet.REQUEST_KEY) { key, bundle -> @@ -99,6 +120,14 @@ class UsernameLinkSettingsFragment : ComposeFragment() { viewModel.onTabSelected(ActiveTab.Scan) } + val galleryPermissionState: MultiplePermissionsState = rememberMultiplePermissionsState(permissions = PermissionCompat.forImages().toList()) { grants -> + if (grants.values.all { it }) { + galleryLauncher.launch(Unit) + } else { + Toast.makeText(requireContext(), R.string.ChatWallpaperPreviewActivity__viewing_your_gallery_requires_the_storage_permission, Toast.LENGTH_SHORT).show() + } + } + MainScreen( state = state, navController = navController, @@ -111,6 +140,13 @@ class UsernameLinkSettingsFragment : ComposeFragment() { onShareBadge = { shareQrBadge(requireActivity(), viewModel.generateQrCodeImage(helpText)) }, onQrCodeScanned = { data -> viewModel.onQrCodeScanned(data) }, onQrResultHandled = { viewModel.onQrResultHandled() }, + onOpenGalleryClicked = { + if (galleryPermissionState.allPermissionsGranted) { + galleryLauncher.launch(Unit) + } else { + galleryPermissionState.launchMultiplePermissionRequest() + } + }, onLinkReset = { viewModel.onUsernameLinkReset() }, onBackNavigationPressed = { requireActivity().onBackPressed() }, linkCopiedEvent = linkCopiedEvent @@ -127,6 +163,7 @@ class UsernameLinkSettingsFragment : ComposeFragment() { } } +@OptIn(ExperimentalPermissionsApi::class) @Composable private fun MainScreen( state: UsernameLinkSettingsState, @@ -140,10 +177,13 @@ private fun MainScreen( onShareBadge: () -> Unit = {}, onQrCodeScanned: (String) -> Unit = {}, onQrResultHandled: () -> Unit = {}, + onOpenGalleryClicked: () -> Unit = {}, onLinkReset: () -> Unit = {}, onBackNavigationPressed: () -> Unit = {}, linkCopiedEvent: UUID? = null ) { + val context = LocalContext.current + val snackbarHostState: SnackbarHostState = remember { SnackbarHostState() } val scope: CoroutineScope = rememberCoroutineScope() var showResetDialog: Boolean by remember { mutableStateOf(false) } @@ -204,7 +244,15 @@ private fun MainScreen( qrScanResult = state.qrScanResult, onQrCodeScanned = onQrCodeScanned, onQrResultHandled = onQrResultHandled, - modifier = Modifier.padding(contentPadding) + onOpenGalleryClicked = onOpenGalleryClicked, + modifier = Modifier.padding(contentPadding), + onRecipientFound = { recipient -> + val taskStack = TaskStackBuilder + .create(context) + .addNextIntent(MainActivity.clearTop(context)) + + CommunicationActions.startConversation(context, recipient, null, taskStack) + } ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsViewModel.kt index 8483195714..1630ee32a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameLinkSettingsViewModel.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main +import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.Color @@ -9,6 +10,7 @@ import android.graphics.PorterDuffColorFilter import android.graphics.Rect import android.graphics.RectF import android.graphics.Typeface +import android.net.Uri import android.os.Build import android.text.Layout import android.text.StaticLayout @@ -29,6 +31,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers 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 io.reactivex.rxjava3.subjects.BehaviorSubject import org.signal.core.util.logging.Log @@ -41,7 +44,6 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.profiles.manage.UsernameRepository import org.thoughtcrime.securesms.profiles.manage.UsernameRepository.toLink -import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.NetworkUtil import org.whispersystems.signalservice.api.push.UsernameLinkComponents import java.util.Optional @@ -164,16 +166,7 @@ class UsernameLinkSettingsViewModel : ViewModel() { indeterminateProgress = true ) - disposable += UsernameRepository.fetchUsernameAndAciFromLink(url) - .map { result -> - when (result) { - is UsernameRepository.UsernameLinkConversionResult.Success -> QrScanResult.Success(Recipient.externalUsername(result.aci, result.username.toString())) - is UsernameRepository.UsernameLinkConversionResult.Invalid -> QrScanResult.InvalidData - is UsernameRepository.UsernameLinkConversionResult.NotFound -> QrScanResult.NotFound(result.username?.toString()) - is UsernameRepository.UsernameLinkConversionResult.NetworkError -> QrScanResult.NetworkError - } - } - .subscribeOn(Schedulers.io()) + disposable += UsernameQrScanRepository.lookupUsernameUrl(url) .observeOn(AndroidSchedulers.mainThread()) .subscribe { result -> _state.value = _state.value.copy( @@ -193,6 +186,21 @@ class UsernameLinkSettingsViewModel : ViewModel() { _linkCopiedEvent.value = UUID.randomUUID() } + fun scanImage(context: Context, uri: Uri) { + _state.value = _state.value.copy( + indeterminateProgress = true + ) + + disposable += UsernameQrScanRepository.scanImageUriForQrCode(context, uri) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { result -> + _state.value = _state.value.copy( + qrScanResult = result, + indeterminateProgress = false + ) + } + } + private fun generateQrCodeData(url: Optional): Single> { return Single.fromCallable { url.map { QrCodeData.forData(it, 64) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrImageSelectionActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrImageSelectionActivity.kt new file mode 100644 index 0000000000..773d957e65 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrImageSelectionActivity.kt @@ -0,0 +1,64 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main + +import android.annotation.SuppressLint +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.WindowManager +import androidx.activity.result.contract.ActivityResultContract +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.mediasend.Media +import org.thoughtcrime.securesms.mediasend.v2.gallery.MediaGalleryFragment + +/** + * Select username qr code from gallery instead of using camera. + */ +class UsernameQrImageSelectionActivity : AppCompatActivity(), MediaGalleryFragment.Callbacks { + + override fun attachBaseContext(newBase: Context) { + delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES + super.attachBaseContext(newBase) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN) + setContentView(R.layout.username_qr_image_selection_activity) + } + + @SuppressLint("LogTagInlined") + override fun onMediaSelected(media: Media) { + setResult(RESULT_OK, Intent().setData(media.uri)) + finish() + } + + override fun onToolbarNavigationClicked() { + setResult(RESULT_CANCELED) + finish() + } + + override fun isCameraEnabled() = false + override fun isMultiselectEnabled() = false + + class Contract : ActivityResultContract() { + override fun createIntent(context: Context, input: Unit): Intent { + return Intent(context, UsernameQrImageSelectionActivity::class.java) + } + + override fun parseResult(resultCode: Int, intent: Intent?): Uri? { + return if (resultCode == RESULT_OK) { + intent?.data + } else { + null + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanRepository.kt new file mode 100644 index 0000000000..a71a72f382 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanRepository.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main + +import android.content.Context +import android.net.Uri +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DecodeFormat +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.kotlin.plusAssign +import io.reactivex.rxjava3.schedulers.Schedulers +import org.signal.core.util.toOptional +import org.signal.qr.QrProcessor +import org.thoughtcrime.securesms.profiles.manage.UsernameRepository +import org.thoughtcrime.securesms.recipients.Recipient + +/** + * A collection of functions to help with scanning QR codes for usernames. + */ +object UsernameQrScanRepository { + + /** + * Given a URL, will attempt to lookup the username, coercing it to a standard set of [QrScanResult]s. + */ + fun lookupUsernameUrl(url: String): Single { + return UsernameRepository.fetchUsernameAndAciFromLink(url) + .map { result -> + when (result) { + is UsernameRepository.UsernameLinkConversionResult.Success -> QrScanResult.Success(Recipient.externalUsername(result.aci, result.username.toString())) + is UsernameRepository.UsernameLinkConversionResult.Invalid -> QrScanResult.InvalidData + is UsernameRepository.UsernameLinkConversionResult.NotFound -> QrScanResult.NotFound(result.username?.toString()) + is UsernameRepository.UsernameLinkConversionResult.NetworkError -> QrScanResult.NetworkError + } + } + .subscribeOn(Schedulers.io()) + } + + /** + * Given a URI pointing to an image that may contain a username QR code, this will attempt to lookup the username, coercing it to a standard set of [QrScanResult]s. + */ + fun scanImageUriForQrCode(context: Context, uri: Uri): Single { + val loadBitmap = Glide.with(context) + .asBitmap() + .format(DecodeFormat.PREFER_ARGB_8888) + .load(uri) + .submit() + + return Single.fromFuture(loadBitmap) + .map { QrProcessor().getScannedData(it).toOptional() } + .flatMap { + if (it.isPresent) { + lookupUsernameUrl(it.get()) + } else { + Single.just(QrScanResult.QrNotFound) + } + } + .subscribeOn(Schedulers.io()) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanScreen.kt index 42052a36e6..16d2e4b1ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScanScreen.kt @@ -1,11 +1,15 @@ package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -15,11 +19,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.drawWithContent import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.PathEffect import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Stroke -import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -27,10 +32,11 @@ import androidx.lifecycle.LifecycleOwner import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import org.signal.core.ui.Dialogs +import org.signal.core.ui.theme.SignalTheme import org.signal.qr.QrScannerView import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.mediasend.camerax.CameraXModelBlocklist -import org.thoughtcrime.securesms.util.CommunicationActions +import org.thoughtcrime.securesms.recipients.Recipient import java.util.concurrent.TimeUnit /** @@ -43,30 +49,39 @@ fun UsernameQrScanScreen( qrScanResult: QrScanResult?, onQrCodeScanned: (String) -> Unit, onQrResultHandled: () -> Unit, + onOpenGalleryClicked: () -> Unit, + onRecipientFound: (Recipient) -> Unit, modifier: Modifier = Modifier ) { val path = remember { Path() } when (qrScanResult) { QrScanResult.InvalidData -> { - QrScanResultDialog(stringResource(R.string.UsernameLinkSettings_qr_result_invalid), onDismiss = onQrResultHandled) + QrScanResultDialog(message = stringResource(R.string.UsernameLinkSettings_qr_result_invalid), onDismiss = onQrResultHandled) } QrScanResult.NetworkError -> { - QrScanResultDialog(stringResource(R.string.UsernameLinkSettings_qr_result_network_error), onDismiss = onQrResultHandled) + QrScanResultDialog(message = stringResource(R.string.UsernameLinkSettings_qr_result_network_error), onDismiss = onQrResultHandled) + } + + QrScanResult.QrNotFound -> { + QrScanResultDialog( + title = stringResource(R.string.UsernameLinkSettings_qr_code_not_found), + message = stringResource(R.string.UsernameLinkSettings_try_scanning_another_image_containing_a_signal_qr_code), + onDismiss = onQrResultHandled + ) } is QrScanResult.NotFound -> { if (qrScanResult.username != null) { - QrScanResultDialog(stringResource(R.string.UsernameLinkSettings_qr_result_not_found, qrScanResult.username), onDismiss = onQrResultHandled) + QrScanResultDialog(message = stringResource(R.string.UsernameLinkSettings_qr_result_not_found, qrScanResult.username), onDismiss = onQrResultHandled) } else { - QrScanResultDialog(stringResource(R.string.UsernameLinkSettings_qr_result_not_found_no_username), onDismiss = onQrResultHandled) + QrScanResultDialog(message = stringResource(R.string.UsernameLinkSettings_qr_result_not_found_no_username), onDismiss = onQrResultHandled) } } is QrScanResult.Success -> { - CommunicationActions.startConversation(LocalContext.current, qrScanResult.recipient, null) - onQrResultHandled() + onRecipientFound(qrScanResult.recipient) } null -> {} @@ -77,25 +92,46 @@ fun UsernameQrScanScreen( .fillMaxWidth() .fillMaxHeight() ) { - AndroidView( - factory = { context -> - val view = QrScannerView(context) - disposables += view.qrData.throttleFirst(3000, TimeUnit.MILLISECONDS).subscribe { data -> - onQrCodeScanned(data) - } - view - }, - update = { view -> - view.start(lifecycleOwner = lifecycleOwner, forceLegacy = CameraXModelBlocklist.isBlocklisted()) - }, + Box( modifier = Modifier .fillMaxWidth() .weight(1f, true) - .drawWithContent { - drawContent() - drawQrCrosshair(path) - } - ) + ) { + AndroidView( + factory = { context -> + val view = QrScannerView(context) + disposables += view.qrData.throttleFirst(3000, TimeUnit.MILLISECONDS).subscribe { data -> + onQrCodeScanned(data) + } + view + }, + update = { view -> + view.start(lifecycleOwner = lifecycleOwner, forceLegacy = CameraXModelBlocklist.isBlocklisted()) + }, + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight() + .drawWithContent { + drawContent() + drawQrCrosshair(path) + } + ) + + FloatingActionButton( + shape = CircleShape, + containerColor = SignalTheme.colors.colorSurface1, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 24.dp), + onClick = onOpenGalleryClicked + ) { + Image( + painter = painterResource(id = R.drawable.symbol_album_24), + contentDescription = null, + colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface) + ) + } + } Row( modifier = Modifier @@ -114,8 +150,9 @@ fun UsernameQrScanScreen( } @Composable -private fun QrScanResultDialog(message: String, onDismiss: () -> Unit) { +private fun QrScanResultDialog(title: String? = null, message: String, onDismiss: () -> Unit) { Dialogs.SimpleMessageDialog( + title = title, message = message, dismiss = stringResource(id = android.R.string.ok), onDismiss = onDismiss diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerActivity.kt new file mode 100644 index 0000000000..ebcc11a95e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerActivity.kt @@ -0,0 +1,167 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +@file:OptIn(ExperimentalPermissionsApi::class) + +package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.widget.Toast +import androidx.activity.compose.setContent +import androidx.activity.result.contract.ActivityResultContract +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +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.lifecycle.LifecycleOwner +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.MultiplePermissionsState +import com.google.accompanist.permissions.rememberMultiplePermissionsState +import io.reactivex.rxjava3.disposables.CompositeDisposable +import org.signal.core.ui.Dialogs +import org.signal.core.ui.theme.SignalTheme +import org.signal.core.util.concurrent.LifecycleDisposable +import org.signal.core.util.getParcelableExtraCompat +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.permissions.PermissionCompat +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.util.DynamicTheme + +/** + * Prompts the user to scan a username QR code. Uses the activity result to communicate the recipient that was found, or null if no valid usernames were scanned. + * See [Contract]. + */ +class UsernameQrScannerActivity : AppCompatActivity() { + + companion object { + private const val KEY_RECIPIENT_ID = "recipient_id" + } + + private val viewModel: UsernameQrScannerViewModel by viewModels() + private val disposables = LifecycleDisposable() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + disposables.bindTo(this) + + val galleryLauncher = registerForActivityResult(UsernameQrImageSelectionActivity.Contract()) { uri -> + if (uri != null) { + viewModel.onQrImageSelected(this, uri) + } + } + + setContent { + val galleryPermissionState: MultiplePermissionsState = rememberMultiplePermissionsState(permissions = PermissionCompat.forImages().toList()) { grants -> + if (grants.values.all { it }) { + galleryLauncher.launch(Unit) + } else { + Toast.makeText(this, R.string.ChatWallpaperPreviewActivity__viewing_your_gallery_requires_the_storage_permission, Toast.LENGTH_SHORT).show() + } + } + + val state by viewModel.state + + SignalTheme(isDarkMode = DynamicTheme.isDarkTheme(LocalContext.current)) { + Content( + lifecycleOwner = this, + diposables = disposables.disposables, + state = state, + galleryPermissionsState = galleryPermissionState, + onQrScanned = { url -> viewModel.onQrScanned(url) }, + onQrResultHandled = { + finish() + }, + onOpenGalleryClicked = { + if (galleryPermissionState.allPermissionsGranted) { + galleryLauncher.launch(Unit) + } else { + galleryPermissionState.launchMultiplePermissionRequest() + } + }, + onRecipientFound = { recipient -> + val intent = Intent().apply { + putExtra(KEY_RECIPIENT_ID, recipient.id) + } + setResult(RESULT_OK, intent) + finish() + }, + onBackNavigationPressed = { + finish() + } + ) + } + } + } + + class Contract : ActivityResultContract() { + override fun createIntent(context: Context, input: Unit): Intent { + return Intent(context, UsernameQrScannerActivity::class.java) + } + + override fun parseResult(resultCode: Int, intent: Intent?): RecipientId? { + return intent?.getParcelableExtraCompat(KEY_RECIPIENT_ID, RecipientId::class.java) + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Content( + lifecycleOwner: LifecycleOwner, + diposables: CompositeDisposable, + state: UsernameQrScannerViewModel.ScannerState, + galleryPermissionsState: MultiplePermissionsState, + onQrScanned: (String) -> Unit, + onQrResultHandled: () -> Unit, + onOpenGalleryClicked: () -> Unit, + onRecipientFound: (Recipient) -> Unit, + onBackNavigationPressed: () -> Unit +) { + Scaffold( + topBar = { + CenterAlignedTopAppBar( + title = {}, + navigationIcon = { + IconButton( + onClick = onBackNavigationPressed + ) { + Icon( + painter = painterResource(R.drawable.symbol_x_24), + contentDescription = stringResource(android.R.string.cancel) + ) + } + } + ) + } + ) { contentPadding -> + UsernameQrScanScreen( + lifecycleOwner = lifecycleOwner, + disposables = diposables, + qrScanResult = state.qrScanResult, + onQrCodeScanned = onQrScanned, + onQrResultHandled = onQrResultHandled, + onOpenGalleryClicked = onOpenGalleryClicked, + onRecipientFound = onRecipientFound, + modifier = Modifier.padding(contentPadding) + ) + + if (state.indeterminateProgress) { + Dialogs.IndeterminateProgressDialog() + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerViewModel.kt new file mode 100644 index 0000000000..26d62a6054 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/usernamelinks/main/UsernameQrScannerViewModel.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.usernamelinks.main + +import android.content.Context +import android.net.Uri +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.disposables.CompositeDisposable +import io.reactivex.rxjava3.kotlin.plusAssign +import io.reactivex.rxjava3.kotlin.subscribeBy + +class UsernameQrScannerViewModel : ViewModel() { + + private val _state = mutableStateOf(ScannerState(qrScanResult = null, indeterminateProgress = false)) + val state: State = _state + + private val disposables = CompositeDisposable() + + fun onQrScanned(url: String) { + _state.value = state.value.copy(indeterminateProgress = true) + + disposables += UsernameQrScanRepository.lookupUsernameUrl(url) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { result -> + _state.value = _state.value.copy( + qrScanResult = result, + indeterminateProgress = false + ) + } + } + + fun onQrImageSelected(context: Context, uri: Uri) { + _state.value = state.value.copy(indeterminateProgress = true) + + disposables += UsernameQrScanRepository.scanImageUriForQrCode(context, uri) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { result -> + _state.value = _state.value.copy( + qrScanResult = result, + indeterminateProgress = false + ) + } + } + + override fun onCleared() { + disposables.clear() + } + + data class ScannerState( + val qrScanResult: QrScanResult?, + val indeterminateProgress: Boolean + ) +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt index 1d65a97ae7..eca392cb32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt @@ -325,15 +325,8 @@ class InternalConversationSettingsFragment : DSLSettingsFragment( return if (capabilities != null) { TextUtils.concat( - colorize("GV1Migration", capabilities.groupsV1MigrationCapability), - ", ", - colorize("AnnouncementGroup", capabilities.announcementGroupCapability), - ", ", - colorize("SenderKey", capabilities.senderKeyCapability), - ", ", - colorize("ChangeNumber", capabilities.changeNumberCapability), - ", ", - colorize("Stories", capabilities.storiesCapability) + colorize("PNP/PNI", capabilities.pnpCapability), + colorize("PaymentActivation", capabilities.paymentActivation) ) } else { "Recipient not found!" diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt index b71ac756ff..ac29c7fbdd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt @@ -2,14 +2,14 @@ package org.thoughtcrime.securesms.components.settings.conversation.preferences import android.content.ClipData import android.content.Context -import android.graphics.drawable.InsetDrawable import android.text.SpannableStringBuilder import android.view.View import android.widget.TextView import android.widget.Toast -import org.signal.core.util.dp +import androidx.core.content.ContextCompat import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.settings.PreferenceModel +import org.thoughtcrime.securesms.fonts.SignalSymbols import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.ServiceUtil @@ -47,7 +47,7 @@ object BioTextPreference { val name = if (recipient.isSelf) { context.getString(R.string.note_to_self) } else { - recipient.getDisplayNameOrUsername(context) + recipient.getDisplayName(context) } if (!recipient.showVerified() && !recipient.isIndividual) { @@ -56,16 +56,34 @@ object BioTextPreference { return SpannableStringBuilder(name).apply { if (recipient.showVerified()) { - SpanUtil.appendCenteredImageSpan(this, ContextUtil.requireDrawable(context, R.drawable.ic_official_28), 28, 28) + SpanUtil.appendSpacer(this, 8) + SpanUtil.appendCenteredImageSpanWithoutSpace(this, ContextUtil.requireDrawable(context, R.drawable.ic_official_28), 28, 28) + } else if (recipient.isSystemContact) { + val systemContactGlyph = SignalSymbols.getSpannedString( + context, + SignalSymbols.Weight.BOLD, + SignalSymbols.Glyph.PERSON_CIRCLE + ).let { + SpanUtil.ofSize(it, 20) + } + + append(" ") + append(systemContactGlyph) } if (recipient.isIndividual && !recipient.isSelf) { - val drawable = ContextUtil.requireDrawable(context, R.drawable.symbol_chevron_right_24_color_on_secondary_container) - drawable.setBounds(0, 0, 24.dp, 24.dp) - - val insetDrawable = InsetDrawable(drawable, 0, 0, 0, 4.dp) - - SpanUtil.appendBottomImageSpan(this, insetDrawable, 24, 28) + val chevronGlyph = SignalSymbols.getSpannedString( + context, + SignalSymbols.Weight.BOLD, + SignalSymbols.Glyph.CHEVRON_RIGHT + ).let { + SpanUtil.ofSize(it, 24) + }.let { + SpanUtil.color(ContextCompat.getColor(context, R.color.signal_colorOutline), it) + } + + append(" ") + append(chevronGlyph) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt index 0bfe4c9525..eeaa57e040 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/RecipientPreference.kt @@ -1,12 +1,16 @@ package org.thoughtcrime.securesms.components.settings.conversation.preferences +import android.text.SpannableStringBuilder import android.view.View import android.widget.TextView +import androidx.core.content.ContextCompat import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.badges.BadgeImageView import org.thoughtcrime.securesms.components.AvatarImageView import org.thoughtcrime.securesms.components.settings.PreferenceModel import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.ContextUtil +import org.thoughtcrime.securesms.util.SpanUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder @@ -56,7 +60,16 @@ object RecipientPreference { name.text = if (model.recipient.isSelf) { context.getString(R.string.Recipient_you) } else { - model.recipient.getDisplayName(context) + if (model.recipient.isSystemContact) { + SpannableStringBuilder(model.recipient.getDisplayName(context)).apply { + val drawable = ContextUtil.requireDrawable(context, R.drawable.symbol_person_circle_24).apply { + setTint(ContextCompat.getColor(context, R.color.signal_colorOnSurface)) + } + SpanUtil.appendCenteredImageSpan(this, drawable, 16, 16) + } + } else { + model.recipient.getDisplayName(context) + } } val aboutText = model.recipient.combinedAboutAndEmoji diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferProgressView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferProgressView.kt index 182779489d..0998e45efb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferProgressView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferProgressView.kt @@ -51,8 +51,8 @@ class TransferProgressView @JvmOverloads constructor( private val progressRect = RectF() private val stopIconRect = RectF() - private val downloadDrawable = ContextCompat.getDrawable(context, R.drawable.ic_arrow_down_24) - private val uploadDrawable = ContextCompat.getDrawable(context, R.drawable.ic_arrow_up_16) + private val downloadDrawable = ContextCompat.getDrawable(context, R.drawable.symbol_arrow_down_24) + private val uploadDrawable = ContextCompat.getDrawable(context, R.drawable.symbol_arrow_up_24) private var progressPercent = 0f private var currentState = State.UNINITIALIZED diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java index 2ff05130c8..229b9b3f2c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/PictureInPictureGestureHelper.java @@ -16,6 +16,7 @@ import androidx.annotation.NonNull; import androidx.core.view.GestureDetectorCompat; +import org.signal.core.util.DimensionUnit; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.TouchInterceptingFrameLayout; @@ -24,9 +25,10 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestureListener { - private static final float DECELERATION_RATE = 0.99f; - private static final Interpolator FLING_INTERPOLATOR = new ViscousFluidInterpolator(); - private static final Interpolator ADJUST_INTERPOLATOR = new AccelerateDecelerateInterpolator(); + private static final float DECELERATION_RATE = 0.99f; + private static final Interpolator FLING_INTERPOLATOR = new ViscousFluidInterpolator(); + private static final Interpolator ADJUST_INTERPOLATOR = new AccelerateDecelerateInterpolator(); + private static final int HORIZONTAL_PARTICIPANTS_CONTAINER_HEIGHT = (int) DimensionUnit.DP.toPixels(36); private final ViewGroup parent; private final View child; @@ -34,7 +36,7 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestu private int pipWidth; private int pipHeight; - private int activePointerId = MotionEvent.INVALID_POINTER_ID; + private int activePointerId = MotionEvent.INVALID_POINTER_ID; private float lastTouchX; private float lastTouchY; private int extraPaddingTop; @@ -45,9 +47,10 @@ public class PictureInPictureGestureHelper extends GestureDetector.SimpleOnGestu private int maximumFlingVelocity; private boolean isLockedToBottomEnd; private Interpolator interpolator; - private Corner currentCornerPosition = Corner.BOTTOM_RIGHT; - private int previousTopBoundary = -1; - private int previousBottomBoundary = -1; + private Corner currentCornerPosition = Corner.BOTTOM_RIGHT; + private int previousTopBoundary = -1; + private int previousBottomBoundary = -1; + private boolean displayBelowVerticalBoundary = false; @SuppressLint("ClickableViewAccessibility") public static PictureInPictureGestureHelper applyTo(@NonNull View child) { @@ -132,9 +135,27 @@ public void setBottomVerticalBoundary(int bottomBoundary) { extraPaddingBottom = parent.getMeasuredHeight() + parent.getTop() - bottomBoundary; + if (displayBelowVerticalBoundary) { + extraPaddingBottom -= (int) DimensionUnit.DP.toPixels(HORIZONTAL_PARTICIPANTS_CONTAINER_HEIGHT); + } + ViewUtil.setBottomMargin(child, extraPaddingBottom + framePadding); } + public void setDisplayBelowVerticalBoundary(boolean displayBelowVerticalBoundary) { + if (this.displayBelowVerticalBoundary == displayBelowVerticalBoundary) { + return; + } + + this.displayBelowVerticalBoundary = displayBelowVerticalBoundary; + + int bottomBoundary = previousBottomBoundary; + + previousBottomBoundary = -1; + + setBottomVerticalBoundary(bottomBoundary); + } + private boolean onGestureFinished(MotionEvent e) { final int pointerIndex = e.findPointerIndex(activePointerId); @@ -301,7 +322,7 @@ private static double distance(Point a, Point b) { * User drag is implemented by translating the view from the current gravity anchor (corner). When the user drags * to a new corner, we need to adjust the translations for the new corner so the animation of translation X/Y to 0 * works correctly. - * + *

* For example, if in bottom right and need to move to top right, we need to calculate a new translation Y since instead * of being translated up from bottom it's translated down from the top. */ 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 e6d33c3d95..4ec64e12ab 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 @@ -53,6 +53,7 @@ import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.events.WebRtcViewModel; +import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.ringrtc.CameraState; @@ -441,7 +442,13 @@ public void updateCallParticipants(@NonNull CallParticipantsViewState callPartic if (state.getGroupCallState().isNotIdle()) { if (state.getCallState() == WebRtcViewModel.State.CALL_PRE_JOIN) { - callLinkWarningCard.setVisibility(callParticipantsViewState.isStartedFromCallLink() ? View.VISIBLE : View.GONE); + if (callParticipantsViewState.isStartedFromCallLink()) { + TextView warningTextView = callLinkWarningCard.get().findViewById(R.id.call_screen_call_link_warning_textview); + warningTextView.setText(SignalStore.phoneNumberPrivacy().isPhoneNumberSharingEnabled() ? R.string.WebRtcCallView__anyone_who_joins_pnp_enabled : R.string.WebRtcCallView__anyone_who_joins_pnp_disabled); + callLinkWarningCard.setVisibility(View.VISIBLE); + } else { + callLinkWarningCard.setVisibility(View.GONE); + } setStatus(state.getPreJoinGroupDescription(getContext())); } else if (state.getCallState() == WebRtcViewModel.State.CALL_CONNECTED && state.isInOutgoingRingingMode()) { callLinkWarningCard.setVisibility(View.GONE); @@ -514,6 +521,8 @@ public void updateLocalCallParticipant(@NonNull WebRtcLocalRenderState state, } } + pictureInPictureGestureHelper.setDisplayBelowVerticalBoundary(false); + switch (state) { case GONE: largeLocalRender.attachBroadcastVideoSink(null); @@ -534,6 +543,7 @@ public void updateLocalCallParticipant(@NonNull WebRtcLocalRenderState state, largeLocalRender.attachBroadcastVideoSink(null); largeLocalRenderFrame.setVisibility(View.GONE); + pictureInPictureGestureHelper.setDisplayBelowVerticalBoundary(true); break; case LARGE: largeLocalRender.attachBroadcastVideoSink(localCallParticipant.getVideoSink()); @@ -835,6 +845,7 @@ private void adjustLayoutPositions(@NonNull LayoutPositions layoutPositions) { previousLayoutPositions = layoutPositions; ConstraintSet constraintSet = new ConstraintSet(); + constraintSet.setForceId(false); constraintSet.clone(this); constraintSet.connect(R.id.call_screen_participants_parent, @@ -868,6 +879,7 @@ private void moveSnackbarAboveParticipantRail(boolean aboveRail) { private void updatePendingParticipantsBottomConstraint(View anchor) { ConstraintSet constraintSet = new ConstraintSet(); + constraintSet.setForceId(false); constraintSet.clone(this); constraintSet.connect(R.id.call_screen_pending_recipients, 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 a8a424e1c2..ed924592c6 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 @@ -52,7 +52,6 @@ import org.signal.core.ui.Rows import org.signal.core.ui.theme.SignalTheme import org.signal.ringrtc.CallLinkState import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.calls.links.SignalCallRow import org.thoughtcrime.securesms.components.AvatarImageView import org.thoughtcrime.securesms.components.webrtc.WebRtcCallViewModel import org.thoughtcrime.securesms.dependencies.ApplicationDependencies @@ -165,8 +164,16 @@ private fun CallInfo( modifier = modifier ) { item { + val text = if (controlAndInfoState.callLink == null) { + stringResource(id = R.string.CallLinkInfoSheet__call_info) + } else if (controlAndInfoState.callLink.state.name.isNotEmpty()) { + controlAndInfoState.callLink.state.name + } else { + stringResource(id = R.string.Recipient_signal_call) + } + Text( - text = stringResource(id = R.string.CallLinkInfoSheet__call_info), + text = text, style = MaterialTheme.typography.titleLarge, modifier = Modifier.padding(bottom = 24.dp) ) @@ -174,8 +181,6 @@ private fun CallInfo( if (controlAndInfoState.callLink != null) { item { - SignalCallRow(callLink = controlAndInfoState.callLink, onJoinClicked = null) - Rows.TextRow( text = stringResource(id = R.string.CallLinkDetailsFragment__share_link), icon = ImageVector.vectorResource(id = R.drawable.symbol_link_24), @@ -224,8 +229,7 @@ private fun CallInfo( } } - var includeAdminControlsDivider = true - if (controlAndInfoState.callLink == null || participantsState.isOngoing()) { + if (!participantsState.inCallLobby || participantsState.isOngoing()) { item { Box( modifier = Modifier @@ -240,8 +244,6 @@ private fun CallInfo( ) } } - } else { - includeAdminControlsDivider = false } if (!participantsState.inCallLobby || participantsState.isOngoing()) { @@ -285,12 +287,16 @@ private fun CallInfo( if (controlAndInfoState.callLink?.credentials?.adminPassBytes != null) { item { - if (includeAdminControlsDivider) { + if (!participantsState.inCallLobby) { Dividers.Default() } Rows.TextRow( - text = stringResource(id = R.string.CallLinkDetailsFragment__add_call_name), + text = if (controlAndInfoState.callLink.state.name.isNotEmpty()) { + stringResource(id = R.string.CallLinkDetailsFragment__edit_call_name) + } else { + stringResource(id = R.string.CallLinkDetailsFragment__add_call_name) + }, onClick = onEditNameClicked ) Rows.ToggleRow( 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 a79bad8fa6..0bb0225e25 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 @@ -393,7 +393,7 @@ class ControlsAndInfoController( controlsAndInfoViewModel.setApproveAllMembers(checked) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy(onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to change restrictions. $it") toastFailure() } @@ -419,7 +419,7 @@ class ControlsAndInfoController( .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onSuccess = { - if (it !is UpdateCallLinkResult.Success) { + if (it !is UpdateCallLinkResult.Update) { Log.w(TAG, "Failed to set name. $it") toastFailure() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java index fc11ee6071..957f4e732d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java @@ -11,6 +11,7 @@ import androidx.annotation.WorkerThread; import org.signal.libsignal.protocol.util.Pair; +import org.thoughtcrime.securesms.contacts.paged.ContactSearchSortOrder; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; @@ -108,15 +109,15 @@ public ContactRepository(@NonNull Context context, @NonNull String noteToSelfTit @WorkerThread public @NonNull Cursor querySignalContacts(@NonNull String query) { - return querySignalContacts(query, true); + return querySignalContacts(new RecipientTable.ContactSearchQuery(query, true, ContactSearchSortOrder.NATURAL)); } @WorkerThread - public @NonNull Cursor querySignalContacts(@NonNull String query, boolean includeSelf) { - Cursor cursor = TextUtils.isEmpty(query) ? recipientTable.getSignalContacts(includeSelf) - : recipientTable.querySignalContacts(query, includeSelf); + public @NonNull Cursor querySignalContacts(@NonNull RecipientTable.ContactSearchQuery contactSearchQuery) { + Cursor cursor = TextUtils.isEmpty(contactSearchQuery.getQuery()) ? recipientTable.getSignalContacts(contactSearchQuery.getIncludeSelf()) + : recipientTable.querySignalContacts(contactSearchQuery); - cursor = handleNoteToSelfQuery(query, includeSelf, cursor); + cursor = handleNoteToSelfQuery(contactSearchQuery.getQuery(), contactSearchQuery.getIncludeSelf(), cursor); return new SearchCursorWrapper(cursor, SEARCH_CURSOR_MAPPERS); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/SelectedContacts.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/SelectedContacts.kt index b4771a9363..243b97f7c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/SelectedContacts.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/SelectedContacts.kt @@ -30,7 +30,7 @@ object SelectedContacts { private val chip: ContactChip = itemView.findViewById(R.id.contact_chip) override fun bind(model: Model) { - chip.text = model.recipient.getShortDisplayNameIncludingUsername(context) + chip.text = model.recipient.getShortDisplayName(context) chip.setContact(model.selectedContact) chip.isCloseIconVisible = true chip.setOnCloseIconClickListener { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt index a8d2118483..1f4109b224 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchAdapter.kt @@ -1,11 +1,13 @@ package org.thoughtcrime.securesms.contacts.paged import android.content.Context +import android.text.SpannableStringBuilder import android.view.View import android.view.ViewGroup import android.widget.CheckBox import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView +import androidx.core.content.ContextCompat import com.google.android.material.button.MaterialButton import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Observable @@ -28,6 +30,8 @@ import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.database.model.StoryViewState import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.ContextUtil +import org.thoughtcrime.securesms.util.SpanUtil import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel @@ -390,19 +394,41 @@ open class ContactSearchAdapter( private val checkbox: CheckBox = itemView.findViewById(R.id.check_box) private val name: FromTextView = itemView.findViewById(R.id.name) private val number: TextView = itemView.findViewById(R.id.number) + private val headerGroup: View = itemView.findViewById(R.id.contact_header) + private val headerText: TextView = itemView.findViewById(R.id.section_header) override fun bind(model: UnknownRecipientModel) { checkbox.visible = displayCheckBox checkbox.isSelected = false - name.setText( - when (model.data.mode) { - ContactSearchConfiguration.NewRowMode.NEW_CALL -> R.string.contact_selection_list__new_call - ContactSearchConfiguration.NewRowMode.NEW_CONVERSATION -> R.string.contact_selection_list__unknown_contact - ContactSearchConfiguration.NewRowMode.BLOCK -> R.string.contact_selection_list__unknown_contact_block - ContactSearchConfiguration.NewRowMode.ADD_TO_GROUP -> R.string.contact_selection_list__unknown_contact_add_to_group - } - ) - number.text = model.data.query + val nameText = when (model.data.mode) { + ContactSearchConfiguration.NewRowMode.NEW_CALL -> R.string.contact_selection_list__new_call + ContactSearchConfiguration.NewRowMode.NEW_CONVERSATION -> -1 + ContactSearchConfiguration.NewRowMode.BLOCK -> R.string.contact_selection_list__unknown_contact_block + ContactSearchConfiguration.NewRowMode.ADD_TO_GROUP -> R.string.contact_selection_list__unknown_contact_add_to_group + } + + if (nameText > 0) { + name.setText(nameText) + number.text = model.data.query + number.visible = true + } else { + name.text = model.data.query + number.visible = false + } + + if (model.data.mode == ContactSearchConfiguration.NewRowMode.NEW_CONVERSATION) { + headerGroup.visible = true + headerText.setText( + if (model.data.sectionKey == ContactSearchConfiguration.SectionKey.PHONE_NUMBER) { + R.string.FindByActivity__find_by_phone_number + } else { + R.string.FindByActivity__find_by_username + } + ) + } else { + headerGroup.visible = false + } + itemView.setOnClickListener { onClick.onClicked(itemView, model.data, false) } @@ -500,7 +526,19 @@ open class ContactSearchAdapter( return } - name.setText(getRecipient(model)) + val recipient = getRecipient(model) + val suffix: CharSequence? = if (recipient.isSystemContact && !recipient.showVerified()) { + SpannableStringBuilder().apply { + val drawable = ContextUtil.requireDrawable(context, R.drawable.symbol_person_circle_24).apply { + setTint(ContextCompat.getColor(context, R.color.signal_colorOnSurface)) + } + SpanUtil.appendCenteredImageSpan(this, drawable, 16, 16) + } + } else { + null + } + name.setText(recipient, suffix) + badge.setBadgeFromRecipient(getRecipient(model)) bindAvatar(model) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt index b9b0861e77..e3006d7e63 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchConfiguration.kt @@ -69,6 +69,8 @@ class ContactSearchConfiguration private constructor( /** * 1:1 Recipients with whom the user has started a conversation. * + * Note that sort order is only respected when returning a query result for signal-only contacts. In all other cases, natural ordering is used. + * * Key: [ContactSearchKey.RecipientSearchKey] * Data: [ContactSearchData.KnownRecipient] * Model: [ContactSearchAdapter.RecipientModel] @@ -78,7 +80,8 @@ class ContactSearchConfiguration private constructor( val transportType: TransportType, override val includeHeader: Boolean, override val expandConfig: ExpandConfig? = null, - val includeLetterHeaders: Boolean = false + val includeLetterHeaders: Boolean = false, + val pushSearchResultsSortOrder: ContactSearchSortOrder = ContactSearchSortOrder.NATURAL ) : Section(SectionKey.INDIVIDUALS) /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt index 6ca89f4ff1..e13e486af6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSource.kt @@ -9,6 +9,7 @@ import org.thoughtcrime.securesms.contacts.paged.collections.ContactSearchIterat import org.thoughtcrime.securesms.contacts.paged.collections.CursorSearchIterator import org.thoughtcrime.securesms.contacts.paged.collections.StoriesSearchCollection import org.thoughtcrime.securesms.database.GroupTable +import org.thoughtcrime.securesms.database.RecipientTable import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode import org.thoughtcrime.securesms.database.model.GroupRecord import org.thoughtcrime.securesms.database.model.ThreadRecord @@ -210,7 +211,10 @@ class ContactSearchPagedDataSource( private fun getNonGroupSearchIterator(section: ContactSearchConfiguration.Section.Individuals, query: String?): ContactSearchIterator { return when (section.transportType) { - ContactSearchConfiguration.TransportType.PUSH -> CursorSearchIterator(wrapRecipientCursor(contactSearchPagedDataSourceRepository.querySignalContacts(query, section.includeSelf))) + ContactSearchConfiguration.TransportType.PUSH -> { + val searchQuery = RecipientTable.ContactSearchQuery(query ?: "", section.includeSelf, section.pushSearchResultsSortOrder) + CursorSearchIterator(wrapRecipientCursor(contactSearchPagedDataSourceRepository.querySignalContacts(searchQuery))) + } ContactSearchConfiguration.TransportType.SMS -> CursorSearchIterator(wrapRecipientCursor(contactSearchPagedDataSourceRepository.queryNonSignalContacts(query))) ContactSearchConfiguration.TransportType.ALL -> CursorSearchIterator(wrapRecipientCursor(contactSearchPagedDataSourceRepository.queryNonGroupContacts(query, section.includeSelf))) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt index daa527e3d3..fc6978783c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/paged/ContactSearchPagedDataSourceRepository.kt @@ -34,8 +34,8 @@ open class ContactSearchPagedDataSourceRepository( .getLatestActiveStorySendTimestamps(System.currentTimeMillis() - activeStoryCutoffDuration) } - open fun querySignalContacts(query: String?, includeSelf: Boolean): Cursor? { - return contactRepository.querySignalContacts(query ?: "", includeSelf) + open fun querySignalContacts(contactsSearchQuery: RecipientTable.ContactSearchQuery): Cursor? { + return contactRepository.querySignalContacts(contactsSearchQuery) } open fun querySignalContactLetterHeaders(query: String?, includeSelf: Boolean, includePush: Boolean, includeSms: Boolean): Map { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt index 7a2ac68bc8..01df117c08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscovery.kt @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.registration.RegistrationUtil import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.Util +import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.util.UuidUtil import java.io.IOException @@ -112,6 +113,19 @@ object ContactDiscovery { } } + /** + * Looks up the PNI/ACI for an E164. Only creates a recipient if the number is in the CDS directory. + * Use sparingly! This will always use up the user's CDS quota. Always prefer other syncing methods for bulk lookups. + * + * Returns a [LookupResult] if the E164 is in the CDS directory, or null if it is not. + * Important: Just because a user is not in the directory does not mean they are not registered. They could have discoverability off. + */ + @Throws(IOException::class) + @WorkerThread + fun lookupE164(e164: String): LookupResult? { + return ContactDiscoveryRefreshV2.lookupE164(e164) + } + @JvmStatic @WorkerThread fun syncRecipientInfoWithSystemContacts(context: Context) { @@ -278,7 +292,7 @@ object ContactDiscovery { /** * Whether or not a session exists with the provided recipient. */ - fun hasSession(id: RecipientId): Boolean { + private fun hasSession(id: RecipientId): Boolean { val recipient = Recipient.resolved(id) if (!recipient.hasServiceId()) { @@ -295,4 +309,10 @@ object ContactDiscovery { val registeredIds: Set, val rewrites: Map ) + + data class LookupResult( + val recipientId: RecipientId, + val pni: ServiceId.PNI, + val aci: ServiceId.ACI? + ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt index b0df28ff49..ae0ea14e64 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryRefreshV2.kt @@ -86,6 +86,42 @@ object ContactDiscoveryRefreshV2 { } } + @Throws(IOException::class) + @WorkerThread + @Synchronized + fun lookupE164(e164: String): ContactDiscovery.LookupResult? { + val response: CdsiV2Service.Response = try { + ApplicationDependencies.getSignalServiceAccountManager().getRegisteredUsersWithCdsi( + emptySet(), + setOf(e164), + SignalDatabase.recipients.getAllServiceIdProfileKeyPairs(), + Optional.empty(), + BuildConfig.CDSI_MRENCLAVE, + 10_000, + if (FeatureFlags.useLibsignalNetForCdsiLookup()) BuildConfig.LIBSIGNAL_NET_ENV else null + ) { + Log.i(TAG, "Ignoring token for one-off lookup.") + } + } catch (e: CdsiResourceExhaustedException) { + Log.w(TAG, "CDS resource exhausted! Can try again in ${e.retryAfterSeconds} seconds.") + SignalStore.misc().cdsBlockedUtil = System.currentTimeMillis() + e.retryAfterSeconds.seconds.inWholeMilliseconds + throw e + } catch (e: CdsiInvalidTokenException) { + Log.w(TAG, "We did not provide a token, but still got a token error! Unexpected, but ignoring.") + throw e + } + + return response.results[e164]?.let { item -> + val id = SignalDatabase.recipients.processIndividualCdsLookup(e164 = e164, aci = item.aci.orElse(null), pni = item.pni) + + ContactDiscovery.LookupResult( + recipientId = id, + pni = item.pni, + aci = item.aci?.orElse(null) + ) + } + } + @Throws(IOException::class) private fun refreshInternal( recipientE164s: Set, @@ -126,7 +162,8 @@ object ContactDiscoveryRefreshV2 { SignalDatabase.recipients.getAllServiceIdProfileKeyPairs(), Optional.ofNullable(token), BuildConfig.CDSI_MRENCLAVE, - timeoutMs + timeoutMs, + if (FeatureFlags.useLibsignalNetForCdsiLookup()) BuildConfig.LIBSIGNAL_NET_ENV else null ) { tokenToSave -> stopwatch.split("network-pre-token") if (!isPartialRefresh) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java index 848a7d65e9..470f21d09a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationHeaderView.java @@ -76,7 +76,7 @@ public void setAvatar(@NonNull RequestManager requestManager, @Nullable Recipien } public String setTitle(@NonNull Recipient recipient) { - SpannableStringBuilder title = new SpannableStringBuilder(recipient.isSelf() ? getContext().getString(R.string.note_to_self) : recipient.getDisplayNameOrUsername(getContext())); + SpannableStringBuilder title = new SpannableStringBuilder(recipient.isSelf() ? getContext().getString(R.string.note_to_self) : recipient.getDisplayName(getContext())); if (recipient.showVerified()) { SpanUtil.appendCenteredImageSpan(title, ContextUtil.requireDrawable(getContext(), R.drawable.ic_official_28), 28, 28); } @@ -177,12 +177,12 @@ private void updateOutlineVisibility() { private @NonNull CharSequence prependIcon(@NonNull CharSequence input, @DrawableRes int iconRes) { Drawable drawable = ContextCompat.getDrawable(getContext(), iconRes); Preconditions.checkNotNull(drawable); - drawable.setBounds(0, 0, (int) DimensionUnit.DP.toPixels(20), (int) DimensionUnit.DP.toPixels(20)); + drawable.setBounds(0, 0, (int) DimensionUnit.SP.toPixels(20), (int) DimensionUnit.SP.toPixels(20)); drawable.setColorFilter(ContextCompat.getColor(getContext(), R.color.signal_colorOnSurface), PorterDuff.Mode.SRC_ATOP); return new SpannableStringBuilder() .append(SpanUtil.buildCenteredImageSpan(drawable)) - .append(SpanUtil.space(8, DimensionUnit.DP)) + .append(SpanUtil.space(8, DimensionUnit.SP)) .append(input); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java index 076d9d1ad7..9f719c2b3a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java @@ -207,7 +207,7 @@ private void setSelfTitle() { } private void setIndividualRecipientTitle(@NonNull Recipient recipient) { - final String displayName = recipient.getDisplayNameOrUsername(getContext()); + final String displayName = recipient.getDisplayName(getContext()); this.title.setText(displayName); this.subtitle.setText(null); updateSubtitleVisibility(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index f704319470..0137563f3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -2827,11 +2827,8 @@ class ConversationFragment : } override fun onInviteToSignalClicked() { - val recipient = viewModel.recipientSnapshot ?: return InviteActions.inviteUserToSignal( requireContext(), - recipient, - binding.conversationInputPanel.embeddedTextEditor::appendInvite, this@ConversationFragment::startActivity ) } @@ -3267,8 +3264,6 @@ class ConversationFragment : InviteActions.inviteUserToSignal( context = requireContext(), - recipient = recipient, - appendInviteToComposer = composeText::appendInvite, launchIntent = this@ConversationFragment::startActivity ) } @@ -3681,8 +3676,6 @@ class ConversationFragment : override fun onInviteToSignal(recipient: Recipient) { InviteActions.inviteUserToSignal( context = requireContext(), - recipient = recipient, - appendInviteToComposer = null, launchIntent = this@ConversationFragment::startActivity ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 4832fe438b..856077a09c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -238,7 +238,7 @@ class ConversationViewModel( messageRequestState = messageRequestRepository.getMessageRequestState(recipient, threadId), groupRecord = groupRecord.orNull(), isClientExpired = SignalStore.misc().isClientDeprecated, - isUnauthorized = TextSecurePreferences.isUnauthorizedReceived(ApplicationDependencies.getApplication()) + isUnauthorized = TextSecurePreferences.isUnauthorizedReceived(ApplicationDependencies.getApplication()), ) }.doOnNext { hasMessageRequestStateSubject.onNext(it.messageRequestState) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt index 678629a799..57dc922928 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/InputReadyState.kt @@ -18,7 +18,7 @@ class InputReadyState( val messageRequestState: MessageRequestState, val groupRecord: GroupRecord?, val isClientExpired: Boolean, - val isUnauthorized: Boolean + val isUnauthorized: Boolean, ) { private val selfMemberLevel: GroupTable.MemberLevel? = groupRecord?.memberLevel(Recipient.self()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 35554c5c3a..7fae8c4364 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -19,6 +19,7 @@ import android.content.Context; import android.graphics.Rect; import android.graphics.Typeface; +import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; @@ -78,6 +79,7 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.search.MessageResult; +import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.MediaUtil; @@ -211,7 +213,7 @@ public void bind(@NonNull LifecycleOwner lifecycleOwner, @NonNull Set typingThreads, @NonNull ConversationSet selectedConversations) { - bindThread(lifecycleOwner, thread, glideRequests, locale, typingThreads, selectedConversations, null); + bindThread(lifecycleOwner, thread, glideRequests, locale, typingThreads, selectedConversations, null, false); } public void bindThread(@NonNull LifecycleOwner lifecycleOwner, @@ -220,7 +222,8 @@ public void bindThread(@NonNull LifecycleOwner lifecycleOwner, @NonNull Locale locale, @NonNull Set typingThreads, @NonNull ConversationSet selectedConversations, - @Nullable String highlightSubstring) + @Nullable String highlightSubstring, + boolean appendSystemContactIcon) { this.threadId = thread.getThreadId(); this.requestManager = requestManager; @@ -234,12 +237,20 @@ public void bindThread(@NonNull LifecycleOwner lifecycleOwner, observeDisplayBody(null, null); joinMembersDisposable.dispose(); + SpannableStringBuilder suffix = null; + if (appendSystemContactIcon && recipient.get().isSystemContact() && !recipient.get().showVerified()) { + suffix = new SpannableStringBuilder(); + Drawable drawable = ContextUtil.requireDrawable(getContext(), R.drawable.symbol_person_circle_24); + drawable.setTint(ContextCompat.getColor(getContext(), R.color.signal_colorOnSurface)); + SpanUtil.appendCenteredImageSpan(suffix, drawable, 16, 16); + } + if (highlightSubstring != null) { String name = recipient.get().isSelf() ? getContext().getString(R.string.note_to_self) : recipient.get().getDisplayName(getContext()); - this.fromView.setText(recipient.get(), SearchUtil.getHighlightedSpan(locale, searchStyleFactory, name, highlightSubstring, SearchUtil.MATCH_ALL), true, null); + this.fromView.setText(recipient.get(), SearchUtil.getHighlightedSpan(locale, searchStyleFactory, name, highlightSubstring, SearchUtil.MATCH_ALL), suffix); } else { - this.fromView.setText(recipient.get(), false); + this.fromView.setText(recipient.get(), suffix); } this.typingThreads = typingThreads; @@ -299,7 +310,7 @@ public void bindMessage(@NonNull LifecycleOwner lifecycleOwner, joinMembersDisposable.dispose(); setSubjectViewText(null); - fromView.setText(recipient.get(), recipient.get().getDisplayNameOrUsername(getContext()), false, null, false); + fromView.setText(recipient.get(), recipient.get().getDisplayName(getContext()), null, false); setSubjectViewText(SearchUtil.getHighlightedSpan(locale, searchStyleFactory, messageResult.getBodySnippet(), highlightSubstring, SearchUtil.MATCH_ALL)); updateDateView = () -> dateView.setText(DateUtils.getBriefRelativeTimeSpanString(getContext(), locale, messageResult.getReceivedTimestampMs())); @@ -332,9 +343,15 @@ public void bindGroupWithMembers(@NonNull LifecycleOwner lifecycleOwner, setSubjectViewText(SearchUtil.getHighlightedSpan(locale, searchStyleFactory, joined, highlightSubstring, SearchUtil.MATCH_ALL)); }); - fromView.setText(recipient.get(), false); + fromView.setText(recipient.get()); - updateDateView = () -> dateView.setText(DateUtils.getBriefRelativeTimeSpanString(getContext(), locale, groupWithMembers.getDate())); + updateDateView = () -> { + if (groupWithMembers.getDate() > 0) { + dateView.setText(DateUtils.getBriefRelativeTimeSpanString(getContext(), locale, groupWithMembers.getDate())); + } else { + dateView.setText(""); + } + }; updateDateView.run(); archivedView.setVisibility(GONE); unreadIndicator.setVisibility(GONE); @@ -548,9 +565,9 @@ private void onRecipientChanged(@NonNull Recipient recipient) { } else { name = recipient.getDisplayName(getContext()); } - fromView.setText(recipient, SearchUtil.getHighlightedSpan(locale, searchStyleFactory, new SpannableString(name), highlightSubstring, SearchUtil.MATCH_ALL), true, null, thread != null); + fromView.setText(recipient, SearchUtil.getHighlightedSpan(locale, searchStyleFactory, new SpannableString(name), highlightSubstring, SearchUtil.MATCH_ALL), null, thread != null); } else { - fromView.setText(recipient, false); + fromView.setText(recipient); } contactPhotoImage.setAvatar(requestManager, recipient, !batchMode, false); setBadgeFromRecipient(recipient); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.kt index 9a23eeb37e..17c48c4169 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.kt @@ -120,7 +120,8 @@ class ConversationListSearchAdapter( Locale.getDefault(), emptySet(), ConversationSet(), - model.thread.query + model.thread.query, + true ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt index 6bec116e8d..71a64628ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentTable.kt @@ -948,7 +948,8 @@ class AttachmentTable( audioHash = if (MediaUtil.isAudioType(contentType)) AudioHash.parseOrNull(jsonObject.getString(BLUR_HASH)) else null, transformProperties = TransformProperties.parse(jsonObject.getString(TRANSFORM_PROPERTIES)), displayOrder = jsonObject.getInt(DISPLAY_ORDER), - uploadTimestamp = jsonObject.getLong(UPLOAD_TIMESTAMP) + uploadTimestamp = jsonObject.getLong(UPLOAD_TIMESTAMP), + dataHash = jsonObject.getString(DATA_HASH) ) } } @@ -1317,7 +1318,7 @@ class AttachmentTable( useTemplateUpload = possibleTemplate.uploadTimestamp > attachment.uploadTimestamp && possibleTemplate.transferState == TRANSFER_PROGRESS_DONE && possibleTemplate.transformProperties?.shouldSkipTransform() == true && possibleTemplate.remoteDigest != null && - attachment.transformProperties?.videoEdited == false && possibleTemplate.transformProperties?.sentMediaQuality == attachment.transformProperties?.sentMediaQuality + attachment.transformProperties?.videoEdited == false && possibleTemplate.transformProperties.sentMediaQuality == attachment.transformProperties.sentMediaQuality if (useTemplateUpload) { Log.i(TAG, "Found a duplicate attachment upon insertion. Using it as a template.") @@ -1449,7 +1450,8 @@ class AttachmentTable( audioHash = if (MediaUtil.isAudioType(contentType)) AudioHash.parseOrNull(cursor.requireString(BLUR_HASH)) else null, transformProperties = TransformProperties.parse(cursor.requireString(TRANSFORM_PROPERTIES)), displayOrder = cursor.requireInt(DISPLAY_ORDER), - uploadTimestamp = cursor.requireLong(UPLOAD_TIMESTAMP) + uploadTimestamp = cursor.requireLong(UPLOAD_TIMESTAMP), + dataHash = cursor.requireString(DATA_HASH) ) } @@ -1483,6 +1485,18 @@ class AttachmentTable( } } + fun debugGetLatestAttachments(): List { + return readableDatabase + .select(*PROJECTION) + .from(TABLE_NAME) + .where("$TRANSFER_STATE == $TRANSFER_PROGRESS_DONE AND $REMOTE_LOCATION IS NOT NULL AND $DATA_HASH IS NOT NULL") + .orderBy("$ID DESC") + .limit(30) + .run() + .readToList { it.readAttachments() } + .flatten() + } + @VisibleForTesting class DataInfo( val file: File, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt index 2b9599f787..1d1f685622 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallLinkTable.kt @@ -231,6 +231,37 @@ class CallLinkTable(context: Context, databaseHelper: SignalDatabase) : Database } } + /** + * Puts the call link into the "revoked" state which will hide it from the UI and + * delete it after a few days. + */ + fun markRevoked( + roomId: CallLinkRoomId + ) { + writableDatabase.withinTransaction { db -> + db.update(TABLE_NAME) + .values("$REVOKED" to true) + .where("$ROOM_ID", roomId) + .run() + + SignalDatabase.calls.updateAdHocCallEventDeletionTimestamps() + } + } + + /** + * Deletes the call link. This should only happen *after* we send out a sync message + * or receive a sync message which deletes the corresponding link. + */ + fun deleteCallLink( + roomId: CallLinkRoomId + ) { + writableDatabase.withinTransaction { db -> + db.delete(TABLE_NAME) + .where("$ROOM_ID", roomId) + .run() + } + } + fun deleteNonAdminCallLinks(roomIds: Set) { val queries = SqlUtil.buildCollectionQuery(ROOM_ID, roomIds) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt index 8c135a9fdf..85e49b1595 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CallTable.kt @@ -7,6 +7,7 @@ import androidx.core.content.contentValuesOf import org.signal.core.util.IntSerializer import org.signal.core.util.Serializer import org.signal.core.util.SqlUtil +import org.signal.core.util.count import org.signal.core.util.delete import org.signal.core.util.deleteAll import org.signal.core.util.flatten @@ -60,9 +61,10 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl const val TIMESTAMP = "timestamp" const val RINGER = "ringer" const val DELETION_TIMESTAMP = "deletion_timestamp" + const val READ = "read" //language=sql - val CREATE_TABLE = """ + const val CREATE_TABLE = """ CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, $CALL_ID INTEGER NOT NULL, @@ -74,6 +76,7 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl $TIMESTAMP INTEGER NOT NULL, $RINGER INTEGER DEFAULT NULL, $DELETION_TIMESTAMP INTEGER DEFAULT 0, + $READ INTEGER DEFAULT 1, UNIQUE ($CALL_ID, $PEER) ON CONFLICT FAIL ) """ @@ -85,14 +88,31 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl ) } + fun markAllCallEventsRead(timestamp: Long = Long.MAX_VALUE) { + writableDatabase.update(TABLE_NAME) + .values(READ to ReadState.serialize(ReadState.READ)) + .where("$TIMESTAMP <= ?", timestamp) + .run() + + notifyConversationListListeners() + } + + fun getUnreadMissedCallCount(): Long { + return readableDatabase + .count() + .from(TABLE_NAME) + .where("$EVENT = ? AND $READ = ?", Event.serialize(Event.MISSED), ReadState.serialize(ReadState.UNREAD)) + .run() + .readToSingleLong() + } + fun insertOneToOneCall(callId: Long, timestamp: Long, peer: RecipientId, type: Type, direction: Direction, event: Event) { val messageType: Long = Call.getMessageType(type, direction, event) val unread = MessageTypes.isMissedCall(messageType) val expiresIn = Recipient.resolved(peer).expiresInMillis writableDatabase.withinTransaction { - val result = SignalDatabase.messages.insertCallLog(peer, messageType, timestamp, direction == Direction.OUTGOING, expiresIn, unread) - + val result = SignalDatabase.messages.insertCallLog(peer, messageType, timestamp, direction == Direction.OUTGOING, expiresIn) val values = contentValuesOf( CALL_ID to callId, MESSAGE_ID to result.messageId, @@ -100,7 +120,8 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl TYPE to Type.serialize(type), DIRECTION to Direction.serialize(direction), EVENT to Event.serialize(event), - TIMESTAMP to timestamp + TIMESTAMP to timestamp, + READ to ReadState.serialize(ReadState.UNREAD) ) writableDatabase.insert(TABLE_NAME, null, values) @@ -121,7 +142,10 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl val call = writableDatabase.withinTransaction { writableDatabase .update(TABLE_NAME) - .values(EVENT to Event.serialize(event)) + .values( + EVENT to Event.serialize(event), + READ to ReadState.serialize(ReadState.UNREAD) + ) .where("$CALL_ID = ?", callId) .run() @@ -1380,6 +1404,21 @@ class CallTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTabl } } + enum class ReadState(private val code: Int) { + UNREAD(0), + READ(1); + + companion object Serializer : IntSerializer { + override fun serialize(data: ReadState): Int { + return data.code + } + + override fun deserialize(data: Int): ReadState { + return ReadState.values().first { it.code == data } + } + } + } + enum class Event(private val code: Int) { /** * 1:1 Calls only. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt index bec3b247dc..74141ae3ea 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KyberPreKeyTable.kt @@ -36,7 +36,7 @@ class KyberPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Datab CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, $ACCOUNT_ID TEXT NOT NULL, - $KEY_ID INTEGER UNIQUE NOT NULL, + $KEY_ID INTEGER NOT NULL, $TIMESTAMP INTEGER NOT NULL, $LAST_RESORT INTEGER NOT NULL, $SERIALIZED BLOB NOT NULL, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.kt index cc137bcbea..65d73b54d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MediaTable.kt @@ -48,7 +48,8 @@ class MediaTable internal constructor(context: Context?, databaseHelper: SignalD ${AttachmentTable.TABLE_NAME}.${AttachmentTable.CAPTION}, ${AttachmentTable.TABLE_NAME}.${AttachmentTable.UPLOAD_TIMESTAMP}, ${AttachmentTable.TABLE_NAME}.${AttachmentTable.REMOTE_INCREMENTAL_DIGEST}, - ${AttachmentTable.TABLE_NAME}.${AttachmentTable.REMOTE_INCREMENTAL_DIGEST_CHUNK_SIZE}, + ${AttachmentTable.TABLE_NAME}.${AttachmentTable.REMOTE_INCREMENTAL_DIGEST_CHUNK_SIZE}, + ${AttachmentTable.TABLE_NAME}.${AttachmentTable.DATA_HASH}, ${MessageTable.TABLE_NAME}.${MessageTable.TYPE}, ${MessageTable.TABLE_NAME}.${MessageTable.DATE_SENT}, ${MessageTable.TABLE_NAME}.${MessageTable.DATE_RECEIVED}, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 03898c4837..60dbba519d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -23,7 +23,6 @@ import android.text.SpannableString import android.text.TextUtils import androidx.annotation.VisibleForTesting import androidx.core.content.contentValuesOf -import com.google.android.mms.pdu.NotificationInd import com.google.android.mms.pdu.PduHeaders import org.json.JSONArray import org.json.JSONException @@ -663,7 +662,11 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat threads.update(threadId, true) notifyConversationListeners(threadId) - return InsertResult(messageId, threadId) + return InsertResult( + messageId = messageId, + threadId = threadId, + threadWasNewlyCreated = false + ) } fun updateBundleMessageBody(messageId: Long, body: String): InsertResult { @@ -770,9 +773,10 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return results } - fun insertCallLog(recipientId: RecipientId, type: Long, timestamp: Long, outgoing: Boolean, expiresIn: Long, unread: Boolean): InsertResult { + fun insertCallLog(recipientId: RecipientId, type: Long, timestamp: Long, outgoing: Boolean, expiresIn: Long): InsertResult { val recipient = Recipient.resolved(recipientId) - val threadId = threads.getOrCreateThreadIdFor(recipient) + val threadIdResult = threads.getOrCreateThreadIdResultFor(recipient.id, recipient.isGroup) + val threadId = threadIdResult.threadId val values = contentValuesOf( FROM_RECIPIENT_ID to if (outgoing) Recipient.self().id.serialize() else recipientId.serialize(), @@ -780,7 +784,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat TO_RECIPIENT_ID to if (outgoing) recipientId.serialize() else Recipient.self().id.serialize(), DATE_RECEIVED to System.currentTimeMillis(), DATE_SENT to timestamp, - READ to if (unread) 0 else 1, + READ to 1, TYPE to type, EXPIRES_IN to expiresIn, THREAD_ID to threadId @@ -788,34 +792,30 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val messageId = writableDatabase.insert(TABLE_NAME, null, values) - if (unread) { - threads.incrementUnread(threadId, 1, 0) - } - threads.update(threadId, true) notifyConversationListeners(threadId) TrimThreadJob.enqueueAsync(threadId) - return InsertResult(messageId, threadId) + return InsertResult( + messageId = messageId, + threadId = threadId, + threadWasNewlyCreated = threadIdResult.newlyCreated + ) } - fun updateCallLog(messageId: Long, type: Long, unread: Boolean) { + fun updateCallLog(messageId: Long, type: Long) { writableDatabase .update(TABLE_NAME) .values( TYPE to type, - READ to if (unread) 0 else 1 + READ to 1 ) .where("$ID = ?", messageId) .run() val threadId = getThreadIdForMessage(messageId) - if (unread) { - threads.incrementUnread(threadId, 1, 0) - } - threads.update(threadId, true) notifyConversationListeners(threadId) @@ -1006,8 +1006,10 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat fun insertProfileNameChangeMessages(recipient: Recipient, newProfileName: String, previousProfileName: String) { writableDatabase.withinTransaction { db -> val groupRecords = groups.getGroupsContainingMember(recipient.id, false) - val profileChangeDetails = ProfileChangeDetails(profileNameChange = ProfileChangeDetails.StringChange(previous = previousProfileName, newValue = newProfileName)) - .encode() + + val extras = MessageExtras( + profileChangeDetails = ProfileChangeDetails(profileNameChange = ProfileChangeDetails.StringChange(previous = previousProfileName, newValue = newProfileName)) + ) val threadIdsToUpdate = mutableListOf().apply { add(threads.getThreadIdFor(recipient.id)) @@ -1030,7 +1032,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat READ to 1, TYPE to MessageTypes.PROFILE_CHANGE_TYPE, THREAD_ID to threadId, - BODY to Base64.encodeWithPadding(profileChangeDetails) + MESSAGE_EXTRAS to extras.encode() ) db.insert(TABLE_NAME, null, values) notifyConversationListeners(threadId) @@ -1039,6 +1041,33 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } } + fun insertLearnedProfileNameChangeMessage(recipient: Recipient, previousDisplayName: String) { + val threadId: Long? = SignalDatabase.threads.getThreadIdFor(recipient.id) + + if (threadId != null) { + val extras = MessageExtras( + profileChangeDetails = ProfileChangeDetails(learnedProfileName = ProfileChangeDetails.StringChange(previous = previousDisplayName)) + ) + + writableDatabase + .insertInto(TABLE_NAME) + .values( + FROM_RECIPIENT_ID to recipient.id.serialize(), + FROM_DEVICE_ID to 1, + TO_RECIPIENT_ID to Recipient.self().id.serialize(), + DATE_RECEIVED to System.currentTimeMillis(), + DATE_SENT to System.currentTimeMillis(), + READ to 1, + TYPE to MessageTypes.PROFILE_CHANGE_TYPE, + THREAD_ID to threadId, + MESSAGE_EXTRAS to extras.encode() + ) + .run() + + notifyConversationListeners(threadId) + } + } + fun insertGroupV1MigrationEvents(recipientId: RecipientId, threadId: Long, membershipChange: GroupMigrationMembershipChange) { insertGroupV1MigrationNotification(recipientId, threadId) if (!membershipChange.isEmpty) { @@ -1280,7 +1309,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return MmsReader(rawQueryWithAttachments(query, args, false, limit.toLong())) } - fun getUnreadMisedCallCount(): Long { + fun getUnreadMissedCallCount(): Long { return readableDatabase .select("COUNT(*)") .from(TABLE_NAME) @@ -1672,7 +1701,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val query = meaningfulQuery and isNotJoinedType val hasMeaningfulMessages = readableDatabase - .exists(TABLE_NAME) + .exists("$TABLE_NAME INDEXED BY $INDEX_THREAD_STORY_SCHEDULED_DATE_LATEST_REVISION_ID") .where(query.where, query.whereArgs) .run() @@ -1686,7 +1715,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val query = buildMeaningfulMessagesQuery(threadId) return readableDatabase - .exists(TABLE_NAME) + .exists("$TABLE_NAME INDEXED BY $INDEX_THREAD_STORY_SCHEDULED_DATE_LATEST_REVISION_ID") .where(query.where, query.whereArgs) .run() } @@ -1703,7 +1732,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return readableDatabase .select(ID, HAS_DELIVERY_RECEIPT, HAS_READ_RECEIPT, TYPE) - .from(TABLE_NAME) + .from("$TABLE_NAME INDEXED BY $INDEX_THREAD_STORY_SCHEDULED_DATE_LATEST_REVISION_ID") .where(query.where, query.whereArgs) .orderBy("$DATE_RECEIVED DESC") .limit(1) @@ -1727,7 +1756,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat private fun buildMeaningfulMessagesQuery(threadId: Long): SqlUtil.Query { val query = """ - $THREAD_ID = ? AND + $THREAD_ID = $threadId AND $STORY_TYPE = 0 AND $LATEST_REVISION_ID IS NULL AND $PARENT_STORY_ID <= 0 AND @@ -1743,7 +1772,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat ) """ - return SqlUtil.buildQuery(query, threadId) + return SqlUtil.buildQuery(query) } fun setNetworkFailures(messageId: Long, failures: Set?) { @@ -1763,29 +1792,18 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat .readToSingleLong(-1) } - private fun getThreadIdFor(retrieved: IncomingMessage): Long { + private fun getThreadIdFor(retrieved: IncomingMessage): ThreadTable.ThreadIdResult { return if (retrieved.groupId != null) { val groupRecipientId = recipients.getOrInsertFromPossiblyMigratedGroupId(retrieved.groupId) val groupRecipients = Recipient.resolved(groupRecipientId) - threads.getOrCreateThreadIdFor(groupRecipients) + threads.getOrCreateThreadIdResultFor(groupRecipients.id, isGroup = true) } else { val sender = Recipient.resolved(retrieved.from) - threads.getOrCreateThreadIdFor(sender) - } - } - - private fun getThreadIdFor(notification: NotificationInd): Long { - val fromString = if (notification.from != null && notification.from.textString != null) { - Util.toIsoString(notification.from.textString) - } else { - "" + threads.getOrCreateThreadIdResultFor(sender.id, isGroup = false) } - - val recipient = Recipient.external(context, fromString) - return threads.getOrCreateThreadIdFor(recipient) } - fun rawQueryWithAttachments(where: String, arguments: Array?, reverse: Boolean = false, limit: Long = 0): Cursor { + private fun rawQueryWithAttachments(where: String, arguments: Array?, reverse: Boolean = false, limit: Long = 0): Cursor { return rawQueryWithAttachments(MMS_PROJECTION_WITH_ATTACHMENTS, where, arguments, reverse, limit) } @@ -2312,6 +2330,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val parentStoryId = ParentStoryId.deserialize(cursor.requireLong(PARENT_STORY_ID)) val messageRangesData = cursor.requireBlob(MESSAGE_RANGES) val scheduledDate = cursor.requireLong(SCHEDULED_DATE) + val messageExtrasBytes = cursor.requireBlob(MESSAGE_EXTRAS) + val messageExtras = if (messageExtrasBytes != null) MessageExtras.ADAPTER.decode(messageExtrasBytes) else null val quoteId = cursor.requireLong(QUOTE_ID) val quoteAuthor = cursor.requireLong(QUOTE_AUTHOR) @@ -2364,7 +2384,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat if (body != null && (MessageTypes.isGroupQuit(outboxType) || MessageTypes.isGroupUpdate(outboxType))) { OutgoingMessage.groupUpdateMessage( threadRecipient = threadRecipient, - groupContext = MessageGroupContext(body, MessageTypes.isGroupV2(outboxType)), + groupContext = if (messageExtras != null) MessageGroupContext(messageExtras, MessageTypes.isGroupV2(outboxType)) else MessageGroupContext(body, MessageTypes.isGroupV2(outboxType)), avatar = attachments, sentTimeMillis = timestamp, expiresIn = 0, @@ -2468,11 +2488,12 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat ): Optional { val type = retrieved.toMessageType() - val threadId = if (candidateThreadId == -1L || retrieved.isGroupMessage) { + val threadIdResult = if (candidateThreadId == -1L || retrieved.isGroupMessage) { getThreadIdFor(retrieved) } else { - candidateThreadId + ThreadTable.ThreadIdResult(threadId = candidateThreadId, newlyCreated = false) } + val threadId = threadIdResult.threadId if (retrieved.type == MessageType.GROUP_UPDATE && retrieved.groupContext?.let { GroupV2UpdateMessageUtil.isJoinRequestCancel(it) } == true) { val result = collapseJoinRequestEventsIfPossible(threadId, retrieved) @@ -2509,7 +2530,8 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat SERVER_GUID to retrieved.serverGuid, LATEST_REVISION_ID to null, ORIGINAL_MESSAGE_ID to editedMessage?.getOriginalOrOwnMessageId()?.id, - REVISION_NUMBER to (editedMessage?.revisionNumber?.inc() ?: 0) + REVISION_NUMBER to (editedMessage?.revisionNumber?.inc() ?: 0), + MESSAGE_EXTRAS to (retrieved.messageExtras?.encode()) ) val quoteAttachments: MutableList = mutableListOf() @@ -2597,11 +2619,20 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat ApplicationDependencies.getDatabaseObserver().notifyStoryObservers(threads.getRecipientIdForThreadId(threadId)!!) } - return Optional.of(InsertResult(messageId, threadId, insertedAttachments = insertedAttachments)) + return Optional.of( + InsertResult( + messageId = messageId, + threadId = threadId, + threadWasNewlyCreated = threadIdResult.newlyCreated, + insertedAttachments = insertedAttachments + ) + ) } fun insertChatSessionRefreshedMessage(recipientId: RecipientId, senderDeviceId: Long, sentTimestamp: Long): InsertResult { - val threadId = threads.getOrCreateThreadIdFor(Recipient.resolved(recipientId)) + val recipient = Recipient.resolved(recipientId) + val threadIdResult = threads.getOrCreateThreadIdResultFor(recipient.id, recipient.isGroup) + val threadId = threadIdResult.threadId var type = MessageTypes.SECURE_MESSAGE_BIT or MessageTypes.PUSH_MESSAGE_BIT type = type and MessageTypes.TOTAL_MASK - MessageTypes.ENCRYPTION_MASK or MessageTypes.ENCRYPTION_REMOTE_FAILED_BIT @@ -2627,7 +2658,11 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat notifyConversationListeners(threadId) TrimThreadJob.enqueueAsync(threadId) - return InsertResult(messageId, threadId) + return InsertResult( + messageId = messageId, + threadId = threadId, + threadWasNewlyCreated = threadIdResult.newlyCreated + ) } fun insertBadDecryptMessage(recipientId: RecipientId, senderDevice: Int, sentTimestamp: Long, receivedTimestamp: Long, threadId: Long) { @@ -2866,6 +2901,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat contentValues.put(PARENT_STORY_ID, if (message.parentStoryId != null) message.parentStoryId.serialize() else 0) contentValues.put(SCHEDULED_DATE, message.scheduledDate) contentValues.putNull(LATEST_REVISION_ID) + contentValues.put(MESSAGE_EXTRAS, message.messageExtras?.encode()) if (editedMessage != null) { contentValues.put(ORIGINAL_MESSAGE_ID, editedMessage.getOriginalOrOwnMessageId().id) @@ -3541,7 +3577,11 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat .where("$ID = ?", id) .run() - result = InsertResult(id, threadId) + result = InsertResult( + messageId = id, + threadId = threadId, + threadWasNewlyCreated = false + ) } } } @@ -4835,6 +4875,13 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat return type } + fun threadContainsSms(threadId: Long): Boolean { + return readableDatabase + .exists(TABLE_NAME) + .where(getInsecureMessageClause(threadId)) + .run() + } + protected enum class ReceiptType(val columnName: String, val groupStatus: Int) { READ(HAS_READ_RECEIPT, GroupReceiptTable.STATUS_READ), DELIVERY(HAS_DELIVERY_RECEIPT, GroupReceiptTable.STATUS_DELIVERED), @@ -4882,6 +4929,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat data class InsertResult( val messageId: Long, val threadId: Long, + val threadWasNewlyCreated: Boolean, val insertedAttachments: Map? = null ) @@ -5073,7 +5121,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat val editCount = cursor.requireInt(REVISION_NUMBER) val isRead = cursor.requireBoolean(READ) val messageExtraBytes = cursor.requireBlob(MESSAGE_EXTRAS) - val messageExtras = if (messageExtraBytes != null) MessageExtras.ADAPTER.decode(messageExtraBytes) else null + val messageExtras = messageExtraBytes?.let { MessageExtras.ADAPTER.decode(it) } if (!TextSecurePreferences.isReadReceiptsEnabled(context)) { hasReadReceipt = false diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt index 1cf59d43ec..ec3c629ed0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/OneTimePreKeyTable.kt @@ -32,7 +32,7 @@ class OneTimePreKeyTable(context: Context, databaseHelper: SignalDatabase) : Dat CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, $ACCOUNT_ID TEXT NOT NULL, - $KEY_ID INTEGER UNIQUE, + $KEY_ID INTEGER NOT NULL, $PUBLIC_KEY TEXT NOT NULL, $PRIVATE_KEY TEXT NOT NULL, $STALE_TIMESTAMP INTEGER NOT NULL DEFAULT 0, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt index f420eb6b53..4012da88f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTable.kt @@ -45,6 +45,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroup import org.thoughtcrime.securesms.badges.Badges.toDatabaseBadge import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.color.MaterialColor +import org.thoughtcrime.securesms.contacts.paged.ContactSearchSortOrder import org.thoughtcrime.securesms.conversation.colors.AvatarColor import org.thoughtcrime.securesms.conversation.colors.AvatarColorHash import org.thoughtcrime.securesms.conversation.colors.ChatColors @@ -390,12 +391,6 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da @JvmStatic fun maskCapabilitiesToLong(capabilities: SignalServiceProfile.Capabilities): Long { var value: Long = 0 - value = Bitmask.update(value, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isGv1Migration).serialize().toLong()) - value = Bitmask.update(value, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isSenderKey).serialize().toLong()) - value = Bitmask.update(value, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isAnnouncementGroup).serialize().toLong()) - value = Bitmask.update(value, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isChangeNumber).serialize().toLong()) - value = Bitmask.update(value, Capabilities.STORIES, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isStories).serialize().toLong()) - value = Bitmask.update(value, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isGiftBadges).serialize().toLong()) value = Bitmask.update(value, Capabilities.PNP, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isPnp).serialize().toLong()) value = Bitmask.update(value, Capabilities.PAYMENT_ACTIVATION, Capabilities.BIT_LENGTH, Recipient.Capability.fromBoolean(capabilities.isPaymentActivation).serialize().toLong()) return value @@ -437,6 +432,15 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da return readableDatabase.exists(TABLE_NAME).where("$ACI_COLUMN = ? AND $PNI_COLUMN = ?", serviceId.toString(), pni.toString()).run() } + fun getByE164IfRegisteredAndDiscoverable(e164: String): RecipientId? { + return readableDatabase + .select(ID) + .from(TABLE_NAME) + .where("$E164 = ? AND $REGISTERED = ${RegisteredState.REGISTERED.id} AND $PHONE_NUMBER_DISCOVERABLE = ${PhoneNumberDiscoverableState.DISCOVERABLE.id} AND ($PNI_COLUMN NOT NULL OR $ACI_COLUMN NOT NULL)", e164) + .run() + .readToSingleObject { RecipientId.from(it.requireLong(ID)) } + } + @JvmOverloads fun getAndPossiblyMerge(serviceId: ServiceId?, e164: String?, changeSelf: Boolean = false): RecipientId { require(serviceId != null || e164 != null) { "Must provide an ACI or E164!" } @@ -2271,6 +2275,10 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da getAndPossiblyMerge(null, record.pni, record.e164) } + fun processIndividualCdsLookup(aci: ACI?, pni: PNI, e164: String): RecipientId { + return getAndPossiblyMerge(aci = aci, pni = pni, e164 = e164) + } + /** * Processes CDSv2 results, merging recipients as necessary. Does not mark users as * registered. @@ -2943,7 +2951,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da secondaryId = data.byPni ) } else if (data.pniRecord.aci == null && (data.e164 == null || data.pniRecord.e164 == data.e164)) { - // The PNI record also has the E164 on it with no ACI. We're going to be stealing all of it's fields, + // The PNI has no ACI and possibly some e164. We're going to be stealing all of it's fields, // so this is basically a merge with a little bit of extra prep. breadCrumbs += "PniRecordHasNoAci" @@ -2951,7 +2959,9 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da operations += PnpOperation.RemovePni(data.byAci) } - if (data.aciRecord.e164 != null && data.aciRecord.e164 != data.e164) { + val newE164 = data.pniRecord.e164 ?: data.e164 + + if (data.aciRecord.e164 != null && data.aciRecord.e164 != newE164 && newE164 != null) { operations += PnpOperation.RemoveE164(data.byAci) // This also becomes a change number event @@ -2960,7 +2970,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da operations += PnpOperation.ChangeNumberInsert( recipientId = data.byAci, oldE164 = data.aciRecord.e164, - newE164 = data.e164!! + newE164 = newE164 ) } } @@ -3173,7 +3183,7 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da return getSignalContacts(includeSelf)?.count ?: 0 } - fun getSignalContacts(includeSelf: Boolean, orderBy: String? = null): Cursor? { + private fun getSignalContacts(includeSelf: Boolean, orderBy: String? = null): Cursor? { val searchSelection = ContactSearchSelection.Builder() .withRegistered(true) .withGroups(false) @@ -3184,20 +3194,39 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da return readableDatabase.query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy) } - fun querySignalContacts(inputQuery: String, includeSelf: Boolean): Cursor? { - val query = SqlUtil.buildCaseInsensitiveGlobPattern(inputQuery) + fun querySignalContacts(contactSearchQuery: ContactSearchQuery): Cursor? { + val query = SqlUtil.buildCaseInsensitiveGlobPattern(contactSearchQuery.query) val searchSelection = ContactSearchSelection.Builder() .withRegistered(true) .withGroups(false) - .excludeId(if (includeSelf) null else Recipient.self().id) + .excludeId(if (contactSearchQuery.includeSelf) null else Recipient.self().id) .withSearchQuery(query) .build() val selection = searchSelection.where val args = searchSelection.args - val orderBy = "$SORT_NAME, $SYSTEM_JOINED_NAME, $SEARCH_PROFILE_NAME, $E164" + val orderBy = "${if (contactSearchQuery.contactSearchSortOrder == ContactSearchSortOrder.RECENCY) "${ThreadTable.TABLE_NAME}.${ThreadTable.DATE} DESC, " else ""}$SORT_NAME, $SYSTEM_JOINED_NAME, $SEARCH_PROFILE_NAME, $E164" - return readableDatabase.query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy) + return if (contactSearchQuery.contactSearchSortOrder == ContactSearchSortOrder.RECENCY) { + val ambiguous = listOf(ID) + val projection = SEARCH_PROJECTION.map { + if (it in ambiguous) "$TABLE_NAME.$it" else it + } + "${ThreadTable.TABLE_NAME}.${ThreadTable.DATE}" + + //language=roomsql + readableDatabase.query( + """ + SELECT ${projection.joinToString(",")} + FROM $TABLE_NAME + JOIN ${ThreadTable.TABLE_NAME} ON ${ThreadTable.TABLE_NAME}.${ThreadTable.RECIPIENT_ID} = $TABLE_NAME.$ID + WHERE $selection + ORDER BY $orderBy + """.trimIndent(), + args + ) + } else { + readableDatabase.query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy) + } } fun querySignalContactLetterHeaders(inputQuery: String, includeSelf: Boolean, includePush: Boolean, includeSms: Boolean): Map { @@ -4272,6 +4301,12 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da private class GetOrInsertResult(val recipientId: RecipientId, val neededInsert: Boolean) + data class ContactSearchQuery( + val query: String, + val includeSelf: Boolean, + val contactSearchSortOrder: ContactSearchSortOrder = ContactSearchSortOrder.NATURAL + ) + @VisibleForTesting internal class ContactSearchSelection private constructor(val where: String, val args: Array) { @@ -4428,13 +4463,13 @@ open class RecipientTable(context: Context, databaseHelper: SignalDatabase) : Da internal object Capabilities { const val BIT_LENGTH = 2 - // const val GROUPS_V2 = 0 - const val GROUPS_V1_MIGRATION = 1 - const val SENDER_KEY = 2 - const val ANNOUNCEMENT_GROUPS = 3 - const val CHANGE_NUMBER = 4 - const val STORIES = 5 - const val GIFT_BADGES = 6 +// const val GROUPS_V2 = 0 +// const val GROUPS_V1_MIGRATION = 1 +// const val SENDER_KEY = 2 +// const val ANNOUNCEMENT_GROUPS = 3 +// const val CHANGE_NUMBER = 4 +// const val STORIES = 5 +// const val GIFT_BADGES = 6 const val PNP = 7 const val PAYMENT_ACTIVATION = 8 } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt index d3f093447c..edc29af53e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientTableCursorUtil.kt @@ -173,12 +173,6 @@ object RecipientTableCursorUtil { val capabilities = cursor.requireLong(RecipientTable.CAPABILITIES) return RecipientRecord.Capabilities( rawBits = capabilities, - groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GROUPS_V1_MIGRATION, Capabilities.BIT_LENGTH).toInt()), - senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.SENDER_KEY, Capabilities.BIT_LENGTH).toInt()), - announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.ANNOUNCEMENT_GROUPS, Capabilities.BIT_LENGTH).toInt()), - changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.CHANGE_NUMBER, Capabilities.BIT_LENGTH).toInt()), - storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.STORIES, Capabilities.BIT_LENGTH).toInt()), - giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.GIFT_BADGES, Capabilities.BIT_LENGTH).toInt()), pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PNP, Capabilities.BIT_LENGTH).toInt()), paymentActivation = Recipient.Capability.deserialize(Bitmask.read(capabilities, Capabilities.PAYMENT_ACTIVATION, Capabilities.BIT_LENGTH).toInt()) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt index 7679d26737..5fb5f7ba60 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignedPreKeyTable.kt @@ -34,7 +34,7 @@ class SignedPreKeyTable(context: Context, databaseHelper: SignalDatabase) : Data CREATE TABLE $TABLE_NAME ( $ID INTEGER PRIMARY KEY, $ACCOUNT_ID TEXT NOT NULL, - $KEY_ID INTEGER UNIQUE, + $KEY_ID INTEGER NOT NULL, $PUBLIC_KEY TEXT NOT NULL, $PRIVATE_KEY TEXT NOT NULL, $SIGNATURE TEXT NOT NULL, diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt index d2f954bf02..5c6cf1222a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadTable.kt @@ -1164,9 +1164,23 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa } fun getOrCreateThreadIdFor(recipientId: RecipientId, isGroup: Boolean, distributionType: Int = DistributionTypes.DEFAULT): Long { + return getOrCreateThreadIdResultFor(recipientId, isGroup, distributionType).threadId + } + + fun getOrCreateThreadIdResultFor(recipientId: RecipientId, isGroup: Boolean, distributionType: Int = DistributionTypes.DEFAULT): ThreadIdResult { return writableDatabase.withinTransaction { val threadId = getThreadIdFor(recipientId) - threadId ?: createThreadForRecipient(recipientId, isGroup, distributionType) + if (threadId != null) { + ThreadIdResult( + threadId = threadId, + newlyCreated = false + ) + } else { + ThreadIdResult( + threadId = createThreadForRecipient(recipientId, isGroup, distributionType), + newlyCreated = true + ) + } } } @@ -1927,7 +1941,8 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa val hasReadReceipt = TextSecurePreferences.isReadReceiptsEnabled(context) && cursor.requireBoolean(HAS_READ_RECEIPT) val extraString = cursor.getString(cursor.getColumnIndexOrThrow(SNIPPET_EXTRAS)) - val messageExtras = cursor.getBlob(cursor.getColumnIndexOrThrow(SNIPPET_MESSAGE_EXTRAS)) + val messageExtraBytes = cursor.getBlob(cursor.getColumnIndexOrThrow(SNIPPET_MESSAGE_EXTRAS)) + val messageExtras = if (messageExtraBytes != null) MessageExtras.ADAPTER.decode(messageExtraBytes) else null val extra: Extra? = if (extraString != null) { try { JsonUtils.fromJson(extraString, Extra::class.java) @@ -1959,6 +1974,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa .setPinned(cursor.requireBoolean(PINNED)) .setUnreadSelfMentionsCount(cursor.requireInt(UNREAD_SELF_MENTION_COUNT)) .setExtra(extra) + .setSnippetMessageExtras(messageExtras) .build() } @@ -2102,4 +2118,9 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa ) data class MergeResult(val threadId: Long, val previousThreadId: Long, val neededMerge: Boolean) + + data class ThreadIdResult( + val threadId: Long, + val newlyCreated: Boolean + ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt index fd7bf3eca9..4cb0c9456f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SignalDatabaseMigrations.kt @@ -77,6 +77,8 @@ import org.thoughtcrime.securesms.database.helpers.migration.V216_PhoneNumberDis import org.thoughtcrime.securesms.database.helpers.migration.V217_MessageTableExtrasColumn import org.thoughtcrime.securesms.database.helpers.migration.V218_RecipientPniSignatureVerified import org.thoughtcrime.securesms.database.helpers.migration.V219_PniPreKeyStores +import org.thoughtcrime.securesms.database.helpers.migration.V220_PreKeyConstraints +import org.thoughtcrime.securesms.database.helpers.migration.V221_AddReadColumnToCallEventsTable /** * Contains all of the database migrations for [SignalDatabase]. Broken into a separate file for cleanliness. @@ -157,10 +159,12 @@ object SignalDatabaseMigrations { 216 to V216_PhoneNumberDiscoverable, 217 to V217_MessageTableExtrasColumn, 218 to V218_RecipientPniSignatureVerified, - 219 to V219_PniPreKeyStores + 219 to V219_PniPreKeyStores, + 220 to V220_PreKeyConstraints, + 221 to V221_AddReadColumnToCallEventsTable ) - const val DATABASE_VERSION = 219 + const val DATABASE_VERSION = 221 @JvmStatic fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt new file mode 100644 index 0000000000..04c8a764d0 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V220_PreKeyConstraints.kt @@ -0,0 +1,105 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import net.zetetic.database.sqlcipher.SQLiteDatabase +import org.signal.core.util.Stopwatch +import org.signal.core.util.logging.Log + +/** + * A while back we added an accountId to the prekey tables to support a mix of ACI and PNI identities. + * Unfortunately, we didn't remove the unique constraint on the keyId, which isn't correct: the uniqueness + * is now based on the combination of (accountId, keyId). This migration fixes that by removing the unique + * address from the keyId column itself. + */ +object V220_PreKeyConstraints : SignalDatabaseMigration { + + private val TAG = Log.tag(V220_PreKeyConstraints::class.java) + + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + val stopwatch = Stopwatch("migration", decimalPlaces = 2) + migrateSignedEcKeyTable(db) + stopwatch.split("signed-ec") + + migrateOneTimeEcPreKeysTable(db) + stopwatch.split("one-time-ec") + + migrateKyberTable(db) + stopwatch.split("kyber") + + stopwatch.stop(TAG) + } + + private fun migrateKyberTable(db: SQLiteDatabase) { + db.execSQL( + """ + CREATE TABLE kyber_prekey_temp ( + _id INTEGER PRIMARY KEY, + account_id TEXT NOT NULL, + key_id INTEGER NOT NULL, + timestamp INTEGER NOT NULL, + last_resort INTEGER NOT NULL, + serialized BLOB NOT NULL, + stale_timestamp INTEGER NOT NULL DEFAULT 0, + UNIQUE(account_id, key_id) + ) + """ + ) + + db.execSQL("INSERT INTO kyber_prekey_temp SELECT * FROM kyber_prekey") + + db.execSQL("DROP TABLE kyber_prekey") + db.execSQL("DROP INDEX IF EXISTS kyber_account_id_key_id") + + db.execSQL("ALTER TABLE kyber_prekey_temp RENAME TO kyber_prekey") + db.execSQL("CREATE INDEX IF NOT EXISTS kyber_account_id_key_id ON kyber_prekey (account_id, key_id, last_resort, serialized)") + } + + private fun migrateSignedEcKeyTable(db: SQLiteDatabase) { + db.execSQL( + """ + CREATE TABLE signed_prekeys_temp ( + _id INTEGER PRIMARY KEY, + account_id TEXT NOT NULL, + key_id INTEGER NOT NULL, + public_key TEXT NOT NULL, + private_key TEXT NOT NULL, + signature TEXT NOT NULL, + timestamp INTEGER DEFAULT 0, + UNIQUE(account_id, key_id) + ) + """ + ) + + db.execSQL("INSERT INTO signed_prekeys_temp SELECT * FROM signed_prekeys") + + db.execSQL("DROP TABLE signed_prekeys") + + db.execSQL("ALTER TABLE signed_prekeys_temp RENAME TO signed_prekeys") + } + + private fun migrateOneTimeEcPreKeysTable(db: SQLiteDatabase) { + db.execSQL( + """ + CREATE TABLE one_time_prekeys_temp ( + _id INTEGER PRIMARY KEY, + account_id TEXT NOT NULL, + key_id INTEGER NOT NULL, + public_key TEXT NOT NULL, + private_key TEXT NOT NULL, + stale_timestamp INTEGER NOT NULL DEFAULT 0, + UNIQUE(account_id, key_id) + ) + """ + ) + + db.execSQL("INSERT INTO one_time_prekeys_temp SELECT * FROM one_time_prekeys") + + db.execSQL("DROP TABLE one_time_prekeys") + + db.execSQL("ALTER TABLE one_time_prekeys_temp RENAME TO one_time_prekeys") } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt new file mode 100644 index 0000000000..3cdca4412c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V221_AddReadColumnToCallEventsTable.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.helpers.migration + +import android.app.Application +import net.zetetic.database.sqlcipher.SQLiteDatabase + +/** + * Adds read state to call events to separately track from the primary messages table. + * Copies the current read state in from the message database, and then clears the message + * database 'read' flag as well as decrements the unread count in the thread databse. + */ +@Suppress("ClassName") +object V221_AddReadColumnToCallEventsTable : SignalDatabaseMigration { + override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { + db.execSQL("ALTER TABLE call ADD COLUMN read INTEGER DEFAULT 1") + + db.execSQL( + """ + UPDATE call + SET read = (SELECT read FROM message WHERE _id = call.message_id) + WHERE event = 3 AND direction = 0 + """.trimIndent() + ) + + db.execSQL( + """ + UPDATE thread + SET unread_count = thread.unread_count - 1 + WHERE _id IN (SELECT thread_id FROM message WHERE (type = 3 OR type = 8) AND read = 0) AND unread_count > 0 + """.trimIndent() + ) + + db.execSQL( + """ + UPDATE message + SET read = 1 + WHERE (type = 3 OR type = 8) AND read = 0 + """.trimIndent() + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt new file mode 100644 index 0000000000..a619abe627 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageConverter.kt @@ -0,0 +1,681 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database.model + +import ProtoUtil.isNullOrEmpty +import okio.ByteString +import org.signal.core.util.StringUtil +import org.signal.storageservice.protos.groups.AccessControl +import org.signal.storageservice.protos.groups.AccessControl.AccessRequired +import org.signal.storageservice.protos.groups.Member +import org.signal.storageservice.protos.groups.local.DecryptedGroup +import org.signal.storageservice.protos.groups.local.DecryptedGroupChange +import org.signal.storageservice.protos.groups.local.DecryptedPendingMember +import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember +import org.signal.storageservice.protos.groups.local.EnabledState +import org.thoughtcrime.securesms.backup.v2.proto.GenericGroupUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupAdminStatusUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupAnnouncementOnlyChangeUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupAttributesAccessLevelChangeUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupAvatarUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupChangeChatUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupCreationUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupDescriptionUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupExpirationTimerUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationAcceptedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationDeclinedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationRevokedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInviteLinkAdminApprovalUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInviteLinkDisabledUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInviteLinkEnabledUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupInviteLinkResetUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupJoinRequestApprovalUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupJoinRequestCanceledUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupJoinRequestUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberAddedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberJoinedByLinkUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberJoinedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberLeftUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberRemovedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupMembershipAccessLevelChangeUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupNameUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupSelfInvitationRevokedUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupSequenceOfRequestsAndCancelsUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupUnknownInviteeUpdate +import org.thoughtcrime.securesms.backup.v2.proto.GroupV2AccessLevel +import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedOtherUserToGroupUpdate +import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedToGroupUpdate +import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context +import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil +import org.whispersystems.signalservice.api.push.ServiceId.Companion.parseOrNull +import org.whispersystems.signalservice.api.push.ServiceIds +import org.whispersystems.signalservice.api.util.UuidUtil +import java.util.LinkedList +import java.util.Optional +import java.util.stream.Collectors + +/** + * Object to help with the translation between DecryptedGroupV2Context group updates + * and GroupChangeChatUpdates, which store the update messages as distinct messages rather + * than diffs of the group state. + */ +object GroupsV2UpdateMessageConverter { + + @JvmStatic + fun translateDecryptedChange(selfIds: ServiceIds, groupContext: DecryptedGroupV2Context): GroupChangeChatUpdate { + if (groupContext.change != null && ((groupContext.groupState != null && groupContext.groupState.revision != 0) || groupContext.previousGroupState != null)) { + return translateDecryptedChangeUpdate(selfIds, groupContext) + } else { + return translateDecryptedChangeNewGroup(selfIds, groupContext) + } + } + + @JvmStatic + fun translateDecryptedChangeNewGroup(selfIds: ServiceIds, groupContext: DecryptedGroupV2Context): GroupChangeChatUpdate { + var selfPending = Optional.empty() + val decryptedGroupChange = groupContext.change + val group = groupContext.groupState + val updates: MutableList = LinkedList() + + if (group != null) { + selfPending = DecryptedGroupUtil.findPendingByServiceId(group.pendingMembers, selfIds.aci) + if (selfPending.isEmpty() && selfIds.pni != null) { + selfPending = DecryptedGroupUtil.findPendingByServiceId(group.pendingMembers, selfIds.pni) + } + } + + if (selfPending.isPresent) { + updates.add( + GroupChangeChatUpdate.Update( + selfInvitedToGroupUpdate = SelfInvitedToGroupUpdate(inviterAci = selfPending.get().addedByAci) + ) + ) + return GroupChangeChatUpdate(updates = updates) + } + + if (decryptedGroupChange != null) { + val foundingMemberUuid: ByteString = decryptedGroupChange.editorServiceIdBytes + if (foundingMemberUuid.size > 0) { + if (selfIds.matches(foundingMemberUuid)) { + updates.add( + GroupChangeChatUpdate.Update( + groupCreationUpdate = GroupCreationUpdate(updaterAci = foundingMemberUuid) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberAddedUpdate = GroupMemberAddedUpdate(updaterAci = foundingMemberUuid, newMemberAci = selfIds.aci.toByteString()) + ) + ) + } + return GroupChangeChatUpdate(updates = updates) + } + } + + if (group != null && DecryptedGroupUtil.findMemberByAci(group.members, selfIds.aci).isPresent) { + updates.add(GroupChangeChatUpdate.Update(groupMemberJoinedUpdate = GroupMemberJoinedUpdate(newMemberAci = selfIds.aci.toByteString()))) + } + return GroupChangeChatUpdate(updates = updates) + } + + @JvmStatic + fun translateDecryptedChangeUpdate(selfIds: ServiceIds, groupContext: DecryptedGroupV2Context): GroupChangeChatUpdate { + var previousGroupState = groupContext.previousGroupState + val change = groupContext.change!! + if (DecryptedGroup().equals(previousGroupState)) { + previousGroupState = null + } + val updates: MutableList = LinkedList() + var editorUnknown = change.editorServiceIdBytes.size == 0 + val editorServiceId = if (editorUnknown) null else parseOrNull(change.editorServiceIdBytes) + if (editorServiceId == null || editorServiceId.isUnknown) { + editorUnknown = true + } + translateMemberAdditions(change, editorUnknown, updates) + translateModifyMemberRoles(change, editorUnknown, updates) + translateInvitations(selfIds, change, editorUnknown, updates) + translateRevokedInvitations(selfIds, change, editorUnknown, updates) + translatePromotePending(selfIds, change, editorUnknown, updates) + translateNewTitle(change, editorUnknown, updates) + translateNewDescription(change, editorUnknown, updates) + translateNewAvatar(change, editorUnknown, updates) + translateNewTimer(change, editorUnknown, updates) + translateNewAttributeAccess(change, editorUnknown, updates) + translateNewMembershipAccess(change, editorUnknown, updates) + translateNewGroupInviteLinkAccess(previousGroupState, change, editorUnknown, updates) + translateRequestingMembers(selfIds, change, editorUnknown, updates) + translateRequestingMemberApprovals(selfIds, change, editorUnknown, updates) + translateRequestingMemberDeletes(selfIds, change, editorUnknown, updates) + translateAnnouncementGroupChange(change, editorUnknown, updates) + translatePromotePendingPniAci(selfIds, change, editorUnknown, updates) + translateMemberRemovals(selfIds, change, editorUnknown, updates) + if (updates.isEmpty()) { + translateUnknownChange(change, editorUnknown, updates) + } + return GroupChangeChatUpdate(updates = updates) + } + + @JvmStatic + fun translateMemberAdditions(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + for (member in change.newMembers) { + if (!editorUnknown && member.aciBytes == change.editorServiceIdBytes) { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberJoinedByLinkUpdate = GroupMemberJoinedByLinkUpdate(newMemberAci = member.aciBytes) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberAddedUpdate = GroupMemberAddedUpdate( + updaterAci = if (editorUnknown) null else change.editorServiceIdBytes, + newMemberAci = member.aciBytes, + hadOpenInvitation = false + ) + ) + ) + } + } + } + + @JvmStatic + fun translateModifyMemberRoles(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + for (roleChange in change.modifyMemberRoles) { + updates.add( + GroupChangeChatUpdate.Update( + groupAdminStatusUpdate = GroupAdminStatusUpdate( + updaterAci = if (editorUnknown) null else change.editorServiceIdBytes, + memberAci = roleChange.aciBytes, + wasAdminStatusGranted = roleChange.role == Member.Role.ADMINISTRATOR + ) + ) + ) + } + } + + @JvmStatic + fun translateInvitations(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorIsYou = selfIds.matches(change.editorServiceIdBytes) + + var notYouInviteCount = 0 + for (invitee in change.newPendingMembers) { + val newMemberIsYou = selfIds.matches(invitee.serviceIdBytes) + if (newMemberIsYou) { + updates.add( + GroupChangeChatUpdate.Update( + selfInvitedToGroupUpdate = SelfInvitedToGroupUpdate( + inviterAci = if (editorUnknown) convertUnknownUUIDtoNull(invitee.addedByAci) else change.editorServiceIdBytes + ) + ) + ) + } else { + if (editorIsYou) { + updates.add(GroupChangeChatUpdate.Update(selfInvitedOtherUserToGroupUpdate = SelfInvitedOtherUserToGroupUpdate(inviteeServiceId = invitee.serviceIdBytes))) + } else { + notYouInviteCount++ + } + } + } + if (notYouInviteCount > 0) { + updates.add( + GroupChangeChatUpdate.Update( + groupUnknownInviteeUpdate = GroupUnknownInviteeUpdate( + inviterAci = if (editorUnknown) null else change.editorServiceIdBytes, + inviteeCount = notYouInviteCount + ) + ) + ) + } + } + + @JvmStatic + fun translateRevokedInvitations(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + + val revokedInvitees = LinkedList() + + for (invitee in change.deletePendingMembers) { + val decline = invitee.serviceIdBytes == editorAci + if (decline) { + updates.add( + GroupChangeChatUpdate.Update( + groupInvitationDeclinedUpdate = GroupInvitationDeclinedUpdate(inviteeAci = invitee.serviceIdBytes) + ) + ) + } else if (selfIds.matches(invitee.serviceIdBytes)) { + updates.add( + GroupChangeChatUpdate.Update( + groupSelfInvitationRevokedUpdate = GroupSelfInvitationRevokedUpdate(revokerAci = editorAci) + ) + ) + } else { + revokedInvitees.add( + GroupInvitationRevokedUpdate.Invitee( + inviteeAci = invitee.serviceIdBytes + ) + ) + } + } + + if (revokedInvitees.isNotEmpty()) { + updates.add( + GroupChangeChatUpdate.Update( + groupInvitationRevokedUpdate = GroupInvitationRevokedUpdate( + updaterAci = editorAci, + invitees = revokedInvitees + ) + ) + ) + } + } + + @JvmStatic + fun translatePromotePending(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + val editorIsYou = if (editorUnknown) false else selfIds.matches(editorAci) + + for (member in change.promotePendingMembers) { + val newMemberIsYou: Boolean = selfIds.matches(member.aciBytes) + if (editorIsYou) { + if (newMemberIsYou) { + updates.add( + GroupChangeChatUpdate.Update( + groupInvitationAcceptedUpdate = GroupInvitationAcceptedUpdate( + inviterAci = null, + newMemberAci = member.aciBytes + ) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberAddedUpdate = GroupMemberAddedUpdate( + updaterAci = editorAci, + newMemberAci = member.aciBytes, + hadOpenInvitation = true + ) + ) + ) + } + } else if (editorUnknown) { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberJoinedUpdate = GroupMemberJoinedUpdate( + newMemberAci = member.aciBytes + ) + ) + ) + } else if (member.aciBytes == change.editorServiceIdBytes) { + updates.add( + GroupChangeChatUpdate.Update( + groupInvitationAcceptedUpdate = GroupInvitationAcceptedUpdate( + inviterAci = null, + newMemberAci = member.aciBytes + ) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberAddedUpdate = GroupMemberAddedUpdate( + updaterAci = editorAci, + newMemberAci = member.aciBytes, + hadOpenInvitation = true + ) + ) + ) + } + } + } + + @JvmStatic + fun translateNewTitle(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newTitle != null) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + val newTitle = StringUtil.isolateBidi(change.newTitle?.value_) + updates.add( + GroupChangeChatUpdate.Update( + groupNameUpdate = GroupNameUpdate( + updaterAci = editorAci, + newGroupName = newTitle + ) + ) + ) + } + } + + @JvmStatic + fun translateNewDescription(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newDescription != null) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + updates.add( + GroupChangeChatUpdate.Update( + groupDescriptionUpdate = GroupDescriptionUpdate( + updaterAci = editorAci, + newDescription = change.newDescription?.value_ + ) + ) + ) + } + } + + @JvmStatic + fun translateNewAvatar(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newAvatar != null) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + updates.add( + GroupChangeChatUpdate.Update( + groupAvatarUpdate = GroupAvatarUpdate( + updaterAci = editorAci, + wasRemoved = change.newAvatar?.value_.isNullOrEmpty() + ) + ) + ) + } + } + + @JvmStatic + fun translateNewTimer(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newTimer != null) { + updates.add( + GroupChangeChatUpdate.Update( + groupExpirationTimerUpdate = GroupExpirationTimerUpdate( + expiresInMs = change.newTimer!!.duration * 1000, + updaterAci = if (editorUnknown) null else change.editorServiceIdBytes + ) + ) + ) + } + } + + @JvmStatic + fun translateNewAttributeAccess(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newAttributeAccess != AccessControl.AccessRequired.UNKNOWN) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + updates.add( + GroupChangeChatUpdate.Update( + groupAttributesAccessLevelChangeUpdate = GroupAttributesAccessLevelChangeUpdate( + updaterAci = editorAci, + accessLevel = translateGv2AccessLevel(change.newAttributeAccess) + ) + ) + ) + } + } + + private fun translateGv2AccessLevel(accessRequired: AccessRequired): GroupV2AccessLevel { + return when (accessRequired) { + AccessRequired.ANY -> GroupV2AccessLevel.ANY + AccessRequired.MEMBER -> GroupV2AccessLevel.MEMBER + AccessRequired.ADMINISTRATOR -> GroupV2AccessLevel.ADMINISTRATOR + AccessRequired.UNSATISFIABLE -> GroupV2AccessLevel.UNSATISFIABLE + AccessRequired.UNKNOWN -> GroupV2AccessLevel.UNKNOWN + else -> GroupV2AccessLevel.UNKNOWN + } + } + + @JvmStatic + fun translateNewMembershipAccess(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newMemberAccess !== AccessRequired.UNKNOWN) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + updates.add( + GroupChangeChatUpdate.Update( + groupMembershipAccessLevelChangeUpdate = GroupMembershipAccessLevelChangeUpdate( + updaterAci = editorAci, + accessLevel = translateGv2AccessLevel(change.newMemberAccess) + ) + ) + ) + } + } + + @JvmStatic + fun translateNewGroupInviteLinkAccess(previousGroupState: DecryptedGroup?, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + var previousAccessControl: AccessRequired? = null + + if (previousGroupState?.accessControl != null) { + previousAccessControl = previousGroupState.accessControl!!.addFromInviteLink + } + + var groupLinkEnabled = false + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + + when (change.newInviteLinkAccess) { + AccessRequired.ANY -> { + groupLinkEnabled = true + updates.add( + if (previousAccessControl == AccessControl.AccessRequired.ADMINISTRATOR) { + GroupChangeChatUpdate.Update( + groupInviteLinkAdminApprovalUpdate = GroupInviteLinkAdminApprovalUpdate( + updaterAci = editorAci, + linkRequiresAdminApproval = false + ) + ) + } else { + GroupChangeChatUpdate.Update( + groupInviteLinkEnabledUpdate = GroupInviteLinkEnabledUpdate( + updaterAci = editorAci, + linkRequiresAdminApproval = false + ) + ) + } + ) + } + AccessRequired.ADMINISTRATOR -> { + groupLinkEnabled = true + updates.add( + if (previousAccessControl == AccessControl.AccessRequired.ANY) { + GroupChangeChatUpdate.Update( + groupInviteLinkAdminApprovalUpdate = GroupInviteLinkAdminApprovalUpdate( + updaterAci = editorAci, + linkRequiresAdminApproval = true + ) + ) + } else { + GroupChangeChatUpdate.Update( + groupInviteLinkEnabledUpdate = GroupInviteLinkEnabledUpdate( + updaterAci = editorAci, + linkRequiresAdminApproval = true + ) + ) + } + ) + } + AccessRequired.UNSATISFIABLE -> { + updates.add( + GroupChangeChatUpdate.Update( + groupInviteLinkDisabledUpdate = GroupInviteLinkDisabledUpdate( + updaterAci = editorAci + ) + ) + ) + } + else -> {} + } + if (!groupLinkEnabled && change.newInviteLinkPassword.size > 0) { + updates.add( + GroupChangeChatUpdate.Update( + groupInviteLinkResetUpdate = GroupInviteLinkResetUpdate( + updaterAci = editorAci + ) + ) + ) + } + } + + @JvmStatic + fun translateRequestingMembers(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val deleteRequestingUuids: Set = HashSet(change.deleteRequestingMembers) + for (member in change.newRequestingMembers) { + val requestingMemberIsYou = selfIds.matches(member.aciBytes) + if (!requestingMemberIsYou && deleteRequestingUuids.contains(member.aciBytes)) { + updates.add( + GroupChangeChatUpdate.Update( + groupSequenceOfRequestsAndCancelsUpdate = GroupSequenceOfRequestsAndCancelsUpdate( + requestorAci = member.aciBytes, + count = change.deleteRequestingMembers.size + ) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupJoinRequestUpdate = GroupJoinRequestUpdate( + requestorAci = member.aciBytes + ) + ) + ) + } + } + } + + @JvmStatic + fun translateRequestingMemberApprovals(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + for (requestingMember in change.promoteRequestingMembers) { + updates.add( + GroupChangeChatUpdate.Update( + groupJoinRequestApprovalUpdate = GroupJoinRequestApprovalUpdate( + updaterAci = editorAci, + requestorAci = requestingMember.aciBytes, + wasApproved = true + ) + ) + ) + } + } + + @JvmStatic + fun translateRequestingMemberDeletes(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val newRequestingUuids = change.newRequestingMembers.stream().map { m: DecryptedRequestingMember -> m.aciBytes }.collect(Collectors.toSet()) + + val editorIsYou = selfIds.matches(change.editorServiceIdBytes) + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + for (requestingMember in change.deleteRequestingMembers) { + if (newRequestingUuids.contains(requestingMember)) { + continue + } + + val requestingMemberIsYou = selfIds.matches(requestingMember) + if ((requestingMemberIsYou && editorIsYou) || (change.editorServiceIdBytes == requestingMember)) { + updates.add( + GroupChangeChatUpdate.Update( + groupJoinRequestCanceledUpdate = GroupJoinRequestCanceledUpdate( + requestorAci = requestingMember + ) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupJoinRequestApprovalUpdate = GroupJoinRequestApprovalUpdate( + requestorAci = requestingMember, + updaterAci = editorAci, + wasApproved = false + ) + ) + ) + } + } + } + + @JvmStatic + fun translateAnnouncementGroupChange(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + if (change.newIsAnnouncementGroup == EnabledState.ENABLED || change.newIsAnnouncementGroup == EnabledState.DISABLED) { + val editorAci = if (editorUnknown) null else change.editorServiceIdBytes + updates.add( + GroupChangeChatUpdate.Update( + groupAnnouncementOnlyChangeUpdate = GroupAnnouncementOnlyChangeUpdate( + updaterAci = editorAci, + isAnnouncementOnly = change.newIsAnnouncementGroup == EnabledState.ENABLED + ) + ) + ) + } + } + + @JvmStatic + fun translatePromotePendingPniAci(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorIsYou = selfIds.matches(change.editorServiceIdBytes) + for (newMember in change.promotePendingPniAciMembers) { + if (editorUnknown) { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberJoinedUpdate = GroupMemberJoinedUpdate( + newMemberAci = newMember.aciBytes + ) + ) + ) + } else { + if ((selfIds.matches(newMember.aciBytes) && editorIsYou) || newMember.aciBytes == change.editorServiceIdBytes) { + updates.add( + GroupChangeChatUpdate.Update( + groupInvitationAcceptedUpdate = GroupInvitationAcceptedUpdate( + inviterAci = null, + newMemberAci = newMember.aciBytes + ) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberAddedUpdate = GroupMemberAddedUpdate( + newMemberAci = newMember.aciBytes, + updaterAci = change.editorServiceIdBytes, + hadOpenInvitation = true, + inviterAci = null + ) + ) + ) + } + } + } + } + + @JvmStatic + fun translateMemberRemovals(selfIds: ServiceIds, change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + val editorIsYou: Boolean = selfIds.matches(change.editorServiceIdBytes) + for (member in change.deleteMembers) { + val removedMemberIsYou: Boolean = selfIds.matches(member) + if ((editorIsYou && removedMemberIsYou) || member == change.editorServiceIdBytes) { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberLeftUpdate = GroupMemberLeftUpdate(aci = member) + ) + ) + } else { + updates.add( + GroupChangeChatUpdate.Update( + groupMemberRemovedUpdate = GroupMemberRemovedUpdate( + removerAci = if (editorUnknown) null else change.editorServiceIdBytes, + removedAci = member + ) + ) + ) + } + } + } + + @JvmStatic + fun translateUnknownChange(change: DecryptedGroupChange, editorUnknown: Boolean, updates: MutableList) { + updates.add( + GroupChangeChatUpdate.Update( + genericGroupUpdate = GenericGroupUpdate( + updaterAci = if (editorUnknown) null else change.editorServiceIdBytes + ) + ) + ) + } + + private fun convertUnknownUUIDtoNull(id: ByteString?): ByteString? { + if (id.isNullOrEmpty()) return null + val uuid = UuidUtil.fromByteStringOrUnknown(id) + + if (UuidUtil.UNKNOWN_UUID == uuid) return null + return id + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java index f41da6c02d..e84973e0ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java @@ -33,6 +33,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.GroupChangeChatUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupCreationUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupDescriptionUpdate; +import org.thoughtcrime.securesms.backup.v2.proto.GroupExpirationTimerUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationAcceptedUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationDeclinedUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupInvitationRevokedUpdate; @@ -44,11 +45,13 @@ import org.thoughtcrime.securesms.backup.v2.proto.GroupJoinRequestCanceledUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupJoinRequestUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberAddedUpdate; +import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberJoinedByLinkUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberJoinedUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberLeftUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupMemberRemovedUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupMembershipAccessLevelChangeUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupNameUpdate; +import org.thoughtcrime.securesms.backup.v2.proto.GroupSelfInvitationRevokedUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupUnknownInviteeUpdate; import org.thoughtcrime.securesms.backup.v2.proto.GroupV2AccessLevel; import org.thoughtcrime.securesms.backup.v2.proto.GroupV2MigrationDroppedMembersUpdate; @@ -57,6 +60,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.GroupV2MigrationUpdate; import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedOtherUserToGroupUpdate; import org.thoughtcrime.securesms.backup.v2.proto.SelfInvitedToGroupUpdate; +import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription; import org.thoughtcrime.securesms.groups.GV2AccessLevelUtil; import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange; @@ -145,6 +149,9 @@ List describeChanges(@NonNull List updates) { + if (update.revokerAci == null) { + updates.add(updateDescription(context.getString(R.string.MessageRecord_an_admin_revoked_your_invitation_to_the_group), R.drawable.ic_update_group_decline_16)); + } else { + updates.add(updateDescription(R.string.MessageRecord_s_revoked_your_invitation_to_the_group, update.revokerAci, R.drawable.ic_update_group_decline_16)); + } + } + private void describeGroupExpirationTimerUpdate(@NonNull GroupExpirationTimerUpdate update, @NonNull List updates) { + String time = ExpirationUtil.getExpirationDisplayValue(context, update.expiresInMs / 1000); + if (update.updaterAci == null) { + updates.add(updateDescription(context.getString(R.string.MessageRecord_disappearing_message_time_set_to_s, time), R.drawable.ic_update_timer_16)); + } else { + boolean editorIsYou = selfIds.matches(update.updaterAci); + if (editorIsYou) { + updates.add(updateDescription(context.getString(R.string.MessageRecord_you_set_disappearing_message_time_to_s, time), R.drawable.ic_update_timer_16)); + } else { + updates.add(updateDescription(R.string.MessageRecord_s_set_disappearing_message_time_to_s, update.updaterAci, time, R.drawable.ic_update_timer_16)); + } + } + } + + private void describeGroupMemberJoinedByLinkUpdate(@NonNull GroupMemberJoinedByLinkUpdate update, @NonNull List updates) { + if (selfIds.matches(update.newMemberAci)) { + updates.add(0, updateDescription(context.getString(R.string.MessageRecord_you_joined_the_group_via_the_group_link), R.drawable.ic_update_group_accept_16)); + } else { + updates.add(updateDescription(R.string.MessageRecord_s_joined_the_group_via_the_group_link, update.newMemberAci, R.drawable.ic_update_group_accept_16)); } } @@ -254,12 +296,10 @@ private void describeGroupInviteLinkAdminApprovalUpdate(@NonNull GroupInviteLink } private void describeInviteLinkDisabledUpdate(@NonNull GroupInviteLinkDisabledUpdate update, @NonNull List updates) { - boolean editorIsYou = selfIds.matches(update.updaterAci); - if (update.updaterAci == null) { updates.add(updateDescription(context.getString(R.string.MessageRecord_the_group_link_has_been_turned_off), R.drawable.ic_update_group_role_16)); } else { - if (editorIsYou) { + if (selfIds.matches(update.updaterAci)) { updates.add(updateDescription(context.getString(R.string.MessageRecord_you_turned_off_the_group_link), R.drawable.ic_update_group_role_16)); } else { updates.add(updateDescription(R.string.MessageRecord_s_turned_off_the_group_link, update.updaterAci, R.drawable.ic_update_group_role_16)); @@ -268,7 +308,6 @@ private void describeInviteLinkDisabledUpdate(@NonNull GroupInviteLinkDisabledUp } private void describeInviteLinkEnabledUpdate(@NonNull GroupInviteLinkEnabledUpdate update, @NonNull List updates) { - boolean editorIsYou = selfIds.matches(update.updaterAci); if (update.updaterAci == null) { if (update.linkRequiresAdminApproval) { @@ -277,7 +316,7 @@ private void describeInviteLinkEnabledUpdate(@NonNull GroupInviteLinkEnabledUpda updates.add(updateDescription(context.getString(R.string.MessageRecord_the_group_link_has_been_turned_on_with_admin_approval_off), R.drawable.ic_update_group_role_16)); } } else { - if (editorIsYou) { + if (selfIds.matches(update.updaterAci)) { if (update.linkRequiresAdminApproval) { updates.add(updateDescription(context.getString(R.string.MessageRecord_you_turned_on_the_group_link_with_admin_approval_on), R.drawable.ic_update_group_role_16)); } else { @@ -366,7 +405,7 @@ private void describeGroupJoinRequestUpdate(@NonNull GroupJoinRequestUpdate upda private void describeGroupInvitationRevokedUpdate(@NonNull GroupInvitationRevokedUpdate update, @NonNull List updates) { int revokedMeCount = 0; for (GroupInvitationRevokedUpdate.Invitee invitee : update.invitees) { - if (selfIds.matches(invitee.inviteeAci) || selfIds.matches(invitee.inviteePni)) { + if ((invitee.inviteeAci != null && selfIds.matches(invitee.inviteeAci)) || (invitee.inviteePni != null && selfIds.matches(invitee.inviteePni))) { revokedMeCount++; } } @@ -409,17 +448,21 @@ private void describeGroupMemberAddedUpdate(@NonNull GroupMemberAddedUpdate upda } else { updates.add(updateDescription(R.string.MessageRecord_s_joined_the_group, update.newMemberAci, R.drawable.ic_update_group_add_16)); } - } else if (update.hadOpenInvitation) { - if (selfIds.matches(update.updaterAci)) { - updates.add(updateDescription(R.string.MessageRecord_you_added_invited_member_s, update.newMemberAci, R.drawable.ic_update_group_add_16)); - } else { - updates.add(updateDescription(R.string.MessageRecord_s_added_invited_member_s, update.updaterAci, update.newMemberAci, R.drawable.ic_update_group_add_16)); - } } else { if (newMemberIsYou) { updates.add(0, updateDescription(R.string.MessageRecord_s_added_you, update.updaterAci, R.drawable.ic_update_group_add_16)); + } else if (selfIds.matches(update.updaterAci)) { + if (update.hadOpenInvitation) { + updates.add(updateDescription(R.string.MessageRecord_you_added_invited_member_s, update.newMemberAci, R.drawable.ic_update_group_add_16)); + } else { + updates.add(updateDescription(R.string.MessageRecord_you_added_s, update.newMemberAci, R.drawable.ic_update_group_add_16)); + } } else { - updates.add(updateDescription(R.string.MessageRecord_s_added_s, update.updaterAci, update.newMemberAci, R.drawable.ic_update_group_add_16)); + if (update.hadOpenInvitation) { + updates.add(updateDescription(R.string.MessageRecord_s_added_invited_member_s, update.updaterAci, update.newMemberAci, R.drawable.ic_update_group_add_16)); + } else { + updates.add(updateDescription(R.string.MessageRecord_s_added_s, update.updaterAci, update.newMemberAci, R.drawable.ic_update_group_add_16)); + } } } } @@ -1541,7 +1584,7 @@ private UpdateDescription updateDescription(@PluralsRes int stringRes, String beforeChunk = template.substring(startIndex, nearestPosition); builder.append(beforeChunk); - builder.append(SpanUtil.clickable(Recipient.resolved(recipientId).getDisplayNameOrUsername(context), ContextCompat.getColor(context, R.color.conversation_item_update_text_color), v -> { + builder.append(SpanUtil.clickable(Recipient.resolved(recipientId).getDisplayName(context), ContextCompat.getColor(context, R.color.conversation_item_update_text_color), v -> { if (!recipientId.isUnknown() && clickHandler != null) { clickHandler.accept(recipientId); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index f2db0edff9..6f13a41c82 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -180,7 +180,11 @@ public SpannableString getDisplayBody(@NonNull Context context, @Nullable Consum public @Nullable UpdateDescription getUpdateDisplayBody(@NonNull Context context, @Nullable Consumer recipientClickHandler) { if (isGroupUpdate() && isGroupV2()) { - return getGv2ChangeDescription(context, getBody(), recipientClickHandler); + if (messageExtras != null) { + return getGv2ChangeDescription(context, messageExtras, recipientClickHandler); + } else { + return getGv2ChangeDescription(context, getBody(), recipientClickHandler); + } } else if (isGroupUpdate() && isOutgoing()) { return staticUpdateDescription(context.getString(R.string.MessageRecord_you_updated_group), R.drawable.ic_update_group_16); } else if (isGroupUpdate()) { @@ -223,7 +227,7 @@ public SpannableString getDisplayBody(@NonNull Context context, @Nullable Consum if (isOutgoing()) return fromRecipient(getToRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified, r.getDisplayName(context)), R.drawable.ic_update_info_16); else return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_you_marked_your_safety_number_with_s_unverified_from_another_device, r.getDisplayName(context)), R.drawable.ic_update_info_16); } else if (isProfileChange()) { - return staticUpdateDescription(getProfileChangeDescription(context), R.drawable.ic_update_profile_16); + return getProfileChangeDescription(context); } else if (isChangeNumber()) { return fromRecipient(getFromRecipient(), r -> context.getString(R.string.MessageRecord_s_changed_their_phone_number, r.getDisplayName(context)), R.drawable.ic_phone_16); } else if (isBoostRequest()) { @@ -294,7 +298,7 @@ public boolean isSelfCreatedGroup() { return selfCreatedGroup(change); } - @Nullable public MessageExtras getMessageExtras() { + public @Nullable MessageExtras getMessageExtras() { return messageExtras; } @@ -427,27 +431,41 @@ private static boolean selfCreatedGroup(@Nullable DecryptedGroupChange change) { return UpdateDescription.staticDescription(string, iconResource, lightTint, darkTint); } - private @NonNull String getProfileChangeDescription(@NonNull Context context) { - try { - byte[] decoded = Base64.decode(getBody()); - ProfileChangeDetails profileChangeDetails = ProfileChangeDetails.ADAPTER.decode(decoded); + private @NonNull UpdateDescription getProfileChangeDescription(@NonNull Context context) { + ProfileChangeDetails profileChangeDetails = null; + MessageExtras extras = getMessageExtras(); + if (extras != null) { + profileChangeDetails = extras.profileChangeDetails; + } else { + try { + byte[] decoded = Base64.decode(getBody()); + profileChangeDetails = ProfileChangeDetails.ADAPTER.decode(decoded); + } catch (IOException e) { + Log.w(TAG, "Profile name change details could not be read", e); + } + } + + if (profileChangeDetails != null) { if (profileChangeDetails.profileNameChange != null) { String displayName = getFromRecipient().getDisplayName(context); String newName = StringUtil.isolateBidi(ProfileName.fromSerialized(profileChangeDetails.profileNameChange.newValue).toString()); String previousName = StringUtil.isolateBidi(ProfileName.fromSerialized(profileChangeDetails.profileNameChange.previous).toString()); + String updateMessage; if (getFromRecipient().isSystemContact()) { - return context.getString(R.string.MessageRecord_changed_their_profile_name_from_to, displayName, previousName, newName); + updateMessage = context.getString(R.string.MessageRecord_changed_their_profile_name_from_to, displayName, previousName, newName); } else { - return context.getString(R.string.MessageRecord_changed_their_profile_name_to, previousName, newName); + updateMessage = context.getString(R.string.MessageRecord_changed_their_profile_name_to, previousName, newName); } + + return staticUpdateDescription(updateMessage, R.drawable.ic_update_profile_16); + } else if (profileChangeDetails.learnedProfileName != null) { + return staticUpdateDescription(context.getString(R.string.MessageRecord_started_this_chat, profileChangeDetails.learnedProfileName.previous), R.drawable.symbol_thread_16); } - } catch (IOException e) { - Log.w(TAG, "Profile name change details could not be read", e); } - return context.getString(R.string.MessageRecord_changed_their_profile, getFromRecipient().getDisplayName(context)); + return staticUpdateDescription(context.getString(R.string.MessageRecord_changed_their_profile, getFromRecipient().getDisplayName(context)), R.drawable.ic_update_profile_16); } private UpdateDescription getGroupMigrationEventDescription(@NonNull Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index d1e427a4a1..3830afc481 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -117,12 +117,6 @@ data class RecipientRecord( data class Capabilities( val rawBits: Long, - val groupsV1MigrationCapability: Recipient.Capability, - val senderKeyCapability: Recipient.Capability, - val announcementGroupCapability: Recipient.Capability, - val changeNumberCapability: Recipient.Capability, - val storiesCapability: Recipient.Capability, - val giftBadgesCapability: Recipient.Capability, val pnpCapability: Recipient.Capability, val paymentActivation: Recipient.Capability ) { @@ -131,12 +125,6 @@ data class RecipientRecord( val UNKNOWN = Capabilities( 0, Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, - Recipient.Capability.UNKNOWN, Recipient.Capability.UNKNOWN ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index e949fbb9e1..42479a6a15 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -136,7 +136,8 @@ public ApplicationDependencyProvider(@NonNull Application context) { provideGroupsV2Operations(signalServiceConfiguration).getProfileOperations(), SignalExecutors.newCachedBoundedExecutor("signal-messages", ThreadUtil.PRIORITY_IMPORTANT_BACKGROUND_THREAD, 1, 16, 30), ByteUnit.KILOBYTES.toBytes(256), - FeatureFlags.okHttpAutomaticRetry()); + FeatureFlags.okHttpAutomaticRetry(), + FeatureFlags.useRxMessageSending()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/fonts/SignalSymbols.kt b/app/src/main/java/org/thoughtcrime/securesms/fonts/SignalSymbols.kt new file mode 100644 index 0000000000..52fc3cf5aa --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/fonts/SignalSymbols.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.fonts + +import android.content.Context +import android.graphics.Typeface +import android.text.SpannableStringBuilder +import android.text.TextPaint +import android.text.style.MetricAffectingSpan + +/** + * Helper object for working with the SignalSymbols font + */ +object SignalSymbols { + + enum class Glyph(val unicode: Char) { + CHEVRON_RIGHT('\uE025'), + PERSON_CIRCLE('\uE05E') + } + + enum class Weight { + BOLD + } + + private val cache = mutableMapOf() + + fun getSpannedString( + context: Context, + weight: Weight, + glyph: Glyph + ): CharSequence { + val typeface = getTypeface(context, weight) + val span = CustomTypefaceSpan(typeface) + + val text = SpannableStringBuilder(glyph.unicode.toString()) + text.setSpan(span, 0, text.length, 0) + + return text + } + + private fun getTypeface(context: Context, weight: Weight): Typeface { + return when (weight) { + Weight.BOLD -> getBoldWeightedFont(context) + else -> error("Unsupported weight: $weight") + } + } + + private fun getBoldWeightedFont(context: Context): Typeface { + return cache.getOrPut( + Weight.BOLD + ) { + Typeface.createFromAsset( + context.assets, + "fonts/SignalSymbols-Bold.otf" + ) + } + } + + /** + * Custom TypefaceSpan to support TypefaceSpan in API<28 + * + * Source: https://www.youtube.com/watch?v=x-FcOX6ErdI&t=486s + */ + private class CustomTypefaceSpan(val font: Typeface?) : MetricAffectingSpan() { + override fun updateMeasureState(textPaint: TextPaint) = update(textPaint) + override fun updateDrawState(textPaint: TextPaint?) = update(textPaint) + + private fun update(tp: TextPaint?) { + tp.apply { + val old = this!!.typeface + val oldStyle = old?.style ?: 0 + val font = Typeface.create(font, oldStyle) + typeface = font + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java index 98a9922478..34972895b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManagerV2.java @@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.GroupRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.v2.GroupCandidateHelper; import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl; @@ -1295,10 +1296,10 @@ static class SendGroupUpdateHelper { @Nullable GroupChange signedGroupChange, boolean sendToMembers) { - GroupId.V2 groupId = GroupId.v2(masterKey); - Recipient groupRecipient = Recipient.externalGroupExact(groupId); - DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(masterKey, groupMutation, signedGroupChange); - OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis()); + GroupId.V2 groupId = GroupId.v2(masterKey); + Recipient groupRecipient = Recipient.externalGroupExact(groupId); + GV2UpdateDescription updateDescription = GroupProtoUtil.createOutgoingGroupV2UpdateDescription(masterKey, groupMutation, signedGroupChange); + OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, updateDescription, System.currentTimeMillis()); DecryptedGroupChange plainGroupChange = groupMutation.getGroupChange(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java index 5b099dff15..fe6ef4edf1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupProtoUtil.java @@ -10,7 +10,13 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; +import org.thoughtcrime.securesms.backup.v2.proto.GroupChangeChatUpdate; +import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageConverter; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription; +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras; +import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.groupsv2.PartialDecryptedGroup; @@ -45,6 +51,19 @@ public static int findRevisionWeWereAdded(@NonNull PartialDecryptedGroup partial throw new GroupNotAMemberException(); } + public static GV2UpdateDescription createOutgoingGroupV2UpdateDescription(@NonNull GroupMasterKey masterKey, + @NonNull GroupMutation groupMutation, + @Nullable GroupChange signedServerChange) + { + DecryptedGroupV2Context groupV2Context = createDecryptedGroupV2Context(masterKey, groupMutation, signedServerChange); + GroupChangeChatUpdate update = GroupsV2UpdateMessageConverter.translateDecryptedChange(SignalStore.account().getServiceIds(), groupV2Context); + + return new GV2UpdateDescription.Builder() + .gv2ChangeDescription(groupV2Context) + .groupChangeUpdate(update) + .build(); + } + public static DecryptedGroupV2Context createDecryptedGroupV2Context(@NonNull GroupMasterKey masterKey, @NonNull GroupMutation groupMutation, @Nullable GroupChange signedServerChange) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java index 65a35ddea5..fc7a0e3328 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListAdapter.java @@ -257,6 +257,7 @@ void bindImageAndText(@NonNull Recipient recipient, @NonNull String displayText, if (this.badge != null) { this.badge.setBadgeFromRecipient(recipient); this.badge.setClickable(false); + this.badge.setVisibility(this.badge.isShowingBadge() ? View.VISIBLE : View.GONE); } if (this.about != null) { @@ -398,7 +399,7 @@ void bind(@NonNull GroupMemberEntry memberEntry, boolean isSelected) { GroupMemberEntry.PendingMember pendingMember = (GroupMemberEntry.PendingMember) memberEntry; - bindImageAndText(pendingMember.getInvitee(), pendingMember.getInvitee().getDisplayNameOrUsername(context), pendingMember.getInvitee().getCombinedAboutAndEmoji()); + bindImageAndText(pendingMember.getInvitee(), pendingMember.getInvitee().getDisplayName(context), pendingMember.getInvitee().getCombinedAboutAndEmoji()); bindRecipientClick(pendingMember.getInvitee()); if (pendingMember.isCancellable() && adminActionsListener != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java index 4e639613ed..1f7d7fb140 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java @@ -8,11 +8,13 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.DimensionUnit; +import org.signal.core.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.ContactSelectionActivity; import org.thoughtcrime.securesms.ContactSelectionListFragment; import org.thoughtcrime.securesms.PushContactSelectionActivity; @@ -21,9 +23,11 @@ import org.thoughtcrime.securesms.groups.SelectionLimits; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.recipients.RecipientRepository; import org.thoughtcrime.securesms.recipients.ui.findby.FindByActivity; import org.thoughtcrime.securesms.recipients.ui.findby.FindByMode; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.util.ArrayList; import java.util.Collections; @@ -104,9 +108,34 @@ public void onBeforeContactSelected(boolean isFromUnknownSearchKey, @NonNull Opt getContactFilterView().clear(); } - enableDone(); + if (recipientId.isPresent()) { + callback.accept(true); + enableDone(); + return; + } - callback.accept(true); + AlertDialog progress = SimpleProgressDialog.show(this); + + SimpleTask.run(getLifecycle(), () -> RecipientRepository.lookupNewE164(this, number), result -> { + progress.dismiss(); + + if (result instanceof RecipientRepository.LookupResult.Success) { + enableDone(); + callback.accept(true); + } else if (result instanceof RecipientRepository.LookupResult.NotFound || result instanceof RecipientRepository.LookupResult.InvalidEntry) { + new MaterialAlertDialogBuilder(this) + .setMessage(getString(R.string.NewConversationActivity__s_is_not_a_signal_user, number)) + .setPositiveButton(android.R.string.ok, null) + .show(); + callback.accept(false); + } else { + new MaterialAlertDialogBuilder(this) + .setMessage(R.string.NetworkFailure__network_error_check_your_connection_and_try_again) + .setPositiveButton(android.R.string.ok, null) + .show(); + callback.accept(false); + } + }); } @Override @@ -162,7 +191,7 @@ private void displayAlertMessage(@NonNull AddMembersViewModel.AddMemberDialogMes Recipient recipient = Util.firstNonNull(state.getRecipient(), Recipient.UNKNOWN); String message = getResources().getQuantityString(R.plurals.AddMembersActivity__add_d_members_to_s, state.getSelectionCount(), - recipient.getDisplayNameOrUsername(this), state.getGroupTitle(), state.getSelectionCount()); + recipient.getDisplayName(this), state.getGroupTitle(), state.getSelectionCount()); new MaterialAlertDialogBuilder(this) .setMessage(message) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java index 5303a7006d..40229da773 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java @@ -47,7 +47,7 @@ void onContinueWithSelection(@NonNull List groupRecipientIds) { SignalExecutors.BOUNDED.execute(() -> { Recipient recipient = Recipient.resolved(recipientId); Recipient groupRecipient = Recipient.resolved(groupRecipientIds.get(0)); - String recipientName = recipient.getDisplayNameOrUsername(context); + String recipientName = recipient.getDisplayName(context); String groupName = groupRecipient.getDisplayName(context); if (groupRecipient.getGroupId().get().isV1() && !recipient.hasE164()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java index 671fb9b711..4720470231 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java @@ -8,17 +8,21 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import org.signal.core.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.ContactSelectionActivity; import org.thoughtcrime.securesms.ContactSelectionListFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode; import org.thoughtcrime.securesms.groups.ui.addtogroup.AddToGroupViewModel.Event; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.recipients.RecipientRepository; +import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.util.ArrayList; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java index 1874f39d77..71957ab90b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java @@ -9,6 +9,7 @@ import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import com.google.android.material.button.MaterialButton; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -27,6 +28,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.recipients.RecipientRepository; import org.thoughtcrime.securesms.recipients.ui.findby.FindByActivity; import org.thoughtcrime.securesms.recipients.ui.findby.FindByMode; import org.thoughtcrime.securesms.util.FeatureFlags; @@ -115,7 +117,32 @@ public void onBeforeContactSelected(boolean isFromUnknownSearchKey, @NonNull Opt shrinkSkip(); - callback.accept(true); + if (recipientId.isPresent()) { + callback.accept(true); + return; + } + + AlertDialog progress = SimpleProgressDialog.show(this); + + SimpleTask.run(getLifecycle(), () -> RecipientRepository.lookupNewE164(this, number), result -> { + progress.dismiss(); + + if (result instanceof RecipientRepository.LookupResult.Success) { + callback.accept(true); + } else if (result instanceof RecipientRepository.LookupResult.NotFound || result instanceof RecipientRepository.LookupResult.InvalidEntry) { + new MaterialAlertDialogBuilder(this) + .setMessage(getString(R.string.NewConversationActivity__s_is_not_a_signal_user, number)) + .setPositiveButton(android.R.string.ok, null) + .show(); + callback.accept(false); + } else { + new MaterialAlertDialogBuilder(this) + .setMessage(R.string.NetworkFailure__network_error_check_your_connection_and_try_again) + .setPositiveButton(android.R.string.ok, null) + .show(); + callback.accept(false); + } + }); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupInviteSentDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupInviteSentDialog.java index 3661bb7cbe..61eaf68388 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupInviteSentDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/dialogs/GroupInviteSentDialog.java @@ -31,12 +31,9 @@ private GroupInviteSentDialog() { AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context) .setTitle(context.getResources().getQuantityString(R.plurals.GroupManagement_invitation_sent, size, size)) - // TODO: GV2 Need a URL for learn more - // .setNegativeButton(R.string.GroupManagement_learn_more, (dialog, which) -> { - // }) .setPositiveButton(android.R.string.ok, null); if (size == 1) { - builder.setMessage(context.getString(R.string.GroupManagement_invite_single_user, recipients.get(0).getDisplayNameOrUsername(context))); + builder.setMessage(context.getString(R.string.GroupManagement_invite_single_user, recipients.get(0).getDisplayName(context))); } else { builder.setMessage(R.string.GroupManagement_invite_multiple_users) .setView(R.layout.dialog_multiple_group_invites_sent); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java index 76c2d69772..110221a7fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java @@ -18,13 +18,16 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; +import org.thoughtcrime.securesms.backup.v2.proto.GroupChangeChatUpdate; import org.thoughtcrime.securesms.database.GroupTable; import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.ThreadTable; import org.thoughtcrime.securesms.database.model.GroupRecord; +import org.thoughtcrime.securesms.database.model.GroupsV2UpdateMessageConverter; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupDoesNotExistException; import org.thoughtcrime.securesms.groups.GroupId; @@ -573,8 +576,8 @@ private void insertGroupLeave() { .deleteMembers(Collections.singletonList(serviceIds.getAci().toByteString())) .build(); - DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(masterKey, new GroupMutation(decryptedGroup, simulatedGroupChange, simulatedGroupState), null); - OutgoingMessage leaveMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, decryptedGroupV2Context, System.currentTimeMillis()); + GV2UpdateDescription updateDescription = GroupProtoUtil.createOutgoingGroupV2UpdateDescription(masterKey, new GroupMutation(decryptedGroup, simulatedGroupChange, simulatedGroupState), null); + OutgoingMessage leaveMessage = OutgoingMessage.groupUpdateMessage(groupRecipient, updateDescription, System.currentTimeMillis()); try { MessageTable mmsDatabase = SignalDatabase.messages(); @@ -803,13 +806,18 @@ void storeMessage(@NonNull DecryptedGroupV2Context decryptedGroupV2Context, long boolean outgoing = !editor.isPresent() || aci.equals(editor.get()); + GV2UpdateDescription updateDescription = new GV2UpdateDescription.Builder() + .gv2ChangeDescription(decryptedGroupV2Context) + .groupChangeUpdate(GroupsV2UpdateMessageConverter.translateDecryptedChange(SignalStore.account().getServiceIds(), decryptedGroupV2Context)) + .build(); + if (outgoing) { try { MessageTable mmsDatabase = SignalDatabase.messages(); ThreadTable threadTable = SignalDatabase.threads(); RecipientId recipientId = recipientTable.getOrInsertFromGroupId(groupId); Recipient recipient = Recipient.resolved(recipientId); - OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(recipient, decryptedGroupV2Context, timestamp); + OutgoingMessage outgoingMessage = OutgoingMessage.groupUpdateMessage(recipient, updateDescription, timestamp); long threadId = threadTable.getOrCreateThreadIdFor(recipient); long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteActions.kt b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteActions.kt index b2b354295b..bc25e39238 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteActions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteActions.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.widget.Toast import androidx.annotation.MainThread import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.CommunicationActions /** @@ -23,27 +22,18 @@ object InviteActions { @MainThread fun inviteUserToSignal( context: Context, - recipient: Recipient, - appendInviteToComposer: ((String) -> Unit)?, launchIntent: (Intent) -> Unit ) { val inviteText = context.getString( R.string.ConversationActivity_lets_switch_to_signal, context.getString(R.string.install_url) ) + val intent = CommunicationActions.createIntentToShareTextViaShareSheet(inviteText) - if (recipient.hasSmsAddress()) { - launchIntent( - CommunicationActions.createIntentToComposeSmsThroughDefaultApp(recipient, inviteText) - ) + if (intent.resolveActivity(context.packageManager) != null) { + launchIntent(Intent.createChooser(intent, context.getString(R.string.InviteActivity_invite_to_signal))) } else { - val intent = CommunicationActions.createIntentToShareTextViaShareSheet(inviteText) - - if (intent.resolveActivity(context.packageManager) != null) { - launchIntent(Intent.createChooser(intent, context.getString(R.string.InviteActivity_invite_to_signal))) - } else { - Toast.makeText(context, R.string.InviteActivity_no_app_to_share_to, Toast.LENGTH_LONG).show() - } + Toast.makeText(context, R.string.InviteActivity_no_app_to_share_to, Toast.LENGTH_LONG).show() } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index 5bc9c6f3c0..f11124f9a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -40,10 +40,10 @@ import org.thoughtcrime.securesms.util.MemoryFileDescriptor.MemoryFileException; import org.thoughtcrime.securesms.video.InMemoryTranscoder; import org.thoughtcrime.securesms.video.StreamingTranscoder; -import org.thoughtcrime.securesms.video.exceptions.VideoPostProcessingException; -import org.thoughtcrime.securesms.video.interfaces.TranscoderCancelationSignal; import org.thoughtcrime.securesms.video.TranscoderOptions; +import org.thoughtcrime.securesms.video.exceptions.VideoPostProcessingException; import org.thoughtcrime.securesms.video.exceptions.VideoSourceException; +import org.thoughtcrime.securesms.video.interfaces.TranscoderCancelationSignal; import org.thoughtcrime.securesms.video.postprocessing.Mp4FaststartPostProcessor; import org.thoughtcrime.securesms.video.videoconverter.exceptions.EncodingException; @@ -258,7 +258,7 @@ private void compress(@NonNull AttachmentTable attachmentDatabase, } if (FeatureFlags.useStreamingVideoMuxer()) { - StreamingTranscoder transcoder = new StreamingTranscoder(dataSource, options, constraints.getCompressedVideoMaxSize(context), FeatureFlags.allowAudioRemuxing()); + StreamingTranscoder transcoder = new StreamingTranscoder(dataSource, options, constraints.getVideoTranscodingSettings(), constraints.getCompressedVideoMaxSize(context), FeatureFlags.allowAudioRemuxing()); if (transcoder.isTranscodeRequired()) { Log.i(TAG, "Compressing with streaming muxer"); @@ -327,7 +327,7 @@ private void compress(@NonNull AttachmentTable attachmentDatabase, Log.i(TAG, "Transcode was not required"); } } else { - try (InMemoryTranscoder transcoder = new InMemoryTranscoder(context, dataSource, options, constraints.getCompressedVideoMaxSize(context))) { + try (InMemoryTranscoder transcoder = new InMemoryTranscoder(context, dataSource, options, constraints.getVideoTranscodingSettings(), constraints.getCompressedVideoMaxSize(context))) { if (transcoder.isTranscodeRequired()) { Log.i(TAG, "Compressing with android in-memory muxer"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLinkUpdateSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLinkUpdateSendJob.kt index 6abe96571f..3a37011999 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLinkUpdateSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLinkUpdateSendJob.kt @@ -26,7 +26,8 @@ import java.util.concurrent.TimeUnit */ class CallLinkUpdateSendJob private constructor( parameters: Parameters, - private val callLinkRoomId: CallLinkRoomId + private val callLinkRoomId: CallLinkRoomId, + private val callLinkUpdateType: CallLinkUpdate.Type ) : BaseJob(parameters) { companion object { @@ -35,7 +36,8 @@ class CallLinkUpdateSendJob private constructor( } constructor( - callLinkRoomId: CallLinkRoomId + callLinkRoomId: CallLinkRoomId, + callLinkUpdateType: CallLinkUpdate.Type = CallLinkUpdate.Type.UPDATE ) : this( Parameters.Builder() .setQueue("CallLinkUpdateSendJob") @@ -43,11 +45,18 @@ class CallLinkUpdateSendJob private constructor( .setMaxAttempts(Parameters.UNLIMITED) .addConstraint(NetworkConstraint.KEY) .build(), - callLinkRoomId + callLinkRoomId, + callLinkUpdateType ) override fun serialize(): ByteArray = CallLinkUpdateSendJobData.Builder() .callLinkRoomId(callLinkRoomId.serialize()) + .type( + when (callLinkUpdateType) { + CallLinkUpdate.Type.UPDATE -> CallLinkUpdateSendJobData.Type.UPDATE + CallLinkUpdate.Type.DELETE -> CallLinkUpdateSendJobData.Type.DELETE + } + ) .build() .encode() @@ -67,10 +76,17 @@ class CallLinkUpdateSendJob private constructor( return } - val callLinkUpdate = CallLinkUpdate(rootKey = callLink.credentials.linkKeyBytes.toByteString()) + val callLinkUpdate = CallLinkUpdate( + rootKey = callLink.credentials.linkKeyBytes.toByteString(), + type = callLinkUpdateType + ) ApplicationDependencies.getSignalServiceMessageSender() .sendSyncMessage(SignalServiceSyncMessage.forCallLinkUpdate(callLinkUpdate), Optional.empty()) + + if (callLinkUpdateType == CallLinkUpdate.Type.DELETE) { + SignalDatabase.callLinks.deleteCallLink(callLinkRoomId) + } } override fun onShouldRetry(e: Exception): Boolean { @@ -83,9 +99,16 @@ class CallLinkUpdateSendJob private constructor( class Factory : Job.Factory { override fun create(parameters: Parameters, serializedData: ByteArray?): CallLinkUpdateSendJob { + val jobData = CallLinkUpdateSendJobData.ADAPTER.decode(serializedData!!) + val type: CallLinkUpdate.Type = when (jobData.type) { + CallLinkUpdateSendJobData.Type.UPDATE, null -> CallLinkUpdate.Type.UPDATE + CallLinkUpdateSendJobData.Type.DELETE -> CallLinkUpdate.Type.DELETE + } + return CallLinkUpdateSendJob( parameters, - CallLinkRoomId.DatabaseSerializer.deserialize(CallLinkUpdateSendJobData.ADAPTER.decode(serializedData!!).callLinkRoomId) + CallLinkRoomId.DatabaseSerializer.deserialize(jobData.callLinkRoomId), + type ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLogEventSendJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLogEventSendJob.kt index 78412cb8b1..992b76f93f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLogEventSendJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CallLogEventSendJob.kt @@ -41,6 +41,21 @@ class CallLogEventSendJob private constructor( type = SyncMessage.CallLogEvent.Type.CLEAR ) ) + + fun forMarkedAsRead( + timestamp: Long + ) = CallLogEventSendJob( + Parameters.Builder() + .setQueue("CallLogEventSendJob") + .setLifespan(TimeUnit.DAYS.toMillis(1)) + .setMaxAttempts(Parameters.UNLIMITED) + .addConstraint(NetworkConstraint.KEY) + .build(), + SyncMessage.CallLogEvent( + timestamp = timestamp, + type = SyncMessage.CallLogEvent.Type.MARKED_AS_READ + ) + ) } override fun serialize(): ByteArray = CallLogEventSendJobData.Builder() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index c9da62233a..65def2640c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -33,6 +33,7 @@ import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.transport.UndeliverableMessageException; +import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.IndividualSendEvents; @@ -140,6 +141,8 @@ public void onAdded() { public void onPushSend() throws IOException, MmsException, NoSuchMessageException, UndeliverableMessageException, RetryLaterException { + SignalLocalMetrics.IndividualMessageSend.onJobStarted(messageId); + ExpiringMessageManager expirationManager = ApplicationDependencies.getExpiringMessageManager(); MessageTable database = SignalDatabase.messages(); OutgoingMessage message = database.getOutgoingMessage(messageId); @@ -216,10 +219,19 @@ public void onPushSend() } catch (ProofRequiredException e) { handleProofRequiredException(context, e, SignalDatabase.threads().getRecipientForThreadId(threadId), threadId, messageId, true); } + + SignalLocalMetrics.IndividualMessageSend.onJobFinished(messageId); + } + + @Override + public void onRetry() { + SignalLocalMetrics.IndividualMessageSend.cancel(messageId); + super.onRetry(); } @Override public void onFailure() { + SignalLocalMetrics.IndividualMessageSend.cancel(messageId); SignalDatabase.messages().markAsSentFailed(messageId); notifyMediaMessageDeliveryFailed(context, messageId); } @@ -312,7 +324,8 @@ private boolean deliver(OutgoingMessage message, MessageRecord originalEditedMes SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), false); return syncAccess.isPresent(); } else { - SendMessageResult result = messageSender.sendDataMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, IndividualSendEvents.EMPTY, message.isUrgent(), messageRecipient.needsPniSignature()); + SignalLocalMetrics.IndividualMessageSend.onDeliveryStarted(messageId); + SendMessageResult result = messageSender.sendDataMessage(address, UnidentifiedAccessUtil.getAccessFor(context, messageRecipient), ContentHint.RESENDABLE, mediaMessage, new MetricEventListener(messageId), message.isUrgent(), messageRecipient.needsPniSignature()); SignalDatabase.messageLog().insertIfPossible(messageRecipient.getId(), message.getSentTimeMillis(), result, ContentHint.RESENDABLE, new MessageId(messageId), message.isUrgent()); @@ -370,6 +383,28 @@ public static long getMessageId(@Nullable byte[] serializedData) { JsonJobData data = JsonJobData.deserialize(serializedData); return data.getLong(KEY_MESSAGE_ID); } + private static class MetricEventListener implements SignalServiceMessageSender.IndividualSendEvents { + private final long messageId; + + private MetricEventListener(long messageId) { + this.messageId = messageId; + } + + @Override + public void onMessageEncrypted() { + SignalLocalMetrics.IndividualMessageSend.onMessageEncrypted(messageId); + } + + @Override + public void onMessageSent() { + SignalLocalMetrics.IndividualMessageSend.onMessageSent(messageId); + } + + @Override + public void onSyncMessageSent() { + SignalLocalMetrics.IndividualMessageSend.onSyncMessageSent(messageId); + } + } public static final class Factory implements Job.Factory { @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt index f3b51d7a59..2f216142fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt @@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.protos.PreKeysSyncJobData import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.FeatureFlags +import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SignalServiceAccountDataStore import org.whispersystems.signalservice.api.account.PreKeyUpload import org.whispersystems.signalservice.api.push.ServiceId @@ -22,7 +23,9 @@ import org.whispersystems.signalservice.api.push.ServiceIdType import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import org.whispersystems.signalservice.internal.push.OneTimePreKeyCounts +import java.io.IOException import java.util.concurrent.TimeUnit +import kotlin.jvm.Throws import kotlin.time.Duration.Companion.days import kotlin.time.Duration.Companion.milliseconds import kotlin.time.DurationUnit @@ -121,9 +124,17 @@ class PreKeysSyncJob private constructor( } val forceRotation = if (forceRotationRequested) { - val timeSinceLastForcedRotation = System.currentTimeMillis() - SignalStore.misc().lastForcedPreKeyRefresh - // We check < 0 in case someone changed their clock and had a bad value set - timeSinceLastForcedRotation > FeatureFlags.preKeyForceRefreshInterval() || timeSinceLastForcedRotation < 0 + if (!checkPreKeyConsistency(ServiceIdType.ACI, ApplicationDependencies.getProtocolStore().aci(), SignalStore.account().aciPreKeys)) { + warn(TAG, ServiceIdType.ACI, "Prekey consistency check failed! Must rotate keys!") + true + } else if (!checkPreKeyConsistency(ServiceIdType.PNI, ApplicationDependencies.getProtocolStore().pni(), SignalStore.account().pniPreKeys)) { + warn(TAG, ServiceIdType.PNI, "Prekey consistency check failed! Must rotate keys!") + true + } else { + val timeSinceLastForcedRotation = System.currentTimeMillis() - SignalStore.misc().lastForcedPreKeyRefresh + // We check < 0 in case someone changed their clock and had a bad value set + timeSinceLastForcedRotation > FeatureFlags.preKeyForceRefreshInterval() || timeSinceLastForcedRotation < 0 + } } else { false } @@ -240,6 +251,29 @@ class PreKeysSyncJob private constructor( } } + @Throws(IOException::class) + private fun checkPreKeyConsistency(serviceIdType: ServiceIdType, protocolStore: SignalServiceAccountDataStore, metadataStore: PreKeyMetadataStore): Boolean { + val result: NetworkResult = ApplicationDependencies.getSignalServiceAccountManager().keysApi.checkRepeatedUseKeys( + serviceIdType = serviceIdType, + identityKey = protocolStore.identityKeyPair.publicKey, + signedPreKeyId = metadataStore.activeSignedPreKeyId, + signedPreKey = protocolStore.loadSignedPreKey(metadataStore.activeSignedPreKeyId).keyPair.publicKey, + lastResortKyberKeyId = metadataStore.lastResortKyberPreKeyId, + lastResortKyberKey = protocolStore.loadKyberPreKey(metadataStore.lastResortKyberPreKeyId).keyPair.publicKey + ) + + return when (result) { + is NetworkResult.Success -> true + is NetworkResult.NetworkError -> throw result.throwable ?: PushNetworkException("Network error") + is NetworkResult.ApplicationError -> throw result.throwable + is NetworkResult.StatusCodeError -> if (result.code == 409) { + false + } else { + throw NonSuccessfulResponseCodeException(result.code) + } + } + } + override fun onShouldRetry(e: Exception): Boolean { return when (e) { is NonSuccessfulResponseCodeException -> false diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index 9d174a1ac8..577c2f1efe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -492,7 +492,11 @@ static void processGroupMessageResults(@NonNull Context context, } else if (!networkFailures.isEmpty()) { long retryAfter = results.stream() .filter(r -> r.getRateLimitFailure() != null) - .map(r -> r.getRateLimitFailure().getRetryAfterMilliseconds().orElse(-1L)) + .map(r -> { + long milliseconds = r.getRateLimitFailure().getRetryAfterMilliseconds().orElse(-1L); + return (milliseconds > 0) ? milliseconds : -1L; + } + ) .max(Long::compare) .orElse(-1L); Log.w(TAG, "Retrying because there were " + networkFailures.size() + " network failures. retryAfter: " + retryAfter); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.kt index 98e3199105..69b62d601f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.kt @@ -54,6 +54,12 @@ class RetrieveProfileJob private constructor(parameters: Parameters, private val constructor(recipientIds: Set) : this( Parameters.Builder() .addConstraint(NetworkConstraint.KEY) + .apply { + if (recipientIds.size < 5) { + setQueue(recipientIds.map { it.toLong() }.sorted().joinToString(separator = "_", prefix = QUEUE_PREFIX)) + setMaxInstancesForQueue(2) + } + } .setMaxAttempts(3) .build(), recipientIds.toMutableSet() @@ -350,6 +356,16 @@ class RetrieveProfileJob private constructor(parameters: Parameters, private val val remoteProfileName = ProfileName.fromSerialized(plaintextProfileName) val localProfileName = recipient.profileName + if (localProfileName.isEmpty && + !recipient.isSystemContact && + recipient.isProfileSharing && + !recipient.isGroup && + !recipient.isSelf + ) { + Log.i(TAG, "Learned profile name for first time, insert event") + SignalDatabase.messages.insertLearnedProfileNameChangeMessage(recipient, recipient.getDisplayName(context)) + } + if (remoteProfileName != localProfileName) { Log.i(TAG, "Profile name updated. Writing new value.") SignalDatabase.recipients.setProfileName(recipient.id, remoteProfileName) @@ -476,6 +492,7 @@ class RetrieveProfileJob private constructor(parameters: Parameters, private val private val TAG = Log.tag(RetrieveProfileJob::class.java) private const val KEY_RECIPIENTS = "recipients" private const val DEDUPE_KEY_RETRIEVE_AVATAR = KEY + "_RETRIEVE_PROFILE_AVATAR" + private const val QUEUE_PREFIX = "RetrieveProfileJob_" /** * Submits the necessary job to refresh the profile of the requested recipient. Works for any diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java index 14b73b256f..b2f60f08f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java @@ -5,6 +5,7 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; +import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.message.DecryptionErrorMessage; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -119,7 +120,7 @@ public static final class Factory implements Job.Factory { } return new SendRetryReceiptJob(recipientId, groupId, errorMessage, parameters); - } catch (InvalidMessageException e) { + } catch (InvalidKeyException | InvalidMessageException e) { throw new AssertionError(e); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt index d05ffe9587..d94bb5edd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/KeyboardPagerFragment.kt @@ -4,6 +4,8 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.view.Window +import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import org.thoughtcrime.securesms.R @@ -57,10 +59,12 @@ class KeyboardPagerFragment : Fragment(), InputAwareConstraintLayout.InputFragme } override fun onHiddenChanged(hidden: Boolean) { - if (hidden) { - WindowUtil.setNavigationBarColor(requireActivity(), ThemeUtil.getThemedColor(requireContext(), android.R.attr.navigationBarColor)) - } else { - WindowUtil.setNavigationBarColor(requireActivity(), ThemeUtil.getThemedColor(requireContext(), R.attr.mediaKeyboardBottomBarBackgroundColor)) + getWindow()?.let { window -> + if (hidden) { + WindowUtil.setNavigationBarColor(requireContext(), window, ThemeUtil.getThemedColor(requireContext(), android.R.attr.navigationBarColor)) + } else { + WindowUtil.setNavigationBarColor(requireContext(), window, ThemeUtil.getThemedColor(requireContext(), R.attr.mediaKeyboardBottomBarBackgroundColor)) + } } } @@ -70,6 +74,19 @@ class KeyboardPagerFragment : Fragment(), InputAwareConstraintLayout.InputFragme viewModel.page().value?.let(this::onPageSelected) } + private fun getWindow(): Window? { + var parent: Fragment? = parentFragment + while (parent != null) { + if (parent is DialogFragment) { + return parent.dialog?.window + } + + parent = parent.parentFragment + } + + return activity?.window + } + private fun onPageSelected(page: KeyboardPage) { emojiButton.isSelected = page == KeyboardPage.EMOJI stickerButton.isSelected = page == KeyboardPage.STICKER diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java index ee4259b5dc..de9b13beca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/MiscellaneousValues.java @@ -40,6 +40,7 @@ public final class MiscellaneousValues extends SignalStoreValues { private static final String LAST_SERVER_TIME_OFFSET_UPDATE = "misc.last_server_time_offset_update"; private static final String NEEDS_USERNAME_RESTORE = "misc.needs_username_restore"; private static final String LAST_FORCED_PREKEY_REFRESH = "misc.last_forced_prekey_refresh"; + private static final String LAST_CDS_FOREGROUND_SYNC = "misc.last_cds_foreground_sync"; MiscellaneousValues(@NonNull KeyValueStore store) { super(store); @@ -354,4 +355,18 @@ public void setLastForcedPreKeyRefresh(long time) { public long getLastForcedPreKeyRefresh() { return getLong(LAST_FORCED_PREKEY_REFRESH, 0); } + + /** + * How long it's been since the last foreground CDS sync, which we do in response to new threads being created. + */ + public long getLastCdsForegroundSyncTime() { + return getLong(LAST_CDS_FOREGROUND_SYNC, 0); + } + + /** + * Set the last time we did a foreground CDS sync. + */ + public void setLastCdsForegroundSyncTime(long time) { + putLong(LAST_CDS_FOREGROUND_SYNC, time); + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java index 2453ee32b2..28144402d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java @@ -194,7 +194,15 @@ public void onResponse(@NonNull Call call, @NonNull Response response) throws IO return; } - String body = OkHttpUtil.readAsString(response.body(), FAILSAFE_MAX_TEXT_SIZE); + String body; + try { + body = OkHttpUtil.readAsString(response.body(), FAILSAFE_MAX_TEXT_SIZE); + } catch (IOException e) { + Log.w(TAG, "Failed to read body", e); + callback.accept(Metadata.empty()); + return; + } + OpenGraph openGraph = LinkPreviewUtil.parseOpenGraphFields(body); Optional title = openGraph.getTitle(); Optional description = openGraph.getDescription(); @@ -240,7 +248,7 @@ public void onResponse(@NonNull Call call, @NonNull Response response) throws IO bitmap, maxDimension, mediaConfig.getMaxImageFileSize(), - mediaConfig.getQualitySetting() + mediaConfig.getImageQualitySetting() ); if (result != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java index 1a89ad3fa6..a14b706d83 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageFragment.java @@ -3,8 +3,6 @@ import android.graphics.PorterDuff; import android.os.Bundle; import android.text.SpannableString; -import android.text.style.URLSpan; -import android.text.util.Linkify; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; @@ -13,21 +11,19 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.ContextCompat; -import androidx.core.text.util.LinkifyCompat; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; -import com.annimon.stream.Stream; - import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.ConversationItemFooter; import org.thoughtcrime.securesms.components.FullScreenDialogFragment; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; import org.thoughtcrime.securesms.conversation.ConversationItemDisplayMode; import org.thoughtcrime.securesms.conversation.colors.ColorizerView; +import org.thoughtcrime.securesms.conversation.v2.items.V2ConversationItemUtils; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.LinkUtil; +import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.LongClickMovementMethod; import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.ThemeUtil; @@ -126,11 +122,14 @@ private void initViewModel(long messageId, boolean isMms) { EmojiTextView text = bubble.findViewById(R.id.longmessage_text); ConversationItemFooter footer = bubble.findViewById(R.id.longmessage_footer); - CharSequence trimmedBody = getTrimmedBody(message.get().getFullBody(requireContext())); - SpannableString styledBody = linkifyMessageBody(new SpannableString(trimmedBody)); + SpannableString body = new SpannableString(getTrimmedBody(message.get().getFullBody(requireContext()))); + V2ConversationItemUtils.linkifyUrlLinks(body, + true, + url -> CommunicationActions.handlePotentialGroupLinkUrl(requireActivity(), url) || + CommunicationActions.handlePotentialProxyLinkUrl(requireActivity(), url)); bubble.setVisibility(View.VISIBLE); - text.setText(styledBody); + text.setText(body); text.setMovementMethod(LongClickMovementMethod.getInstance(getContext())); text.setTextSize(TypedValue.COMPLEX_UNIT_SP, SignalStore.settings().getMessageFontSize()); if (!message.get().getMessageRecord().isOutgoing()) { @@ -147,18 +146,6 @@ private CharSequence getTrimmedBody(@NonNull CharSequence text) { : text.subSequence(0, MAX_DISPLAY_LENGTH); } - private SpannableString linkifyMessageBody(SpannableString messageBody) { - int linkPattern = Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS; - boolean hasLinks = LinkifyCompat.addLinks(messageBody, linkPattern); - - if (hasLinks) { - Stream.of(messageBody.getSpans(0, messageBody.length(), URLSpan.class)) - .filterNot(url -> LinkUtil.isLegalUrl(url.getURL())) - .forEach(messageBody::removeSpan); - } - return messageBody; - } - private final class BubbleLayoutListener implements View.OnLayoutChangeListener { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/media/FileMediaInput.kt b/app/src/main/java/org/thoughtcrime/securesms/media/FileMediaInput.kt index a35039c808..84b23f1b9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/media/FileMediaInput.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/media/FileMediaInput.kt @@ -20,5 +20,9 @@ class FileMediaInput(private val file: File) : MediaInput { return extractor } + override fun hasSameInput(other: MediaInput): Boolean { + return other is FileMediaInput && other.file == this.file + } + override fun close() {} } diff --git a/app/src/main/java/org/thoughtcrime/securesms/media/UriMediaInput.kt b/app/src/main/java/org/thoughtcrime/securesms/media/UriMediaInput.kt index 83c01decf4..b94cd58fe5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/media/UriMediaInput.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/media/UriMediaInput.kt @@ -21,5 +21,9 @@ class UriMediaInput(private val context: Context, private val uri: Uri) : MediaI return extractor } - override fun close() {} + override fun hasSameInput(other: MediaInput): Boolean { + return other is UriMediaInput && other.uri == this.uri + } + + override fun close() = Unit } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java index d8b359d585..3251783233 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java @@ -181,18 +181,20 @@ public void onCancelEditing() { @Override public void onMainImageLoaded() { - } @Override public void onMainImageFailedToLoad() { - } @Override public void restoreState() { } + @Override + public void onQrCodeFound(@NonNull String data) { + } + public boolean popToRoot() { final int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); if (backStackCount == 0) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactSelectionAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactSelectionAdapter.java index 752574f548..96e7214f7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactSelectionAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraContactSelectionAdapter.java @@ -60,7 +60,7 @@ static class RecipientViewHolder extends RecyclerView.ViewHolder { } void bind(@NonNull Recipient recipient, boolean isLast) { - name.setText(recipient, true, isLast ? null : ","); + name.setText(recipient, isLast ? null : ","); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java index b6bc6c4681..aa64a91b2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java @@ -22,9 +22,9 @@ public interface CameraFragment { float PORTRAIT_ASPECT_RATIO = 9 / 16f; @SuppressLint({ "RestrictedApi", "UnsafeOptInUsageError" }) - static Fragment newInstance() { + static Fragment newInstance(boolean qrScanEnabled) { if (CameraXUtil.isSupported()) { - return CameraXFragment.newInstance(); + return CameraXFragment.newInstance(qrScanEnabled); } else { return Camera1Fragment.newInstance(); } @@ -63,6 +63,7 @@ interface Controller { void onVideoCaptureError(); void onGalleryClicked(); void onCameraCountButtonClicked(); + void onQrCodeFound(@NonNull String data); @NonNull Flowable> getMostRecentMediaItem(); @NonNull MediaConstraints getMediaConstraints(); int getMaxVideoDuration(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java index fbba84d920..2d19f0ae17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -15,6 +15,7 @@ import android.view.GestureDetector; import android.view.LayoutInflater; import android.view.MotionEvent; +import android.view.OrientationEventListener; import android.view.Surface; import android.view.View; import android.view.ViewGroup; @@ -27,26 +28,24 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.camera.core.CameraSelector; +import androidx.camera.core.ImageAnalysis; import androidx.camera.core.ImageCapture; import androidx.camera.core.ImageCaptureException; import androidx.camera.core.ImageProxy; -import androidx.camera.video.FallbackStrategy; -import androidx.camera.video.Quality; -import androidx.camera.video.QualitySelector; -import androidx.camera.view.CameraController; -import androidx.camera.view.LifecycleCameraController; +import androidx.camera.core.resolutionselector.ResolutionSelector; +import androidx.camera.core.resolutionselector.ResolutionStrategy; import androidx.camera.view.PreviewView; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintSet; import androidx.core.content.ContextCompat; import com.bumptech.glide.Glide; -import com.bumptech.glide.util.Executors; import com.google.android.material.card.MaterialCardView; import org.signal.core.util.Stopwatch; import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; +import org.signal.qr.QrProcessor; import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.AnimationCompleteListener; @@ -54,6 +53,7 @@ import org.thoughtcrime.securesms.mediasend.camerax.CameraXFlashToggleView; import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy; import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; +import org.thoughtcrime.securesms.mediasend.camerax.SignalCameraController; import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations; import org.thoughtcrime.securesms.mediasend.v2.MediaCountIndicatorButton; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; @@ -65,6 +65,8 @@ import java.io.FileDescriptor; import java.io.IOException; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.Disposable; @@ -75,8 +77,9 @@ */ public class CameraXFragment extends LoggingFragment implements CameraFragment { - private static final String TAG = Log.tag(CameraXFragment.class); - private static final String IS_VIDEO_ENABLED = "is_video_enabled"; + private static final String TAG = Log.tag(CameraXFragment.class); + private static final String IS_VIDEO_ENABLED = "is_video_enabled"; + private static final String IS_QR_SCAN_ENABLED = "is_qr_scan_enabled"; private static final Rational ASPECT_RATIO_16_9 = new Rational(16, 9); @@ -87,30 +90,37 @@ public class CameraXFragment extends LoggingFragment implements CameraFragment { private Controller controller; private View selfieFlash; private MemoryFileDescriptor videoFileDescriptor; - private LifecycleCameraController cameraController; + private SignalCameraController cameraController; + private CameraXOrientationListener orientationListener; private Disposable mostRecentItemDisposable = Disposable.disposed(); private CameraXModePolicy cameraXModePolicy; private CameraScreenBrightnessController cameraScreenBrightnessController; private boolean isMediaSelected; + private final Executor qrAnalysisExecutor = Executors.newSingleThreadExecutor(); + private final QrProcessor qrProcessor = new QrProcessor(); + public static CameraXFragment newInstanceForAvatarCapture() { CameraXFragment fragment = new CameraXFragment(); Bundle args = new Bundle(); args.putBoolean(IS_VIDEO_ENABLED, false); + args.putBoolean(IS_QR_SCAN_ENABLED, false); fragment.setArguments(args); return fragment; } - public static CameraXFragment newInstance() { + public static CameraXFragment newInstance(boolean qrScanEnabled) { CameraXFragment fragment = new CameraXFragment(); - fragment.setArguments(new Bundle()); + Bundle args = new Bundle(); + args.putBoolean(IS_QR_SCAN_ENABLED, qrScanEnabled); + + fragment.setArguments(args); return fragment; } - @Override public void onAttach(@NonNull Context context) { super.onAttach(context); @@ -124,6 +134,8 @@ public void onAttach(@NonNull Context context) { if (controller == null) { throw new IllegalStateException("Parent must implement controller interface."); } + + this.orientationListener = new CameraXOrientationListener(context); } @Override @@ -144,11 +156,9 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat Log.d(TAG, "Starting CameraX with mode policy " + cameraXModePolicy.getClass().getSimpleName()); - cameraController = new LifecycleCameraController(requireContext()); - cameraController.bindToLifecycle(getViewLifecycleOwner()); - cameraController.setCameraSelector(CameraXUtil.toCameraSelector(TextSecurePreferences.getDirectCaptureCameraId(requireContext()))); - cameraController.setTapToFocusEnabled(true); - cameraController.setImageCaptureMode(CameraXUtil.getOptimalCaptureMode()); + View focusIndicator = view.findViewById(R.id.camerax_focus_indicator); + + cameraController = new SignalCameraController(requireContext(), getViewLifecycleOwner(), previewView, focusIndicator); cameraXModePolicy.initialize(cameraController); cameraScreenBrightnessController = new CameraScreenBrightnessController( @@ -157,9 +167,29 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat ); previewView.setScaleType(PREVIEW_SCALE_TYPE); - previewView.setController(cameraController); onOrientationChanged(); + cameraController.bindToLifecycle(() -> Log.d(TAG, "Camera init complete from onViewCreated")); + + if (requireArguments().getBoolean(IS_QR_SCAN_ENABLED, false)) { + ImageAnalysis imageAnalysis = new ImageAnalysis.Builder() + .setResolutionSelector(new ResolutionSelector.Builder().setResolutionStrategy(ResolutionStrategy.HIGHEST_AVAILABLE_STRATEGY).build()) + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) + .build(); + + imageAnalysis.setAnalyzer(qrAnalysisExecutor, imageProxy -> { + try { + String data = qrProcessor.getScannedData(imageProxy); + if (data != null) { + controller.onQrCodeFound(data); + } + } finally { + imageProxy.close(); + } + }); + + cameraController.addUseCase(imageAnalysis); + } view.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { // Let's assume portrait for now, so 9:16 @@ -175,16 +205,29 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat params.height = (int) height; cameraParent.setLayoutParams(params); - cameraController.setPreviewTargetSize(new CameraController.OutputSize(new Size((int) width, (int) height))); + cameraController.setPreviewTargetSize(new Size((int) width, (int) height)); } }); } + @Override + public void onStart() { + super.onStart(); + orientationListener.enable(); + } + + @Override + public void onStop() { + super.onStop(); + orientationListener.disable(); + } + @Override public void onResume() { super.onResume(); - cameraController.bindToLifecycle(getViewLifecycleOwner()); + cameraController.bindToLifecycle(() -> Log.d(TAG, "Camera init complete from onResume")); + requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } @@ -237,10 +280,8 @@ private void onOrientationChanged() { int resolution = CameraXUtil.getIdealResolution(Resources.getSystem().getDisplayMetrics().widthPixels, Resources.getSystem().getDisplayMetrics().heightPixels); Size size = CameraXUtil.buildResolutionForRatio(resolution, ASPECT_RATIO_16_9, true); - CameraController.OutputSize outputSize = new CameraController.OutputSize(size); - cameraController.setImageCaptureTargetSize(outputSize); - cameraController.setVideoCaptureQualitySelector(QualitySelector.from(Quality.HD, FallbackStrategy.lowerQualityThan(Quality.HD))); + cameraController.setImageCaptureTargetSize(size); controlsContainer.removeAllViews(); controlsContainer.addView(LayoutInflater.from(getContext()).inflate(layout, controlsContainer, false)); @@ -339,8 +380,7 @@ private void initControls() { previewView.setScaleType(PREVIEW_SCALE_TYPE); - cameraController.getInitializationFuture() - .addListener(() -> initializeFlipButton(flipButton, flashButton), Executors.mainThreadExecutor()); + cameraController.addInitializationCompletedListener(cameraProvider -> initializeFlipButton(flipButton, flashButton)); flashButton.setAutoFlashEnabled(cameraController.getImageCaptureFlashMode() >= ImageCapture.FLASH_MODE_AUTO); flashButton.setFlash(cameraController.getImageCaptureFlashMode()); @@ -476,7 +516,7 @@ private void onCaptureClicked() { ); flashHelper.onWillTakePicture(); - cameraController.takePicture(Executors.mainThreadExecutor(), new ImageCapture.OnImageCapturedCallback() { + cameraController.takePicture(ContextCompat.getMainExecutor(requireContext()), new ImageCapture.OnImageCapturedCallback() { @Override public void onCaptureSuccess(@NonNull ImageProxy image) { flashHelper.endFlash(); @@ -505,8 +545,8 @@ public void onCaptureSuccess(@NonNull ImageProxy image) { } @Override - public void onError(ImageCaptureException exception) { - Log.w(TAG, "Failed to capture image", exception); + public void onError(@NonNull ImageCaptureException exception) { + Log.w(TAG, "Failed to capture image due to error " + exception.getImageCaptureError(), exception.getCause()); flashHelper.endFlash(); controller.onCameraError(); } @@ -571,9 +611,9 @@ public boolean onDoubleTap(MotionEvent e) { private static class CameraStateProvider implements CameraScreenBrightnessController.CameraStateProvider { - private final CameraController cameraController; + private final SignalCameraController cameraController; - private CameraStateProvider(CameraController cameraController) { + private CameraStateProvider(SignalCameraController cameraController) { this.cameraController = cameraController; } @@ -587,4 +627,18 @@ public boolean isFlashEnabled() { return cameraController.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON; } } + + private class CameraXOrientationListener extends OrientationEventListener { + + public CameraXOrientationListener(Context context) { + super(context); + } + + @Override + public void onOrientationChanged(int orientation) { + if (cameraController != null) { + cameraController.setImageRotation(orientation); + } + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java index b299d45792..fd516e2861 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXSelfieFlashHelper.java @@ -7,23 +7,24 @@ import androidx.annotation.NonNull; import androidx.camera.core.CameraSelector; import androidx.camera.core.ImageCapture; -import androidx.camera.view.CameraController; + +import org.thoughtcrime.securesms.mediasend.camerax.SignalCameraController; final class CameraXSelfieFlashHelper { private static final float MAX_SCREEN_BRIGHTNESS = 1f; private static final float MAX_SELFIE_FLASH_ALPHA = 0.9f; - private final Window window; - private final CameraController camera; - private final View selfieFlash; + private final Window window; + private final SignalCameraController camera; + private final View selfieFlash; private float brightnessBeforeFlash; private boolean inFlash; private int flashMode = -1; CameraXSelfieFlashHelper(@NonNull Window window, - @NonNull CameraController camera, + @NonNull SignalCameraController camera, @NonNull View selfieFlash) { this.window = window; @@ -68,7 +69,7 @@ void endFlash() { } private boolean shouldUseViewBasedFlash() { - CameraSelector cameraSelector = camera.getCameraSelector() ; + CameraSelector cameraSelector = camera.getCameraSelector(); return (camera.getImageCaptureFlashMode() == ImageCapture.FLASH_MODE_ON || flashMode == ImageCapture.FLASH_MODE_ON) && cameraSelector == CameraSelector.DEFAULT_FRONT_CAMERA; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java index 77d50bbd1c..b387698931 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXVideoCaptureHelper.java @@ -17,7 +17,6 @@ import androidx.camera.video.FileDescriptorOutputOptions; import androidx.camera.video.Recording; import androidx.camera.video.VideoRecordEvent; -import androidx.camera.view.CameraController; import androidx.camera.view.PreviewView; import androidx.camera.view.video.AudioConfig; import androidx.core.util.Consumer; @@ -27,6 +26,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.mediasend.camerax.SignalCameraController; import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.ContextUtil; @@ -47,14 +47,14 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener private static final String VIDEO_DEBUG_LABEL = "video-capture"; private static final long VIDEO_SIZE = 10 * 1024 * 1024; - private final @NonNull Fragment fragment; - private final @NonNull PreviewView previewView; - private final @NonNull CameraController cameraController; - private final @NonNull Callback callback; - private final @NonNull MemoryFileDescriptor memoryFileDescriptor; - private final @NonNull ValueAnimator updateProgressAnimator; - private final @NonNull Debouncer debouncer; - private final @NonNull CameraXModePolicy cameraXModePolicy; + private final @NonNull Fragment fragment; + private final @NonNull PreviewView previewView; + private final @NonNull SignalCameraController cameraController; + private final @NonNull Callback callback; + private final @NonNull MemoryFileDescriptor memoryFileDescriptor; + private final @NonNull ValueAnimator updateProgressAnimator; + private final @NonNull Debouncer debouncer; + private final @NonNull CameraXModePolicy cameraXModePolicy; private ValueAnimator cameraMetricsAnimator; @@ -88,7 +88,7 @@ public void accept(VideoRecordEvent videoRecordEvent) { CameraXVideoCaptureHelper(@NonNull Fragment fragment, @NonNull CameraButtonView captureButton, - @NonNull CameraController cameraController, + @NonNull SignalCameraController cameraController, @NonNull PreviewView previewView, @NonNull MemoryFileDescriptor memoryFileDescriptor, @NonNull CameraXModePolicy cameraXModePolicy, @@ -150,7 +150,7 @@ private void beginCameraRecording() { FileDescriptorOutputOptions outputOptions = new FileDescriptorOutputOptions.Builder(memoryFileDescriptor.getParcelFileDescriptor()).build(); AudioConfig audioConfig = AudioConfig.create(true); - activeRecording = cameraController.startRecording(outputOptions, audioConfig, Executors.mainThreadExecutor(), videoSavedListener); + activeRecording = cameraController.startRecording(outputOptions, audioConfig, videoSavedListener); updateProgressAnimator.start(); debouncer.publish(this::onVideoCaptureComplete); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java index 4addaba88b..d0b3417df7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendGifFragment.java @@ -55,11 +55,6 @@ public void setUri(@NonNull Uri uri) { return uri; } - @Override - public @Nullable View getPlaybackControls() { - return null; - } - @Override public @Nullable Object saveState() { return null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java index 4d3f3d8d82..f08e3b705d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendPageFragment.java @@ -15,8 +15,6 @@ public interface MediaSendPageFragment { void setUri(@NonNull Uri uri); - @Nullable View getPlaybackControls(); - @Nullable Object saveState(); void restoreState(@NonNull Object state); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java deleted file mode 100644 index 045f1ecc73..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.java +++ /dev/null @@ -1,410 +0,0 @@ -package org.thoughtcrime.securesms.mediasend; - -import android.net.Uri; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.fragment.app.Fragment; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.mms.MediaConstraints; -import org.thoughtcrime.securesms.mms.VideoSlide; -import org.thoughtcrime.securesms.scribbles.VideoEditorHud; -import org.thoughtcrime.securesms.util.Throttler; -import org.thoughtcrime.securesms.video.VideoBitRateCalculator; -import org.thoughtcrime.securesms.video.VideoPlayer; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -public class VideoEditorFragment extends Fragment implements VideoEditorHud.EventListener, - MediaSendPageFragment { - - private static final String TAG = Log.tag(VideoEditorFragment.class); - - private static final String KEY_URI = "uri"; - private static final String KEY_MAX_OUTPUT = "max_output_size"; - private static final String KEY_MAX_SEND = "max_send_size"; - private static final String KEY_IS_VIDEO_GIF = "is_video_gif"; - private static final String KEY_MAX_DURATION = "max_duration"; - - private final Throttler videoScanThrottle = new Throttler(150); - private final Handler handler = new Handler(Looper.getMainLooper()); - - private Controller controller; - private Data data = new Data(); - private Uri uri; - private boolean isVideoGif; - private VideoPlayer player; - @Nullable private VideoEditorHud hud; - private Runnable updatePosition; - private boolean isInEdit; - private boolean wasPlayingBeforeEdit; - private long maxVideoDurationUs; - - public static VideoEditorFragment newInstance(@NonNull Uri uri, long maxCompressedVideoSize, long maxAttachmentSize, boolean isVideoGif, long maxVideoDuration) { - Bundle args = new Bundle(); - args.putParcelable(KEY_URI, uri); - args.putLong(KEY_MAX_OUTPUT, maxCompressedVideoSize); - args.putLong(KEY_MAX_SEND, maxAttachmentSize); - args.putBoolean(KEY_IS_VIDEO_GIF, isVideoGif); - args.putLong(KEY_MAX_DURATION, maxVideoDuration); - - VideoEditorFragment fragment = new VideoEditorFragment(); - fragment.setArguments(args); - fragment.setUri(uri); - return fragment; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getActivity() instanceof Controller) { - controller = (Controller) getActivity(); - } else if (getParentFragment() instanceof Controller) { - controller = (Controller) getParentFragment(); - } else { - throw new IllegalStateException("Parent must implement Controller interface."); - } - } - - @Override - public @Nullable View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.mediasend_video_fragment, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - player = view.findViewById(R.id.video_player); - - uri = requireArguments().getParcelable(KEY_URI); - isVideoGif = requireArguments().getBoolean(KEY_IS_VIDEO_GIF); - maxVideoDurationUs = TimeUnit.MILLISECONDS.toMicros(requireArguments().getLong(KEY_MAX_DURATION)); - - long maxOutput = requireArguments().getLong(KEY_MAX_OUTPUT); - long maxSend = requireArguments().getLong(KEY_MAX_SEND); - VideoSlide slide = new VideoSlide(requireContext(), uri, 0, isVideoGif); - boolean autoplay = isVideoGif; - - player.setWindow(requireActivity().getWindow()); - player.setVideoSource(slide, autoplay, TAG); - - if (slide.isVideoGif()) { - player.setPlayerCallback(new VideoPlayer.PlayerCallback() { - @Override - public void onPlaying() { - controller.onPlayerReady(); - } - - @Override - public void onStopped() { - // Do nothing. - } - - @Override - public void onError() { - controller.onPlayerError(); - } - }); - player.hideControls(); - player.loopForever(); - } else if (MediaConstraints.isVideoTranscodeAvailable()) { - hud = view.findViewById(R.id.video_editor_hud); - hud.setEventListener(this); - clampToMaxVideoDuration(data, true); - updateHud(data); - if (data.durationEdited) { - player.clip(data.startTimeUs, data.endTimeUs, autoplay); - } - try { - hud.setVideoSource(slide, new VideoBitRateCalculator(maxOutput), maxOutput); - hud.setVisibility(View.VISIBLE); - startPositionUpdates(); - } catch (IOException e) { - Log.w(TAG, e); - } - - player.setOnClickListener(v -> { - player.pause(); - hud.showPlayButton(); - }); - - player.setPlayerCallback(new VideoPlayer.PlayerCallback() { - - @Override - public void onReady() { - controller.onPlayerReady(); - } - - @Override - public void onPlaying() { - hud.fadePlayButton(); - } - - @Override - public void onStopped() { - hud.showPlayButton(); - } - - @Override - public void onError() { - controller.onPlayerError(); - } - }); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - - if (player != null) { - player.cleanup(); - } - } - - @Override - public void onPause() { - super.onPause(); - notifyHidden(); - - stopPositionUpdates(); - } - - @Override - public void onResume() { - super.onResume(); - startPositionUpdates(); - - if (player != null && isVideoGif) { - player.play(); - } - } - - private void startPositionUpdates() { - if (hud != null) { - stopPositionUpdates(); - updatePosition = new Runnable() { - @Override - public void run() { - hud.setPosition(player.getPlaybackPositionUs()); - handler.postDelayed(this, 100); - } - }; - handler.post(updatePosition); - } - } - - private void stopPositionUpdates() { - handler.removeCallbacks(updatePosition); - } - - @Override - public void onHiddenChanged(boolean hidden) { - if (hidden) { - notifyHidden(); - } - } - - @Override - public void setUri(@NonNull Uri uri) { - this.uri = uri; - } - - @Override - public @NonNull Uri getUri() { - return uri; - } - - @Override - public @Nullable View getPlaybackControls() { - if (hud != null && hud.getVisibility() == View.VISIBLE) return null; - else if (isVideoGif) return null; - else if (player != null) return player.getControlView(); - else return null; - } - - @Override - public @Nullable Object saveState() { - return data; - } - - @Override - public void restoreState(@NonNull Object state) { - if (state instanceof Data) { - data = (Data) state; - updateHud(data); - } else { - Log.w(TAG, "Received a bad saved state. Received class: " + state.getClass().getName()); - } - } - - @RequiresApi(api = 23) - private void updateHud(Data data) { - if (hud != null && data.totalDurationUs > 0 && data.durationEdited) { - hud.setDurationRange(data.totalDurationUs, data.startTimeUs, data.endTimeUs); - } - } - - @Override - public void notifyHidden() { - pausePlayback(); - } - - public void pausePlayback() { - if (player != null) { - player.pause(); - if (hud != null) { - hud.showPlayButton(); - } - } - } - - @Override - public void onEditVideoDuration(long totalDurationUs, long startTimeUs, long endTimeUs, boolean fromEdited, boolean editingComplete) { - controller.onTouchEventsNeeded(!editingComplete); - - if (hud != null) { - hud.hidePlayButton(); - } - - final long clampedStartTime = Math.max(startTimeUs, 0); - - boolean wasEdited = data.durationEdited; - boolean durationEdited = clampedStartTime > 0 || endTimeUs < totalDurationUs; - boolean endMoved = data.endTimeUs != endTimeUs; - - data.durationEdited = durationEdited; - data.totalDurationUs = totalDurationUs; - data.startTimeUs = clampedStartTime; - data.endTimeUs = endTimeUs; - - clampToMaxVideoDuration(data, !endMoved); - - if (editingComplete) { - isInEdit = false; - videoScanThrottle.clear(); - } else if (!isInEdit) { - isInEdit = true; - wasPlayingBeforeEdit = player.isPlaying(); - } - - videoScanThrottle.publish(() -> { - player.pause(); - if (!editingComplete) { - player.removeClip(false); - } - player.setPlaybackPosition(fromEdited || editingComplete ? clampedStartTime / 1000 : endTimeUs / 1000); - if (editingComplete) { - if (durationEdited) { - player.clip(clampedStartTime, endTimeUs, wasPlayingBeforeEdit); - } else { - player.removeClip(wasPlayingBeforeEdit); - } - - if (!wasPlayingBeforeEdit) { - hud.showPlayButton(); - } - } - }); - - if (!wasEdited && durationEdited) { - controller.onVideoBeginEdit(uri); - } - - if (editingComplete) { - controller.onVideoEndEdit(uri); - } - } - - @Override - public void onPlay() { - player.play(); - } - - @Override - public void onSeek(long position, boolean dragComplete) { - if (dragComplete) { - videoScanThrottle.clear(); - } - - videoScanThrottle.publish(() -> { - player.pause(); - player.setPlaybackPosition(position); - }); - } - - private void clampToMaxVideoDuration(@NonNull Data data, boolean clampEnd) { - if (!MediaConstraints.isVideoTranscodeAvailable()) { - return; - } - - if ((data.endTimeUs - data.startTimeUs) <= maxVideoDurationUs) { - return; - } - - data.durationEdited = true; - - if (clampEnd) { - data.endTimeUs = data.startTimeUs + maxVideoDurationUs; - } else { - data.startTimeUs = data.endTimeUs - maxVideoDurationUs; - } - - updateHud(data); - } - - public static class Data { - boolean durationEdited; - long totalDurationUs; - long startTimeUs; - long endTimeUs; - - public boolean isDurationEdited() { - return durationEdited; - } - - public @NonNull Bundle getBundle() { - Bundle bundle = new Bundle(); - bundle.putByte("EDITED", (byte) (durationEdited ? 1 : 0)); - bundle.putLong("TOTAL", totalDurationUs); - bundle.putLong("START", startTimeUs); - bundle.putLong("END", endTimeUs); - - return bundle; - } - - public static @NonNull Data fromBundle(@NonNull Bundle bundle) { - Data data = new Data(); - data.durationEdited = bundle.getByte("EDITED") == (byte) 1; - data.totalDurationUs = bundle.getLong("TOTAL"); - data.startTimeUs = bundle.getLong("START"); - data.endTimeUs = bundle.getLong("END"); - - return data; - } - } - - public interface Controller { - - void onPlayerReady(); - - void onPlayerError(); - - void onTouchEventsNeeded(boolean needed); - - void onVideoBeginEdit(@NonNull Uri uri); - - void onVideoEndEdit(@NonNull Uri uri); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.kt new file mode 100644 index 0000000000..726136e2ce --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoEditorFragment.kt @@ -0,0 +1,323 @@ +package org.thoughtcrime.securesms.mediasend + +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.annotation.RequiresApi +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState +import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel +import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData +import org.thoughtcrime.securesms.mms.MediaConstraints +import org.thoughtcrime.securesms.mms.VideoSlide +import org.thoughtcrime.securesms.scribbles.VideoEditorPlayButtonLayout +import org.thoughtcrime.securesms.util.Throttler +import org.thoughtcrime.securesms.video.VideoPlayer +import org.thoughtcrime.securesms.video.VideoPlayer.PlayerCallback +import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView +import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView.PositionDragListener +import java.io.IOException + +class VideoEditorFragment : Fragment(), PositionDragListener, MediaSendPageFragment { + private val sharedViewModel: MediaSelectionViewModel by viewModels(ownerProducer = { requireActivity() }) + private val videoScanThrottle = Throttler(150) + private val handler = Handler(Looper.getMainLooper()) + + private var canEdit = false + private var isVideoGif = false + private var isInEdit = false + private var isFocused = false + private var wasPlayingBeforeEdit = false + private var maxSend: Long = 0 + private lateinit var uri: Uri + private lateinit var controller: Controller + private lateinit var player: VideoPlayer + private lateinit var hud: VideoEditorPlayButtonLayout + private lateinit var videoTimeLine: VideoThumbnailsRangeSelectorView + + private val updatePosition = object : Runnable { + override fun run() { + if (MediaConstraints.isVideoTranscodeAvailable()) { + val playbackPositionUs = player.playbackPositionUs + if (playbackPositionUs >= 0) { + videoTimeLine.setActualPosition(playbackPositionUs) + handler.postDelayed(this, 100) + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + controller = if (activity is Controller) { + activity as Controller + } else if (parentFragment is Controller) { + parentFragment as Controller + } else { + throw IllegalStateException("Parent must implement Controller interface.") + } + } + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.mediasend_video_fragment, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + videoTimeLine = requireActivity().findViewById(R.id.video_timeline) + + player = view.findViewById(R.id.video_player) + hud = view.findViewById(R.id.video_editor_hud) + + uri = requireArguments().getParcelable(KEY_URI)!! + isVideoGif = requireArguments().getBoolean(KEY_IS_VIDEO_GIF) + maxSend = requireArguments().getLong(KEY_MAX_SEND) + + val state = sharedViewModel.state.value!! + val slide = VideoSlide(requireContext(), uri, 0, isVideoGif) + player.setWindow(requireActivity().window) + player.setVideoSource(slide, isVideoGif, TAG) + + if (slide.isVideoGif) { + player.setPlayerCallback(object : PlayerCallback { + override fun onPlaying() { + controller.onPlayerReady() + } + + override fun onStopped() = Unit + + override fun onError() { + controller.onPlayerError() + } + }) + player.hideControls() + player.loopForever() + } else if (MediaConstraints.isVideoTranscodeAvailable()) { + hud.setPlayClickListener { + player.play() + } + bindVideoTimeline(state) + player.setOnClickListener { + player.pause() + hud.showPlayButton() + } + + player.setPlayerCallback(object : PlayerCallback { + override fun onReady() { + controller.onPlayerReady() + } + + override fun onPlaying() { + hud.fadePlayButton() + } + + override fun onStopped() { + hud.showPlayButton() + } + + override fun onError() { + controller.onPlayerError() + } + }) + } + + sharedViewModel.state.observe(viewLifecycleOwner) { incomingState -> + val focusedUri = incomingState.focusedMedia?.uri + val currentlyFocused = focusedUri != null && focusedUri == uri + if (MediaConstraints.isVideoTranscodeAvailable() && canEdit) { + if (currentlyFocused) { + if (!isFocused) { + bindVideoTimeline(incomingState) + } else { + val videoTrimData = if (focusedUri != null) { + incomingState.getOrCreateVideoTrimData(focusedUri) + } else { + VideoTrimData() + } + onEditVideoDuration(videoTrimData, incomingState.isTouchEnabled) + } + } else { + stopPositionUpdates() + player.pause() + } + } + isFocused = currentlyFocused + } + } + + @RequiresApi(23) + private fun bindVideoTimeline(state: MediaSelectionState) { + val uri = state.focusedMedia?.uri ?: return + if (uri != this.uri) { + return + } + + val autoplay = isVideoGif + val slide = VideoSlide(requireContext(), uri, 0, autoplay) + + val data = state.getOrCreateVideoTrimData(uri) + if (data.isDurationEdited) { + player.clip(data.startTimeUs, data.endTimeUs, autoplay) + } + + if (slide.hasVideo()) { + canEdit = true + try { + videoTimeLine.registerPlayerOnRangeChangeListener(this) + + hud.visibility = View.VISIBLE + startPositionUpdates() + } catch (e: IOException) { + Log.w(TAG, e) + } + } + } + + override fun onPositionDrag(position: Long) { + onSeek(position, false) + } + + override fun onEndPositionDrag(position: Long) { + onSeek(position, true) + } + + override fun onDestroyView() { + super.onDestroyView() + + player.cleanup() + } + + override fun onPause() { + super.onPause() + notifyHidden() + + stopPositionUpdates() + } + + override fun onResume() { + super.onResume() + startPositionUpdates() + + if (isVideoGif) { + player.play() + } + } + + private fun startPositionUpdates() { + if (Build.VERSION.SDK_INT >= 23) { + stopPositionUpdates() + handler.post(updatePosition) + } + } + + private fun stopPositionUpdates() { + handler.removeCallbacks(updatePosition) + } + + override fun onHiddenChanged(hidden: Boolean) { + if (hidden) { + notifyHidden() + } + } + + override fun setUri(uri: Uri) { + this.uri = uri + } + + override fun getUri(): Uri { + return uri + } + + override fun saveState(): Any = Unit + + override fun restoreState(state: Any) = Unit + + override fun notifyHidden() { + pausePlayback() + } + + private fun pausePlayback() { + player.pause() + hud.showPlayButton() + } + + @RequiresApi(23) + private fun onEditVideoDuration(data: VideoTrimData, editingComplete: Boolean) { + hud.hidePlayButton() + + if (editingComplete) { + isInEdit = false + videoScanThrottle.clear() + } else if (!isInEdit) { + isInEdit = true + wasPlayingBeforeEdit = player.isPlaying + } + + videoScanThrottle.publish { + player.pause() + if (!editingComplete) { + player.removeClip(false) + } + player.playbackPosition = if (editingComplete) data.startTimeUs / 1000 else data.endTimeUs / 1000 + if (editingComplete) { + if (data.isDurationEdited) { + player.clip(data.startTimeUs, data.endTimeUs, wasPlayingBeforeEdit) + } else { + player.removeClip(wasPlayingBeforeEdit) + } + + if (!wasPlayingBeforeEdit) { + hud.showPlayButton() + } + } + } + } + + private fun onSeek(position: Long, dragComplete: Boolean) { + if (dragComplete) { + videoScanThrottle.clear() + } + + videoScanThrottle.publish { + player.pause() + player.playbackPosition = position + } + } + + interface Controller { + fun onPlayerReady() + + fun onPlayerError() + + fun onTouchEventsNeeded(needed: Boolean) + } + + companion object { + private val TAG = Log.tag(VideoEditorFragment::class.java) + + private const val KEY_URI = "uri" + private const val KEY_MAX_SEND = "max_send_size" + private const val KEY_IS_VIDEO_GIF = "is_video_gif" + + fun newInstance(uri: Uri, maxAttachmentSize: Long, isVideoGif: Boolean): VideoEditorFragment { + val args = Bundle() + args.putParcelable(KEY_URI, uri) + args.putLong(KEY_MAX_SEND, maxAttachmentSize) + args.putBoolean(KEY_IS_VIDEO_GIF, isVideoGif) + + val fragment = VideoEditorFragment() + fragment.arguments = args + fragment.setUri(uri) + return fragment + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java deleted file mode 100644 index 4bb9cc1307..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.thoughtcrime.securesms.mediasend; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.annotation.WorkerThread; - -import org.thoughtcrime.securesms.database.AttachmentTable; -import org.thoughtcrime.securesms.mms.SentMediaQuality; - -import java.util.Optional; - - -public final class VideoTrimTransform implements MediaTransform { - - private final VideoEditorFragment.Data data; - - public VideoTrimTransform(@NonNull VideoEditorFragment.Data data) { - this.data = data; - } - - @WorkerThread - @Override - public @NonNull Media transform(@NonNull Context context, @NonNull Media media) { - return new Media(media.getUri(), - media.getMimeType(), - media.getDate(), - media.getWidth(), - media.getHeight(), - media.getSize(), - media.getDuration(), - media.isBorderless(), - media.isVideoGif(), - media.getBucketId(), - media.getCaption(), - Optional.of(new AttachmentTable.TransformProperties(false, data.durationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.getCode(), false))); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.kt new file mode 100644 index 0000000000..77aa092f74 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.kt @@ -0,0 +1,28 @@ +package org.thoughtcrime.securesms.mediasend + +import android.content.Context +import androidx.annotation.WorkerThread +import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties +import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData +import org.thoughtcrime.securesms.mms.SentMediaQuality +import java.util.Optional + +class VideoTrimTransform(private val data: VideoTrimData) : MediaTransform { + @WorkerThread + override fun transform(context: Context, media: Media): Media { + return Media( + media.uri, + media.mimeType, + media.date, + media.width, + media.height, + media.size, + media.duration, + media.isBorderless, + media.isVideoGif, + media.bucketId, + media.caption, + Optional.of(TransformProperties(false, data.isDurationEdited, data.startTimeUs, data.endTimeUs, SentMediaQuality.STANDARD.code, false)) + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt index 35badb798f..cad9cb9bed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/CameraXModePolicy.kt @@ -15,11 +15,11 @@ sealed class CameraXModePolicy { abstract val isVideoSupported: Boolean - abstract fun initialize(cameraController: CameraController) + abstract fun initialize(cameraController: SignalCameraController) - open fun setToImage(cameraController: CameraController) = Unit + open fun setToImage(cameraController: SignalCameraController) = Unit - open fun setToVideo(cameraController: CameraController) = Unit + open fun setToVideo(cameraController: SignalCameraController) = Unit /** * The device supports having Image and Video enabled at the same time @@ -28,7 +28,7 @@ sealed class CameraXModePolicy { override val isVideoSupported: Boolean = true - override fun initialize(cameraController: CameraController) { + override fun initialize(cameraController: SignalCameraController) { cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE or CameraController.VIDEO_CAPTURE) } } @@ -40,15 +40,15 @@ sealed class CameraXModePolicy { override val isVideoSupported: Boolean = true - override fun initialize(cameraController: CameraController) { + override fun initialize(cameraController: SignalCameraController) { setToImage(cameraController) } - override fun setToImage(cameraController: CameraController) { + override fun setToImage(cameraController: SignalCameraController) { cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE) } - override fun setToVideo(cameraController: CameraController) { + override fun setToVideo(cameraController: SignalCameraController) { cameraController.setEnabledUseCases(CameraController.VIDEO_CAPTURE) } } @@ -60,7 +60,7 @@ sealed class CameraXModePolicy { override val isVideoSupported: Boolean = false - override fun initialize(cameraController: CameraController) { + override fun initialize(cameraController: SignalCameraController) { cameraController.setEnabledUseCases(CameraController.IMAGE_CAPTURE) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/SignalCameraController.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/SignalCameraController.kt new file mode 100644 index 0000000000..b37a9dac15 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/camerax/SignalCameraController.kt @@ -0,0 +1,478 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.mediasend.camerax + +import android.Manifest +import android.content.Context +import android.util.Size +import android.view.MotionEvent +import android.view.Surface +import android.view.View +import androidx.annotation.MainThread +import androidx.annotation.RequiresApi +import androidx.annotation.RequiresPermission +import androidx.camera.core.Camera +import androidx.camera.core.CameraSelector +import androidx.camera.core.DisplayOrientedMeteringPointFactory +import androidx.camera.core.FocusMeteringAction +import androidx.camera.core.FocusMeteringResult +import androidx.camera.core.ImageCapture +import androidx.camera.core.Preview +import androidx.camera.core.UseCase +import androidx.camera.core.UseCaseGroup +import androidx.camera.core.ViewPort +import androidx.camera.core.ZoomState +import androidx.camera.core.resolutionselector.AspectRatioStrategy +import androidx.camera.core.resolutionselector.ResolutionSelector +import androidx.camera.core.resolutionselector.ResolutionStrategy +import androidx.camera.lifecycle.ProcessCameraProvider +import androidx.camera.video.FallbackStrategy +import androidx.camera.video.FileDescriptorOutputOptions +import androidx.camera.video.Quality +import androidx.camera.video.QualitySelector +import androidx.camera.video.Recorder +import androidx.camera.video.Recording +import androidx.camera.video.VideoCapture +import androidx.camera.video.VideoRecordEvent +import androidx.camera.view.CameraController +import androidx.camera.view.PreviewView +import androidx.camera.view.video.AudioConfig +import androidx.core.content.ContextCompat +import androidx.core.util.Consumer +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LiveData +import com.google.common.util.concurrent.FutureCallback +import com.google.common.util.concurrent.Futures +import com.google.common.util.concurrent.ListenableFuture +import org.signal.core.util.ThreadUtil +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.util.TextSecurePreferences +import org.thoughtcrime.securesms.util.ViewUtil +import org.thoughtcrime.securesms.util.visible +import java.util.concurrent.Executor + +/** + * This is a class to manage the camera resource, and relies on the AndroidX CameraX library. + * + * The API is a subset of the [CameraController] class, but with a few additions such as [setImageRotation]. + */ +class SignalCameraController( + private val context: Context, + private val lifecycleOwner: LifecycleOwner, + private val previewView: PreviewView, + private val focusIndicator: View +) { + companion object { + val TAG = Log.tag(SignalCameraController::class.java) + + private const val AF_SIZE = 1.0f / 6.0f + private const val AE_SIZE = AF_SIZE * 1.5f + + @JvmStatic + private fun isLandscape(surfaceRotation: Int): Boolean { + return surfaceRotation == Surface.ROTATION_90 || surfaceRotation == Surface.ROTATION_270 + } + } + + private val videoQualitySelector: QualitySelector = QualitySelector.from(Quality.HD, FallbackStrategy.lowerQualityThan(Quality.HD)) + private val imageMode = CameraXUtil.getOptimalCaptureMode() + + private val cameraProviderFuture: ListenableFuture = ProcessCameraProvider.getInstance(context) + private val viewPort: ViewPort? = previewView.getViewPort(Surface.ROTATION_0) + private val initializationCompleteListeners: MutableSet = mutableSetOf() + private val customUseCases: MutableList = mutableListOf() + + private var tapToFocusEvents = 0 + + private var imageRotation = 0 + private var recording: Recording? = null + private var previewTargetSize: Size? = null + private var imageCaptureTargetSize: Size? = null + private var cameraSelector: CameraSelector = CameraXUtil.toCameraSelector(TextSecurePreferences.getDirectCaptureCameraId(context)) + private var enabledUseCases: Int = CameraController.IMAGE_CAPTURE + + private var previewUseCase: Preview = createPreviewUseCase() + private var imageCaptureUseCase: ImageCapture = createImageCaptureUseCase() + private var videoCaptureUseCase: VideoCapture = createVideoCaptureRecorder() + + private lateinit var cameraProvider: ProcessCameraProvider + private lateinit var cameraProperty: Camera + + @RequiresPermission(Manifest.permission.CAMERA) + fun bindToLifecycle(onCameraBoundListener: Runnable) { + ThreadUtil.assertMainThread() + if (this::cameraProvider.isInitialized) { + bindToLifecycleInternal() + onCameraBoundListener.run() + } else { + cameraProviderFuture.addListener({ + cameraProvider = cameraProviderFuture.get() + initializationCompleteListeners.forEach { it.onInitialized(cameraProvider) } + bindToLifecycleInternal() + onCameraBoundListener.run() + }, ContextCompat.getMainExecutor(context)) + } + } + + @MainThread + fun unbind() { + ThreadUtil.assertMainThread() + cameraProvider.unbindAll() + } + + @MainThread + private fun bindToLifecycleInternal() { + ThreadUtil.assertMainThread() + try { + if (!this::cameraProvider.isInitialized) { + Log.d(TAG, "Camera provider not yet initialized.") + return + } + val camera = cameraProvider.bindToLifecycle( + lifecycleOwner, + cameraSelector, + buildUseCaseGroup() + ) + + initializeTapToFocus(camera) + this.cameraProperty = camera + } catch (e: Exception) { + Log.e(TAG, "Use case binding failed", e) + } + } + + @MainThread + fun addUseCase(useCase: UseCase) { + ThreadUtil.assertMainThread() + + customUseCases += useCase + + if (isRecording()) { + stopRecording() + } + + tryToBindCamera() + } + + @MainThread + fun takePicture(executor: Executor, callback: ImageCapture.OnImageCapturedCallback) { + ThreadUtil.assertMainThread() + assertImageEnabled() + imageCaptureUseCase.takePicture(executor, callback) + } + + @RequiresApi(26) + @MainThread + fun startRecording(outputOptions: FileDescriptorOutputOptions, audioConfig: AudioConfig, videoSavedListener: Consumer): Recording { + ThreadUtil.assertMainThread() + assertVideoEnabled() + + recording?.stop() + recording = null + val startedRecording = videoCaptureUseCase.output + .prepareRecording(context, outputOptions) + .apply { + if (audioConfig.audioEnabled) { + withAudioEnabled() + } + } + .start(ContextCompat.getMainExecutor(context)) { + videoSavedListener.accept(it) + if (it is VideoRecordEvent.Finalize) { + recording = null + } + } + + recording = startedRecording + return startedRecording + } + + @MainThread + fun setEnabledUseCases(useCaseFlags: Int) { + ThreadUtil.assertMainThread() + if (enabledUseCases == useCaseFlags) { + return + } + + val oldEnabledUseCases = enabledUseCases + enabledUseCases = useCaseFlags + if (isRecording()) { + stopRecording() + } + tryToBindCamera { enabledUseCases = oldEnabledUseCases } + } + + @MainThread + fun getImageCaptureFlashMode(): Int { + ThreadUtil.assertMainThread() + return imageCaptureUseCase.flashMode + } + + @MainThread + fun setPreviewTargetSize(size: Size) { + ThreadUtil.assertMainThread() + if (size == previewTargetSize || previewTargetSize?.equals(size) == true) { + return + } + Log.d(TAG, "Setting Preview dimensions to $size") + previewTargetSize = size + if (this::cameraProvider.isInitialized) { + cameraProvider.unbind(previewUseCase) + } + previewUseCase = createPreviewUseCase() + + tryToBindCamera(null) + } + + @MainThread + fun setImageCaptureTargetSize(size: Size) { + ThreadUtil.assertMainThread() + if (size == imageCaptureTargetSize || imageCaptureTargetSize?.equals(size) == true) { + return + } + imageCaptureTargetSize = size + if (this::cameraProvider.isInitialized) { + cameraProvider.unbind(imageCaptureUseCase) + } + imageCaptureUseCase = createImageCaptureUseCase() + tryToBindCamera(null) + } + + @MainThread + fun setImageRotation(rotation: Int) { + ThreadUtil.assertMainThread() + val newRotation = UseCase.snapToSurfaceRotation(rotation.coerceIn(0, 359)) + + if (newRotation == imageRotation) { + return + } + + if (isLandscape(newRotation) != isLandscape(imageRotation)) { + imageCaptureTargetSize = imageCaptureTargetSize?.swap() + } + + videoCaptureUseCase.targetRotation = newRotation + imageCaptureUseCase.targetRotation = newRotation + + imageRotation = newRotation + } + + @MainThread + fun setImageCaptureFlashMode(flashMode: Int) { + ThreadUtil.assertMainThread() + imageCaptureUseCase.flashMode = flashMode + } + + @MainThread + fun setZoomRatio(ratio: Float): ListenableFuture { + ThreadUtil.assertMainThread() + return cameraProperty.cameraControl.setZoomRatio(ratio) + } + + @MainThread + fun getZoomState(): LiveData { + ThreadUtil.assertMainThread() + return cameraProperty.cameraInfo.zoomState + } + + @MainThread + fun setCameraSelector(selector: CameraSelector) { + ThreadUtil.assertMainThread() + if (selector == cameraSelector) { + return + } + + val oldCameraSelector: CameraSelector = cameraSelector + cameraSelector = selector + if (!this::cameraProvider.isInitialized) { + return + } + cameraProvider.unbindAll() + tryToBindCamera { cameraSelector = oldCameraSelector } + } + + @MainThread + fun getCameraSelector(): CameraSelector { + ThreadUtil.assertMainThread() + return cameraSelector + } + + @MainThread + fun hasCamera(selectedCamera: CameraSelector): Boolean { + ThreadUtil.assertMainThread() + return cameraProvider.hasCamera(selectedCamera) + } + + @MainThread + fun addInitializationCompletedListener(listener: InitializationListener) { + ThreadUtil.assertMainThread() + initializationCompleteListeners.add(listener) + } + + @MainThread + private fun tryToBindCamera(restoreStateRunnable: (() -> Unit)? = null) { + ThreadUtil.assertMainThread() + try { + bindToLifecycleInternal() + } catch (e: RuntimeException) { + Log.i(TAG, "Could not re-bind camera!", e) + restoreStateRunnable?.invoke() + } + } + + @MainThread + private fun stopRecording() { + ThreadUtil.assertMainThread() + recording?.close() + } + + private fun createVideoCaptureRecorder() = VideoCapture.Builder( + Recorder.Builder() + .setQualitySelector(videoQualitySelector) + .build() + ) + .setTargetRotation(imageRotation) + .build() + + private fun createPreviewUseCase() = Preview.Builder() + .apply { + setTargetRotation(Surface.ROTATION_0) + val size = previewTargetSize + if (size != null) { + setResolutionSelector( + ResolutionSelector.Builder() + .setResolutionStrategy(ResolutionStrategy(size, ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER)) + .build() + ) + } + }.build() + .also { + it.setSurfaceProvider(previewView.surfaceProvider) + } + + private fun createImageCaptureUseCase(): ImageCapture = ImageCapture.Builder() + .apply { + setCaptureMode(imageMode) + setTargetRotation(imageRotation) + + val size = imageCaptureTargetSize + if (size != null) { + setResolutionSelector( + ResolutionSelector.Builder() + .setAspectRatioStrategy(AspectRatioStrategy.RATIO_16_9_FALLBACK_AUTO_STRATEGY) + .setResolutionStrategy(ResolutionStrategy(size, ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER)) + .build() + ) + } + }.build() + + private fun buildUseCaseGroup() = UseCaseGroup.Builder().apply { + addUseCase(previewUseCase) + if (isUseCaseEnabled(CameraController.IMAGE_CAPTURE)) { + addUseCase(imageCaptureUseCase) + } else { + cameraProvider.unbind(imageCaptureUseCase) + } + if (isUseCaseEnabled(CameraController.VIDEO_CAPTURE)) { + addUseCase(videoCaptureUseCase) + } else { + cameraProvider.unbind(videoCaptureUseCase) + } + + for (useCase in customUseCases) { + addUseCase(useCase) + } + + if (viewPort != null) { + setViewPort(viewPort) + } else { + Log.d(TAG, "ViewPort was null, not adding to UseCase builder.") + } + }.build() + + @MainThread + private fun initializeTapToFocus(camera: Camera) { + ThreadUtil.assertMainThread() + previewView.setOnTouchListener { v: View?, event: MotionEvent -> + if (event.action == MotionEvent.ACTION_DOWN) { + return@setOnTouchListener true + } + if (event.action == MotionEvent.ACTION_UP) { + focusAndMeterOnPoint(camera, event.x, event.y) + v?.performClick() + return@setOnTouchListener true + } + false + } + } + + @MainThread + private fun focusAndMeterOnPoint(camera: Camera, x: Float, y: Float) { + ThreadUtil.assertMainThread() + val meteringPointFactory = DisplayOrientedMeteringPointFactory(previewView.display, camera.cameraInfo, previewView.width.toFloat(), previewView.height.toFloat()) + val afPoint = meteringPointFactory.createPoint(x, y, AF_SIZE) + val aePoint = meteringPointFactory.createPoint(x, y, AE_SIZE) + val action = FocusMeteringAction.Builder(afPoint, FocusMeteringAction.FLAG_AF) + .addPoint(aePoint, FocusMeteringAction.FLAG_AE) + .build() + + focusIndicator.x = x - (focusIndicator.width / 2) + focusIndicator.y = y - (focusIndicator.height / 2) + focusIndicator.visible = true + + tapToFocusEvents += 1 + + Futures.addCallback( + camera.cameraControl.startFocusAndMetering(action), + object : FutureCallback { + override fun onSuccess(result: FocusMeteringResult?) { + Log.d(TAG, "Tap to focus was successful? ${result?.isFocusSuccessful}") + tapToFocusEvents -= 1 + if (tapToFocusEvents <= 0) { + ViewUtil.fadeOut(focusIndicator, 80) + } + } + + override fun onFailure(t: Throwable) { + Log.d(TAG, "Tap to focus could not be completed due to an exception.", t) + tapToFocusEvents -= 1 + if (tapToFocusEvents <= 0) { + ViewUtil.fadeOut(focusIndicator, 80) + } + } + }, + ContextCompat.getMainExecutor(context) + ) + } + + private fun isRecording(): Boolean { + return recording != null + } + + private fun isUseCaseEnabled(mask: Int): Boolean { + return (enabledUseCases and mask) != 0 + } + + private fun assertVideoEnabled() { + if (!isUseCaseEnabled(CameraController.VIDEO_CAPTURE)) { + throw IllegalStateException("VideoCapture disabled.") + } + } + + private fun assertImageEnabled() { + if (!isUseCaseEnabled(CameraController.IMAGE_CAPTURE)) { + throw IllegalStateException("ImageCapture disabled.") + } + } + + private fun Size.swap(): Size { + return Size(this.height, this.width) + } + + interface InitializationListener { + fun onInitialized(cameraProvider: ProcessCameraProvider) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaAnimations.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaAnimations.kt index c796344847..65542a0ee7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaAnimations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaAnimations.kt @@ -1,12 +1,12 @@ package org.thoughtcrime.securesms.mediasend.v2 import android.view.animation.Interpolator -import androidx.interpolator.view.animation.FastOutSlowInInterpolator +import org.thoughtcrime.securesms.util.createDefaultCubicBezierInterpolator object MediaAnimations { /** * Fast-In-Extra-Slow-Out Interpolator */ @JvmStatic - val interpolator: Interpolator = FastOutSlowInInterpolator() + val interpolator: Interpolator = createDefaultCubicBezierInterpolator() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt index 42b651df81..a16619d96c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionActivity.kt @@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.mediasend.v2.text.send.TextStoryPostSendReposi import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.safety.SafetyNumberBottomSheet import org.thoughtcrime.securesms.stories.Stories +import org.thoughtcrime.securesms.util.Debouncer import org.thoughtcrime.securesms.util.FullscreenHelper import org.thoughtcrime.securesms.util.WindowUtil import org.thoughtcrime.securesms.util.navigation.safeNavigate @@ -79,6 +80,8 @@ class MediaSelectionActivity : private val draftText: CharSequence? get() = intent.getCharSequenceExtra(MESSAGE) + private val debouncer = Debouncer(200) + override fun attachBaseContext(newBase: Context) { delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_YES super.attachBaseContext(newBase) @@ -122,7 +125,7 @@ class MediaSelectionActivity : } cameraSwitch.setOnClickListener { - viewModel.sendCommand(HudCommand.GoToCapture) + debouncer.publish { viewModel.sendCommand(HudCommand.GoToCapture) } } if (savedInstanceState == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index fa2cd294c0..9cb617adb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -29,8 +29,8 @@ import org.thoughtcrime.securesms.mediasend.MediaSendActivityResult import org.thoughtcrime.securesms.mediasend.MediaTransform import org.thoughtcrime.securesms.mediasend.MediaUploadRepository import org.thoughtcrime.securesms.mediasend.SentMediaQualityTransform -import org.thoughtcrime.securesms.mediasend.VideoEditorFragment import org.thoughtcrime.securesms.mediasend.VideoTrimTransform +import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData import org.thoughtcrime.securesms.mms.GifSlide import org.thoughtcrime.securesms.mms.ImageSlide import org.thoughtcrime.securesms.mms.MediaConstraints @@ -270,7 +270,7 @@ class MediaSelectionRepository(context: Context) { } } - if (state is VideoEditorFragment.Data && state.isDurationEdited) { + if (state is VideoTrimData && state.isDurationEdited) { modelsToRender[it] = VideoTrimTransform(state) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionState.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionState.kt index 65703b5cbc..556e30daa9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionState.kt @@ -5,10 +5,14 @@ import org.thoughtcrime.securesms.conversation.MessageSendType import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.MediaSendConstants +import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData +import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.mms.SentMediaQuality import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.stories.Stories import org.thoughtcrime.securesms.util.FeatureFlags +import org.thoughtcrime.securesms.util.MediaUtil +import org.thoughtcrime.securesms.video.TranscodingPreset data class MediaSelectionState( val sendType: MessageSendType, @@ -17,7 +21,7 @@ data class MediaSelectionState( val recipient: Recipient? = null, val quality: SentMediaQuality = SignalStore.settings().sentMediaQuality, val message: CharSequence? = null, - val viewOnceToggleState: ViewOnceToggleState = ViewOnceToggleState.INFINITE, + val viewOnceToggleState: ViewOnceToggleState = ViewOnceToggleState.default, val isTouchEnabled: Boolean = true, val isSent: Boolean = false, val isPreUploadEnabled: Boolean = false, @@ -29,6 +33,10 @@ data class MediaSelectionState( val suppressEmptyError: Boolean = true ) { + val isVideoTrimmingVisible: Boolean = focusedMedia != null && MediaUtil.isVideoType(focusedMedia.mimeType) && MediaConstraints.isVideoTranscodeAvailable() && !focusedMedia.isVideoGif + + val transcodingPreset: TranscodingPreset = MediaConstraints.getPushMediaConstraints(SentMediaQuality.fromCode(quality.code)).videoTranscodingSettings + val maxSelection = if (sendType.usesSmsTransport) { MediaSendConstants.MAX_SMS } else { @@ -37,9 +45,12 @@ data class MediaSelectionState( val canSend = !isSent && selectedMedia.isNotEmpty() + fun getOrCreateVideoTrimData(uri: Uri): VideoTrimData { + return editorStateMap[uri] as? VideoTrimData ?: VideoTrimData() + } + enum class ViewOnceToggleState(val code: Int) { - INFINITE(0), - ONCE(1); + INFINITE(0), ONCE(1); fun next(): ViewOnceToggleState { return when (this) { @@ -49,6 +60,8 @@ data class MediaSelectionState( } companion object { + val default = INFINITE + fun fromCode(code: Int): ViewOnceToggleState { return when (code) { 1 -> ONCE diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt index 75c7918234..a31c2184ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt @@ -25,23 +25,28 @@ import io.reactivex.rxjava3.subjects.Subject import org.signal.core.util.BreakIteratorCompat import org.signal.core.util.getParcelableArrayListCompat import org.signal.core.util.getParcelableCompat +import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.components.mention.MentionAnnotation import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.conversation.MessageSendType import org.thoughtcrime.securesms.conversation.MessageStyler import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.MediaSendActivityResult -import org.thoughtcrime.securesms.mediasend.VideoEditorFragment import org.thoughtcrime.securesms.mediasend.v2.review.AddMessageCharacterCount +import org.thoughtcrime.securesms.mediasend.v2.videos.VideoTrimData import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.mms.SentMediaQuality import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.scribbles.ImageEditorFragment import org.thoughtcrime.securesms.stories.Stories +import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.livedata.Store import java.util.Collections +import kotlin.math.max +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.seconds /** * ViewModel which maintains the list of selected media and other shared values. @@ -58,6 +63,8 @@ class MediaSelectionViewModel( private val identityChangesSince: Long = System.currentTimeMillis() ) : ViewModel() { + private val TAG = Log.tag(MediaSelectionViewModel::class.java) + private val selectedMediaSubject: Subject> = BehaviorSubject.create() private val store: Store = Store( @@ -181,9 +188,16 @@ class MediaSelectionViewModel( .subscribe { filterResult -> if (filterResult.filteredMedia.isNotEmpty()) { store.update { + val initializedVideoEditorStates = filterResult.filteredMedia.filterNot { media -> it.editorStateMap.containsKey(media.uri) } + .filter { media -> MediaUtil.isNonGifVideo(media) } + .associate { video: Media -> + val duration = video.duration.milliseconds.inWholeMicroseconds + video.uri to VideoTrimData(false, duration, 0, duration) + } it.copy( selectedMedia = filterResult.filteredMedia, - focusedMedia = it.focusedMedia ?: filterResult.filteredMedia.first() + focusedMedia = it.focusedMedia ?: filterResult.filteredMedia.first(), + editorStateMap = it.editorStateMap + initializedVideoEditorStates ) } @@ -290,16 +304,17 @@ class MediaSelectionViewModel( } } - fun setFocusedMedia(media: Media) { + fun onPageChanged(media: Media) { store.update { it.copy(focusedMedia = media) } } - fun setFocusedMedia(position: Int) { + fun onPageChanged(position: Int) { store.update { if (position >= it.selectedMedia.size) { it.copy(focusedMedia = null) } else { - it.copy(focusedMedia = it.selectedMedia[position]) + val focusedMedia: Media = it.selectedMedia[position] + it.copy(focusedMedia = focusedMedia) } } } @@ -329,6 +344,33 @@ class MediaSelectionViewModel( store.update { it.copy(viewOnceToggleState = it.viewOnceToggleState.next()) } } + fun onEditVideoDuration(context: Context, totalDurationUs: Long, startTimeUs: Long, endTimeUs: Long, touchEnabled: Boolean) { + store.update { + val uri = it.focusedMedia?.uri ?: return@update it + val data = it.getOrCreateVideoTrimData(uri) + val clampedStartTime = max(startTimeUs.toDouble(), 0.0).toLong() + + val unedited = !data.isDurationEdited + val durationEdited = clampedStartTime > 0 || endTimeUs < totalDurationUs + val isEntireDuration = startTimeUs == 0L && endTimeUs == totalDurationUs + val endMoved = !isEntireDuration && data.endTimeUs != endTimeUs + val maxVideoDurationUs: Long = if (it.isStory && !MediaConstraints.isVideoTranscodeAvailable()) { + Stories.MAX_VIDEO_DURATION_MILLIS + } else { + it.transcodingPreset.calculateMaxVideoUploadDurationInSeconds(getMediaConstraints().getVideoMaxSize(context)).seconds.inWholeMicroseconds + } + val preserveStartTime = unedited || !endMoved + val updatedData = clampToMaxClipDuration(VideoTrimData(durationEdited, totalDurationUs, clampedStartTime, endTimeUs), maxVideoDurationUs, preserveStartTime) + if (unedited && durationEdited) { + cancelUpload(MediaBuilder.buildMedia(uri)) + } + it.copy( + isTouchEnabled = touchEnabled, + editorStateMap = it.editorStateMap + (uri to updatedData) + ) + } + } + fun getEditorState(uri: Uri): Any? { return store.state.editorStateMap[uri] } @@ -339,10 +381,6 @@ class MediaSelectionViewModel( } } - fun onVideoBeginEdit(uri: Uri) { - cancelUpload(MediaBuilder.buildMedia(uri)) - } - fun send( selectedContacts: List = emptyList(), scheduledDate: Long? = null @@ -484,7 +522,7 @@ class MediaSelectionViewModel( val value: Any = if (getBoolean(BUNDLE_IS_IMAGE)) { ImageEditorFragment.Data(this) } else { - VideoEditorFragment.Data.fromBundle(this) + VideoTrimData.fromBundle(this) } return key to value @@ -499,8 +537,8 @@ class MediaSelectionViewModel( } } - is VideoEditorFragment.Data -> { - value.bundle.apply { + is VideoTrimData -> { + value.toBundle().apply { putParcelable(BUNDLE_URI, key) putBoolean(BUNDLE_IS_IMAGE, false) } @@ -527,6 +565,23 @@ class MediaSelectionViewModel( private const val STATE_CAMERA_FIRST_CAPTURE = "$STATE_PREFIX.camera_first_capture" private const val STATE_EDITORS = "$STATE_PREFIX.editors" private const val STATE_EDITOR_COUNT = "$STATE_PREFIX.editor_count" + + @JvmStatic + fun clampToMaxClipDuration(data: VideoTrimData, maxVideoDurationUs: Long, preserveStartTime: Boolean): VideoTrimData { + if (!MediaConstraints.isVideoTranscodeAvailable()) { + return data + } + + if ((data.endTimeUs - data.startTimeUs) <= maxVideoDurationUs) { + return data + } + + return data.copy( + isDurationEdited = true, + startTimeUs = if (!preserveStartTime) data.endTimeUs - maxVideoDurationUs else data.startTimeUs, + endTimeUs = if (preserveStartTime) data.startTimeUs + maxVideoDurationUs else data.endTimeUs + ) + } } class Factory( diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureEvent.kt index 00ef65f141..13a93919ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureEvent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureEvent.kt @@ -1,8 +1,11 @@ package org.thoughtcrime.securesms.mediasend.v2.capture import org.thoughtcrime.securesms.mediasend.Media +import org.thoughtcrime.securesms.recipients.Recipient sealed class MediaCaptureEvent { data class MediaCaptureRendered(val media: Media) : MediaCaptureEvent() + data class UsernameScannedFromQrCode(val recipient: Recipient, val username: String) : MediaCaptureEvent() + object DeviceLinkScannedFromQrCode : MediaCaptureEvent() object MediaCaptureRenderFailed : MediaCaptureEvent() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt index c6868b375a..ddd3c82ed6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt @@ -8,9 +8,11 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import app.cash.exhaustive.Exhaustive +import com.google.android.material.dialog.MaterialAlertDialogBuilder import io.reactivex.rxjava3.core.Flowable import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.DeviceActivity import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.mediasend.CameraFragment import org.thoughtcrime.securesms.mediasend.Media @@ -21,6 +23,7 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.stories.Stories +import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.navigation.safeNavigate import java.io.FileDescriptor import java.util.Optional @@ -47,7 +50,7 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme private val lifecycleDisposable = LifecycleDisposable() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - captureChildFragment = CameraFragment.newInstance() as CameraFragment + captureChildFragment = CameraFragment.newInstance(sharedViewModel.isContactSelectionRequired) as CameraFragment navigator = MediaSelectionNavigator( toGallery = R.id.action_mediaCaptureFragment_to_mediaGalleryFragment @@ -74,6 +77,28 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme navigator.goToReview(findNavController()) } + is MediaCaptureEvent.UsernameScannedFromQrCode -> { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(getString(R.string.MediaCaptureFragment_username_dialog_title, event.username)) + .setMessage(getString(R.string.MediaCaptureFragment_username_dialog_body, event.username)) + .setPositiveButton(R.string.MediaCaptureFragment_username_dialog_go_to_chat_button) { d, _ -> + CommunicationActions.startConversation(requireContext(), event.recipient, "") + requireActivity().finish() + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } + is MediaCaptureEvent.DeviceLinkScannedFromQrCode -> { + MaterialAlertDialogBuilder(requireContext()) + .setTitle(R.string.MediaCaptureFragment_device_link_dialog_title) + .setMessage(R.string.MediaCaptureFragment_device_link_dialog_body) + .setPositiveButton(R.string.MediaCaptureFragment_device_link_dialog_continue) { d, _ -> + startActivity(DeviceActivity.getIntentForScanner(requireContext())) + requireActivity().finish() + } + .setNegativeButton(android.R.string.cancel, null) + .show() + } } } @@ -149,6 +174,10 @@ class MediaCaptureFragment : Fragment(R.layout.fragment_container), CameraFragme } } + override fun onQrCodeFound(data: String) { + viewModel.onQrCodeFound(data) + } + override fun getMostRecentMediaItem(): Flowable> { return viewModel.getMostRecentMedia() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt index 8c29068356..3db6595108 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt @@ -5,20 +5,34 @@ import androidx.lifecycle.ViewModelProvider import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Flowable import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.CompositeDisposable +import io.reactivex.rxjava3.kotlin.plusAssign +import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.Subject +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.QrScanResult import org.thoughtcrime.securesms.mediasend.Media +import org.thoughtcrime.securesms.profiles.manage.UsernameRepository +import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.rx.RxStore import java.io.FileDescriptor import java.util.Optional +import java.util.concurrent.TimeUnit class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : ViewModel() { + companion object { + private val TAG = Log.tag(MediaCaptureViewModel::class.java) + } + private val store: RxStore = RxStore(MediaCaptureState()) private val internalEvents: Subject = PublishSubject.create() + private val qrData: Subject = PublishSubject.create() val events: Observable = internalEvents.observeOn(AndroidSchedulers.mainThread()) + val disposables = CompositeDisposable() init { repository.getMostRecentItem { media -> @@ -26,10 +40,42 @@ class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : Vi state.copy(mostRecentMedia = media) } } + + disposables += qrData + .throttleFirst(5, TimeUnit.SECONDS) + .filter { UsernameRepository.isValidLink(it) } + .subscribeOn(Schedulers.io()) + .flatMapSingle { url -> + UsernameRepository.fetchUsernameAndAciFromLink(url) + .map { result -> + when (result) { + is UsernameRepository.UsernameLinkConversionResult.Success -> QrScanResult.Success(result.username.toString(), Recipient.externalUsername(result.aci, result.username.toString())) + is UsernameRepository.UsernameLinkConversionResult.Invalid, + is UsernameRepository.UsernameLinkConversionResult.NotFound, + is UsernameRepository.UsernameLinkConversionResult.NetworkError -> QrScanResult.Failure + } + } + } + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { data -> + if (data is QrScanResult.Success) { + internalEvents.onNext(MediaCaptureEvent.UsernameScannedFromQrCode(data.recipient, data.username)) + } else { + Log.w(TAG, "Failed to scan QR code.") + } + } + + disposables += qrData + .throttleFirst(5, TimeUnit.SECONDS) + .filter { it.startsWith("sgnl://linkdevice") } + .subscribe { data -> + internalEvents.onNext(MediaCaptureEvent.DeviceLinkScannedFromQrCode) + } } override fun onCleared() { store.dispose() + disposables.dispose() } fun onImageCaptured(data: ByteArray, width: Int, height: Int) { @@ -44,6 +90,10 @@ class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : Vi return store.stateFlowable.map { Optional.ofNullable(it.mostRecentMedia) } } + fun onQrCodeFound(data: String) { + qrData.onNext(data) + } + private fun onMediaRendered(media: Media) { internalEvents.onNext(MediaCaptureEvent.MediaCaptureRendered(media)) } @@ -52,6 +102,11 @@ class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : Vi internalEvents.onNext(MediaCaptureEvent.MediaCaptureRenderFailed) } + private sealed class QrScanResult { + data class Success(val username: String, val recipient: Recipient) : QrScanResult() + object Failure : QrScanResult() + } + class Factory(private val repository: MediaCaptureRepository) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { return requireNotNull(modelClass.cast(MediaCaptureViewModel(repository))) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt index 455856a576..569126564e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaSelectionGalleryFragment.kt @@ -125,7 +125,7 @@ class MediaSelectionGalleryFragment : Fragment(R.layout.fragment_container), Med } override fun onSelectedMediaClicked(media: Media) { - sharedViewModel.setFocusedMedia(media) + sharedViewModel.onPageChanged(media) navigator.goToReview(findNavController()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/AddMessageDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/AddMessageDialogFragment.kt index 1362fdf9bd..61cf5c6e0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/AddMessageDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/AddMessageDialogFragment.kt @@ -16,6 +16,7 @@ import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import org.signal.core.util.EditTextUtil import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.KeyboardAwareLinearLayout import org.thoughtcrime.securesms.components.KeyboardEntryDialogFragment import org.thoughtcrime.securesms.components.ViewBinderDelegate import org.thoughtcrime.securesms.components.emoji.MediaKeyboard @@ -94,6 +95,12 @@ class AddMessageDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_a binding.content.emojiToggle.visible = false } else { binding.content.emojiToggle.setOnClickListener { onEmojiToggleClicked() } + if (requireArguments().getBoolean(ARG_INITIAL_EMOJI_TOGGLE) && view is KeyboardAwareLinearLayout) { + view.addOnKeyboardShownListener { + onEmojiToggleClicked() + view.removeOnKeyboardShownListener(this) + } + } } binding.hud.setOnClickListener { dismissAllowingStateLoss() } @@ -276,11 +283,13 @@ class AddMessageDialogFragment : KeyboardEntryDialogFragment(R.layout.v2_media_a const val TAG = "ADD_MESSAGE_DIALOG_FRAGMENT" private const val ARG_INITIAL_TEXT = "arg.initial.text" + private const val ARG_INITIAL_EMOJI_TOGGLE = "arg.initial.emojiToggle" - fun show(fragmentManager: FragmentManager, initialText: CharSequence?) { + fun show(fragmentManager: FragmentManager, initialText: CharSequence?, startWithEmojiKeyboard: Boolean) { AddMessageDialogFragment().apply { arguments = Bundle().apply { putCharSequence(ARG_INITIAL_TEXT, initialText) + putBoolean(ARG_INITIAL_EMOJI_TOGGLE, startWithEmojiKeyboard) } }.show(fragmentManager, TAG) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewAnimatorController.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewAnimatorController.kt index cdd919da92..fe52627a14 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewAnimatorController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewAnimatorController.kt @@ -4,35 +4,44 @@ import android.animation.Animator import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.view.View +import android.view.animation.Interpolator import androidx.core.animation.doOnEnd -import org.thoughtcrime.securesms.util.ContextUtil +import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations import org.thoughtcrime.securesms.util.visible object MediaReviewAnimatorController { - fun getSlideInAnimator(view: View): Animator { - return if (ContextUtil.getAnimationScale(view.context) == 0f) { - view.translationY = 0f - ValueAnimator.ofFloat(0f, 1f) - } else { - ObjectAnimator.ofFloat(view, "translationY", view.translationY, 0f) - } - } - fun getFadeInAnimator(view: View, isEnabled: Boolean = true): Animator { view.visible = true view.isEnabled = isEnabled - return ObjectAnimator.ofFloat(view, "alpha", view.alpha, 1f) + return ObjectAnimator.ofFloat(view, "alpha", view.alpha, 1f).apply { + interpolator = MediaAnimations.interpolator + } } fun getFadeOutAnimator(view: View, isEnabled: Boolean = false): Animator { view.isEnabled = isEnabled - val animator = ObjectAnimator.ofFloat(view, "alpha", view.alpha, 0f) + val animator = ObjectAnimator.ofFloat(view, "alpha", view.alpha, 0f).apply { + interpolator = MediaAnimations.interpolator + } animator.doOnEnd { view.visible = false } return animator } + + fun getHeightAnimator(view: View, start: Int, end: Int, interpolator: Interpolator = MediaAnimations.interpolator): Animator { + return ValueAnimator.ofInt(start, end).apply { + setInterpolator(interpolator) + addUpdateListener { + val animatedValue = it.animatedValue as Int + val layoutParams = view.layoutParams + layoutParams.height = animatedValue + view.layoutParams = layoutParams + } + duration = 120 + } + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt index cb3f5f0d67..ca4cc7c825 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewFragment.kt @@ -2,9 +2,14 @@ package org.thoughtcrime.securesms.mediasend.v2.review import android.animation.Animator import android.animation.AnimatorSet +import android.content.Context import android.content.res.ColorStateList import android.graphics.Color +import android.graphics.Rect +import android.net.Uri import android.os.Bundle +import android.provider.OpenableColumns +import android.view.Gravity import android.view.View import android.view.ViewGroup import android.widget.ImageView @@ -17,6 +22,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.ViewCompat +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController @@ -25,9 +31,12 @@ import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import app.cash.exhaustive.Exhaustive import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.imageview.ShapeableImageView import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import org.signal.core.util.concurrent.LifecycleDisposable import org.signal.core.util.concurrent.SimpleTask +import org.signal.core.util.isNotNullOrBlank +import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey import org.thoughtcrime.securesms.conversation.MessageSendType @@ -35,6 +44,8 @@ import org.thoughtcrime.securesms.conversation.ScheduleMessageContextMenu import org.thoughtcrime.securesms.conversation.ScheduleMessageTimePickerBottomSheet import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardActivity import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mediasend.MediaSendActivityResult import org.thoughtcrime.securesms.mediasend.v2.HudCommand import org.thoughtcrime.securesms.mediasend.v2.MediaAnimations @@ -44,21 +55,30 @@ import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel import org.thoughtcrime.securesms.mediasend.v2.MediaValidator import org.thoughtcrime.securesms.mediasend.v2.stories.StoriesMultiselectForwardActivity +import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.mms.SentMediaQuality import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.scribbles.ImageEditorFragment +import org.thoughtcrime.securesms.util.BottomSheetUtil import org.thoughtcrime.securesms.util.MediaUtil +import org.thoughtcrime.securesms.util.MemoryUnitFormat import org.thoughtcrime.securesms.util.SystemWindowInsetsSetter import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.fragments.requireListener import org.thoughtcrime.securesms.util.views.TouchInterceptingFrameLayout import org.thoughtcrime.securesms.util.visible +import org.thoughtcrime.securesms.video.TranscodingQuality +import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView +import java.io.IOException +import java.util.Locale +import java.util.concurrent.TimeUnit +import kotlin.math.roundToInt /** * Allows the user to view and edit selected media. */ -class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), ScheduleMessageTimePickerBottomSheet.ScheduleCallback { +class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), ScheduleMessageTimePickerBottomSheet.ScheduleCallback, VideoThumbnailsRangeSelectorView.RangeDragListener { private val sharedViewModel: MediaSelectionViewModel by viewModels( ownerProducer = { requireActivity() } @@ -73,23 +93,28 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul private lateinit var sendButton: ImageView private lateinit var addMediaButton: View private lateinit var viewOnceButton: ViewSwitcher - private lateinit var viewOnceMessage: TextView + private lateinit var emojiButton: ShapeableImageView private lateinit var addMessageButton: TextView - private lateinit var addMessageEntry: TextView private lateinit var recipientDisplay: TextView private lateinit var pager: ViewPager2 private lateinit var controls: ConstraintLayout private lateinit var selectionRecycler: RecyclerView private lateinit var controlsShade: View + private lateinit var videoTimeLine: VideoThumbnailsRangeSelectorView + private lateinit var videoSizeHint: TextView + private lateinit var videoTimelinePlaceholder: View private lateinit var progress: ProgressBar private lateinit var progressWrapper: TouchInterceptingFrameLayout + private val exclusionZone = listOf(Rect()) private val navigator = MediaSelectionNavigator( toGallery = R.id.action_mediaReviewFragment_to_mediaGalleryFragment ) private var animatorSet: AnimatorSet? = null private var disposables: LifecycleDisposable = LifecycleDisposable() + private var sentMediaQuality: SentMediaQuality = SignalStore.settings().sentMediaQuality + private var viewOnceToggleState: MediaSelectionState.ViewOnceToggleState = MediaSelectionState.ViewOnceToggleState.default private var scheduledSendTime: Long? = null @@ -109,16 +134,18 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul sendButton = view.findViewById(R.id.send) addMediaButton = view.findViewById(R.id.add_media) viewOnceButton = view.findViewById(R.id.view_once_toggle) + emojiButton = view.findViewById(R.id.emoji_button) addMessageButton = view.findViewById(R.id.add_a_message) - addMessageEntry = view.findViewById(R.id.add_a_message_entry) recipientDisplay = view.findViewById(R.id.recipient) pager = view.findViewById(R.id.media_pager) controls = view.findViewById(R.id.controls) selectionRecycler = view.findViewById(R.id.selection_recycler) controlsShade = view.findViewById(R.id.controls_shade) - viewOnceMessage = view.findViewById(R.id.view_once_message) progress = view.findViewById(R.id.progress) progressWrapper = view.findViewById(R.id.progress_wrapper) + videoTimeLine = view.findViewById(R.id.video_timeline) + videoSizeHint = view.findViewById(R.id.video_size_hint) + videoTimelinePlaceholder = view.findViewById(R.id.timeline_placeholder) DrawableCompat.setTint(progress.indeterminateDrawable, Color.WHITE) progressWrapper.setOnInterceptTouchEventListener { true } @@ -134,6 +161,14 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul pager.adapter = pagerAdapter + controls.addOnLayoutChangeListener { v, left, _, right, _, _, _, _, _ -> + val outRect: Rect = exclusionZone[0] + videoTimeLine.getHitRect(outRect) + outRect.left = left + outRect.right = right + ViewCompat.setSystemGestureExclusionRects(v, exclusionZone) + } + drawToolButton.setOnClickListener { sharedViewModel.sendCommand(HudCommand.StartDraw) } @@ -143,7 +178,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } qualityButton.setOnClickListener { - QualitySelectorBottomSheetDialog.show(parentFragmentManager) + QualitySelectorBottomSheet().show(parentFragmentManager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG) } saveButton.setOnClickListener { @@ -241,12 +276,14 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul sharedViewModel.incrementViewOnceState() } - addMessageButton.setOnClickListener { - AddMessageDialogFragment.show(parentFragmentManager, sharedViewModel.state.value?.message) + if (!SignalStore.settings().isPreferSystemEmoji) { + emojiButton.setOnClickListener { + AddMessageDialogFragment.show(parentFragmentManager, sharedViewModel.state.value?.message, true) + } } - addMessageEntry.setOnClickListener { - AddMessageDialogFragment.show(parentFragmentManager, sharedViewModel.state.value?.message) + addMessageButton.setOnClickListener { + AddMessageDialogFragment.show(parentFragmentManager, sharedViewModel.state.value?.message, false) } if (sharedViewModel.isReply) { @@ -255,10 +292,16 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { - sharedViewModel.setFocusedMedia(position) + qualityButton.alpha = 0f + saveButton.alpha = 0f + sharedViewModel.onPageChanged(position) } }) + if (MediaConstraints.isVideoTranscodeAvailable()) { + videoTimeLine.registerEditorOnRangeChangeListener(this) + } + val selectionAdapter = MappingAdapter(false) MediaReviewAddItem.register(selectionAdapter) { launchGallery() @@ -267,7 +310,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul if (isSelected) { sharedViewModel.removeMedia(media) } else { - sharedViewModel.setFocusedMedia(media) + sharedViewModel.onPageChanged(media) } } selectionRecycler.adapter = selectionAdapter @@ -282,10 +325,24 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul presentSendButton(state.sendType, state.recipient) presentPager(state) - presentAddMessageEntry(state.message) - presentImageQualityToggle(state.quality) + presentAddMessageEntry(state.viewOnceToggleState, state.message) + presentImageQualityToggle(state) + if (state.quality != sentMediaQuality) { + presentQualityToggleToast(state) + } + sentMediaQuality = state.quality viewOnceButton.displayedChild = if (state.viewOnceToggleState == MediaSelectionState.ViewOnceToggleState.ONCE) 1 else 0 + if (state.viewOnceToggleState != viewOnceToggleState && + state.viewOnceToggleState == MediaSelectionState.ViewOnceToggleState.ONCE && + state.selectedMedia.size == 1 + ) { + presentViewOnceToggleToast(MediaUtil.isNonGifVideo(state.selectedMedia[0])) + } + viewOnceToggleState = state.viewOnceToggleState + + presentVideoTimeline(state) + presentVideoSizeHint(state) computeViewStateAndAnimate(state) } @@ -305,6 +362,56 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul ) } + private fun presentViewOnceToggleToast(isVideo: Boolean) { + val description = if (isVideo) { + getString(R.string.MediaReviewFragment__video_set_to_view_once) + } else { + getString(R.string.MediaReviewFragment__photo_set_to_view_once) + } + + MediaReviewToastPopupWindow.show(controls, R.drawable.symbol_view_once_24, description) + } + + private fun presentQualityToggleToast(state: MediaSelectionState) { + val mediaList = state.selectedMedia + if (mediaList.isEmpty()) { + return + } + + val description = if (mediaList.size == 1) { + val media: Media = mediaList[0] + if (MediaUtil.isNonGifVideo(media)) { + if (state.quality == SentMediaQuality.HIGH) { + getString(R.string.MediaReviewFragment__video_set_to_high_quality) + } else { + getString(R.string.MediaReviewFragment__video_set_to_standard_quality) + } + } else if (MediaUtil.isImageType(media.mimeType)) { + if (state.quality == SentMediaQuality.HIGH) { + getString(R.string.MediaReviewFragment__photo_set_to_high_quality) + } else { + getString(R.string.MediaReviewFragment__photo_set_to_standard_quality) + } + } else { + Log.i(TAG, "Could not display quality toggle toast for attachment of type: ${media.mimeType}") + return + } + } else { + if (state.quality == SentMediaQuality.HIGH) { + resources.getQuantityString(R.plurals.MediaReviewFragment__items_set_to_high_quality, mediaList.size, mediaList.size) + } else { + resources.getQuantityString(R.plurals.MediaReviewFragment__items_set_to_standard_quality, mediaList.size, mediaList.size) + } + } + + val icon = when (state.quality) { + SentMediaQuality.HIGH -> R.drawable.symbol_quality_high_24 + else -> R.drawable.symbol_quality_high_slash_24 + } + + MediaReviewToastPopupWindow.show(controls, icon, description) + } + override fun onResume() { super.onResume() sharedViewModel.kick() @@ -357,15 +464,38 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul ) } - private fun presentAddMessageEntry(message: CharSequence?) { - addMessageEntry.setText(message, TextView.BufferType.SPANNABLE) + private fun presentAddMessageEntry(viewOnceState: MediaSelectionState.ViewOnceToggleState, message: CharSequence?) { + when (viewOnceState) { + MediaSelectionState.ViewOnceToggleState.INFINITE -> { + addMessageButton.gravity = Gravity.CENTER_VERTICAL + addMessageButton.setText( + message.takeIf { it.isNotNullOrBlank() } ?: getString(R.string.MediaReviewFragment__add_a_message), + TextView.BufferType.SPANNABLE + ) + addMessageButton.isClickable = true + } + MediaSelectionState.ViewOnceToggleState.ONCE -> { + addMessageButton.gravity = Gravity.CENTER + addMessageButton.setText(R.string.MediaReviewFragment__view_once_message) + addMessageButton.isClickable = false + } + } } - private fun presentImageQualityToggle(quality: SentMediaQuality) { + private fun presentImageQualityToggle(state: MediaSelectionState) { + qualityButton.updateLayoutParams { + if (MediaUtil.isImageAndNotGif(state.focusedMedia?.mimeType ?: "")) { + startToStart = ConstraintLayout.LayoutParams.UNSET + startToEnd = cropAndRotateButton.id + } else { + startToStart = ConstraintLayout.LayoutParams.PARENT_ID + startToEnd = ConstraintLayout.LayoutParams.UNSET + } + } qualityButton.setImageResource( - when (quality) { - SentMediaQuality.STANDARD -> R.drawable.ic_sq_24 - SentMediaQuality.HIGH -> R.drawable.ic_hq_24 + when (state.quality) { + SentMediaQuality.STANDARD -> R.drawable.symbol_quality_high_slash_24 + SentMediaQuality.HIGH -> R.drawable.symbol_quality_high_24 } ) } @@ -378,8 +508,8 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } val sendButtonForegroundDrawable = when { - recipient != null -> ContextCompat.getDrawable(requireContext(), R.drawable.ic_send_24) - else -> ContextCompat.getDrawable(requireContext(), R.drawable.ic_arrow_end_24) + recipient != null -> ContextCompat.getDrawable(requireContext(), R.drawable.symbol_send_fill_24) + else -> ContextCompat.getDrawable(requireContext(), R.drawable.symbol_arrow_end_24) } val sendButtonForegroundTint = when { @@ -408,12 +538,49 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } } + private fun presentVideoTimeline(state: MediaSelectionState) { + val mediaItem = state.focusedMedia ?: return + if (!MediaUtil.isVideoType(mediaItem.mimeType) || !MediaConstraints.isVideoTranscodeAvailable()) { + return + } + val uri = mediaItem.uri + videoTimeLine.unregisterPlayerOnRangeChangeListener() + videoTimeLine.setInput(uri) + val size: Long = tryGetUriSize(requireContext(), uri, Long.MAX_VALUE) + val maxSend = sharedViewModel.getMediaConstraints().getVideoMaxSize(requireContext()) + if (size > maxSend) { + videoTimeLine.setTimeLimit(state.transcodingPreset.calculateMaxVideoUploadDurationInSeconds(maxSend), TimeUnit.SECONDS) + } + + if (state.isTouchEnabled) { + val data = state.getOrCreateVideoTrimData(uri) + + if (data.totalInputDurationUs > 0) { + videoTimeLine.setRange(data.startTimeUs, data.endTimeUs) + } + } + } + + private fun presentVideoSizeHint(state: MediaSelectionState) { + val focusedMedia = state.focusedMedia ?: return + val trimData = state.getOrCreateVideoTrimData(focusedMedia.uri) + + videoSizeHint.text = if (state.isVideoTrimmingVisible) { + val seconds = trimData.getDuration().inWholeSeconds + val bytes = TranscodingQuality.createFromPreset(state.transcodingPreset, trimData.getDuration().inWholeMilliseconds).byteCountEstimate + String.format(Locale.getDefault(), "%d:%02d • %s", seconds / 60, seconds % 60, MemoryUnitFormat.formatBytes(bytes, MemoryUnitFormat.MEGA_BYTES, true)) + } else { + null + } + } + private fun computeViewStateAndAnimate(state: MediaSelectionState) { this.animatorSet?.cancel() val animators = mutableListOf() animators.addAll(computeAddMessageAnimators(state)) + animators.addAll(computeEmojiButtonAnimators(state)) animators.addAll(computeViewOnceButtonAnimators(state)) animators.addAll(computeAddMediaButtonsAnimators(state)) animators.addAll(computeSendButtonAnimators(state)) @@ -423,54 +590,70 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul animators.addAll(computeDrawToolButtonAnimators(state)) animators.addAll(computeRecipientDisplayAnimators(state)) animators.addAll(computeControlsShadeAnimators(state)) + animators.addAll(computeVideoTimelineAnimator(state)) val animatorSet = AnimatorSet() animatorSet.playTogether(animators) - animatorSet.interpolator = MediaAnimations.interpolator animatorSet.start() this.animatorSet = animatorSet } private fun computeControlsShadeAnimators(state: MediaSelectionState): List { - return if (state.isTouchEnabled) { - listOf(MediaReviewAnimatorController.getFadeInAnimator(controlsShade)) + val animators = mutableListOf() + animators += if (state.isTouchEnabled) { + MediaReviewAnimatorController.getFadeInAnimator(controlsShade) + } else { + MediaReviewAnimatorController.getFadeOutAnimator(controlsShade) + } + + animators += if (state.isVideoTrimmingVisible) { + MediaReviewAnimatorController.getHeightAnimator(videoTimelinePlaceholder, videoTimelinePlaceholder.height, resources.getDimension(R.dimen.video_timeline_height_expanded).roundToInt()) } else { - listOf(MediaReviewAnimatorController.getFadeOutAnimator(controlsShade)) + MediaReviewAnimatorController.getHeightAnimator(videoTimelinePlaceholder, videoTimelinePlaceholder.height, resources.getDimension(R.dimen.video_timeline_height_collapsed).roundToInt()) } + + return animators } - private fun computeAddMessageAnimators(state: MediaSelectionState): List { - return when { - !state.isTouchEnabled -> { - listOf( - MediaReviewAnimatorController.getFadeOutAnimator(viewOnceMessage), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageButton), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageEntry) - ) + private fun computeVideoTimelineAnimator(state: MediaSelectionState): List { + val animators = mutableListOf() + + if (state.isVideoTrimmingVisible) { + animators += MediaReviewAnimatorController.getFadeInAnimator(videoTimeLine).apply { + startDelay = 100 + duration = 500 } - state.viewOnceToggleState == MediaSelectionState.ViewOnceToggleState.ONCE -> { - listOf( - MediaReviewAnimatorController.getFadeInAnimator(viewOnceMessage), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageButton), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageEntry) - ) + } else { + animators += MediaReviewAnimatorController.getFadeOutAnimator(videoTimeLine).apply { + duration = 400 } - state.message.isNullOrEmpty() -> { - listOf( - MediaReviewAnimatorController.getFadeOutAnimator(viewOnceMessage), - MediaReviewAnimatorController.getFadeInAnimator(addMessageButton), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageEntry) - ) + } + + animators += if (state.isVideoTrimmingVisible && state.isTouchEnabled) { + MediaReviewAnimatorController.getFadeInAnimator(videoSizeHint).apply { + startDelay = 100 + duration = 500 } - else -> { - listOf( - MediaReviewAnimatorController.getFadeOutAnimator(viewOnceMessage), - MediaReviewAnimatorController.getFadeInAnimator(addMessageEntry), - MediaReviewAnimatorController.getFadeOutAnimator(addMessageButton) - ) + } else { + MediaReviewAnimatorController.getFadeOutAnimator(videoSizeHint).apply { + duration = 400 } } + + return animators + } + + private fun computeAddMessageAnimators(state: MediaSelectionState): List { + return if (!state.isTouchEnabled) { + listOf( + MediaReviewAnimatorController.getFadeOutAnimator(addMessageButton) + ) + } else { + listOf( + MediaReviewAnimatorController.getFadeInAnimator(addMessageButton) + ) + } } private fun computeViewOnceButtonAnimators(state: MediaSelectionState): List { @@ -481,6 +664,14 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } } + private fun computeEmojiButtonAnimators(state: MediaSelectionState): List { + return if (state.isTouchEnabled && !state.isStory && !SignalStore.settings().isPreferSystemEmoji) { + listOf(MediaReviewAnimatorController.getFadeInAnimator(emojiButton)) + } else { + listOf(MediaReviewAnimatorController.getFadeOutAnimator(emojiButton)) + } + } + private fun computeAddMediaButtonsAnimators(state: MediaSelectionState): List { return when { !state.isTouchEnabled || state.viewOnceToggleState == MediaSelectionState.ViewOnceToggleState.ONCE -> { @@ -505,27 +696,19 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } private fun computeSendButtonAnimators(state: MediaSelectionState): List { - val slideIn = listOf( - MediaReviewAnimatorController.getSlideInAnimator(sendButton) - ) - - return slideIn + if (state.isTouchEnabled) { + return if (state.isTouchEnabled) { listOf( - MediaReviewAnimatorController.getFadeInAnimator(sendButton, state.canSend) + MediaReviewAnimatorController.getFadeInAnimator(sendButton, isEnabled = state.canSend) ) } else { listOf( - MediaReviewAnimatorController.getFadeOutAnimator(sendButton, state.canSend) + MediaReviewAnimatorController.getFadeOutAnimator(sendButton, isEnabled = state.canSend) ) } } private fun computeSaveButtonAnimators(state: MediaSelectionState): List { - val slideIn = listOf( - MediaReviewAnimatorController.getSlideInAnimator(saveButton) - ) - - return slideIn + if (state.isTouchEnabled && !MediaUtil.isVideo(state.focusedMedia?.mimeType)) { + return if (state.isTouchEnabled && !MediaUtil.isVideo(state.focusedMedia?.mimeType)) { listOf( MediaReviewAnimatorController.getFadeInAnimator(saveButton) ) @@ -537,9 +720,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } private fun computeQualityButtonAnimators(state: MediaSelectionState): List { - val slide = listOf(MediaReviewAnimatorController.getSlideInAnimator(qualityButton)) - - return slide + if (state.isTouchEnabled && !state.isStory && state.selectedMedia.any { MediaUtil.isImageType(it.mimeType) }) { + return if (state.isTouchEnabled && !state.isStory) { listOf(MediaReviewAnimatorController.getFadeInAnimator(qualityButton)) } else { listOf(MediaReviewAnimatorController.getFadeOutAnimator(qualityButton)) @@ -547,9 +728,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } private fun computeCropAndRotateButtonAnimators(state: MediaSelectionState): List { - val slide = listOf(MediaReviewAnimatorController.getSlideInAnimator(cropAndRotateButton)) - - return slide + if (state.isTouchEnabled && MediaUtil.isImageAndNotGif(state.focusedMedia?.mimeType ?: "")) { + return if (state.isTouchEnabled && MediaUtil.isImageAndNotGif(state.focusedMedia?.mimeType ?: "")) { listOf(MediaReviewAnimatorController.getFadeInAnimator(cropAndRotateButton)) } else { listOf(MediaReviewAnimatorController.getFadeOutAnimator(cropAndRotateButton)) @@ -557,9 +736,7 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } private fun computeDrawToolButtonAnimators(state: MediaSelectionState): List { - val slide = listOf(MediaReviewAnimatorController.getSlideInAnimator(drawToolButton)) - - return slide + if (state.isTouchEnabled && MediaUtil.isImageAndNotGif(state.focusedMedia?.mimeType ?: "")) { + return if (state.isTouchEnabled && MediaUtil.isImageAndNotGif(state.focusedMedia?.mimeType ?: "")) { listOf(MediaReviewAnimatorController.getFadeInAnimator(drawToolButton)) } else { listOf(MediaReviewAnimatorController.getFadeOutAnimator(drawToolButton)) @@ -575,6 +752,29 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul } } + companion object { + private val TAG = Log.tag(MediaReviewFragment::class.java) + + @JvmStatic + private fun tryGetUriSize(context: Context, uri: Uri, defaultValue: Long): Long { + return try { + var size: Long = 0 + context.contentResolver.query(uri, null, null, null, null).use { cursor -> + if (cursor != null && cursor.moveToFirst() && cursor.getColumnIndex(OpenableColumns.SIZE) >= 0) { + size = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE)) + } + } + if (size <= 0) { + size = MediaUtil.getMediaSize(context, uri) + } + size + } catch (e: IOException) { + Log.w(TAG, e) + defaultValue + } + } + } + interface Callback { fun onSentWithResult(mediaSendActivityResult: MediaSendActivityResult) fun onSentWithoutResult() @@ -587,4 +787,8 @@ class MediaReviewFragment : Fragment(R.layout.v2_media_review_fragment), Schedul scheduledSendTime = scheduledTime sendButton.performClick() } + + override fun onRangeDrag(minValue: Long, maxValue: Long, duration: Long, end: Boolean) { + sharedViewModel.onEditVideoDuration(context = requireContext(), totalDurationUs = duration, startTimeUs = minValue, endTimeUs = maxValue, touchEnabled = end) + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewToastPopupWindow.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewToastPopupWindow.kt new file mode 100644 index 0000000000..a17fd4ce19 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/MediaReviewToastPopupWindow.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.mediasend.v2.review + +import android.view.Gravity +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.PopupWindow +import android.widget.TextView +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.util.ViewUtil +import kotlin.time.Duration.Companion.seconds + +/** + * Toast-style notification used in the media review flow. This exists so we can specify the location and animation of how it appears. + */ +class MediaReviewToastPopupWindow private constructor(parent: ViewGroup, iconResource: Int, descriptionText: String) : PopupWindow( + LayoutInflater.from(parent.context).inflate(R.layout.v2_media_review_quality_popup_window, parent, false), + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT +) { + + private val icon: ImageView = contentView.findViewById(R.id.media_review_toast_popup_icon) + private val description: TextView = contentView.findViewById(R.id.media_review_toast_popup_description) + + init { + elevation = ViewUtil.dpToPx(8).toFloat() + animationStyle = R.style.StickerPopupAnimation + icon.setImageResource(iconResource) + description.text = descriptionText + } + + private fun show(parent: ViewGroup) { + showAtLocation(parent, Gravity.CENTER, 0, 0) + measureChild() + update() + contentView.postDelayed({ dismiss() }, DURATION) + } + + private fun measureChild() { + contentView.measure( + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ) + } + + companion object { + private val DURATION = 3.seconds.inWholeMilliseconds + + @JvmStatic + fun show(parent: ViewGroup, icon: Int, description: String): MediaReviewToastPopupWindow { + val qualityToast = MediaReviewToastPopupWindow(parent, icon, description) + qualityToast.show(parent) + return qualityToast + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheet.kt new file mode 100644 index 0000000000..d72172c639 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheet.kt @@ -0,0 +1,124 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.mediasend.v2.review + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.fragment.app.viewModels +import org.signal.core.ui.BottomSheets +import org.signal.core.ui.theme.SignalTheme +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment +import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel +import org.thoughtcrime.securesms.mms.SentMediaQuality + +/** + * Bottom sheet dialog to select the media quality (Standard vs. High) when sending media. + */ +class QualitySelectorBottomSheet : ComposeBottomSheetDialogFragment() { + private val sharedViewModel: MediaSelectionViewModel by viewModels(ownerProducer = { requireActivity() }) + + override val forceDarkTheme = true + + @Composable + override fun SheetContent() { + val state by sharedViewModel.state.observeAsState() + val quality = state?.quality + if (quality != null) { + Content(quality = quality, onQualitySelected = { + sharedViewModel.setSentMediaQuality(it) + dismiss() + }) + } + } +} + +@Composable +private fun Content(quality: SentMediaQuality, onQualitySelected: (SentMediaQuality) -> Unit) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Box(contentAlignment = Alignment.Center, modifier = Modifier.fillMaxWidth()) { + BottomSheets.Handle(modifier = Modifier.padding(top = 6.dp)) + } + + Text( + text = stringResource(id = R.string.QualitySelectorBottomSheetDialog__media_quality), + style = MaterialTheme.typography.titleLarge, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(top = 20.dp, bottom = 14.dp) + ) + Row( + horizontalArrangement = Arrangement.SpaceEvenly, + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 20.dp) + ) { + val standardQuality = quality == SentMediaQuality.STANDARD + Button( + modifier = Modifier.defaultMinSize(minWidth = 174.dp, minHeight = 60.dp), + onClick = { onQualitySelected(SentMediaQuality.STANDARD) }, + shape = RoundedCornerShape(percent = 25), + colors = if (standardQuality) ButtonDefaults.filledTonalButtonColors() else ButtonDefaults.textButtonColors(), + elevation = if (standardQuality) ButtonDefaults.filledTonalButtonElevation() else null, + contentPadding = if (standardQuality) ButtonDefaults.ContentPadding else ButtonDefaults.TextButtonContentPadding + ) { + ButtonLabel(title = stringResource(id = R.string.QualitySelectorBottomSheetDialog__standard), description = stringResource(id = R.string.QualitySelectorBottomSheetDialog__faster_less_data)) + } + Button( + modifier = Modifier.defaultMinSize(minWidth = 174.dp, minHeight = 60.dp), + onClick = { onQualitySelected(SentMediaQuality.HIGH) }, + shape = RoundedCornerShape(percent = 25), + colors = if (!standardQuality) ButtonDefaults.filledTonalButtonColors() else ButtonDefaults.textButtonColors(), + elevation = if (!standardQuality) ButtonDefaults.filledTonalButtonElevation() else null, + contentPadding = if (!standardQuality) ButtonDefaults.ContentPadding else ButtonDefaults.TextButtonContentPadding + ) { + ButtonLabel(title = stringResource(id = R.string.QualitySelectorBottomSheetDialog__high), description = stringResource(id = R.string.QualitySelectorBottomSheetDialog__slower_more_data)) + } + } + } +} + +@Composable +private fun ButtonLabel(title: String, description: String) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text(text = title, color = MaterialTheme.colorScheme.onSurface) + Text(text = description, color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.bodySmall) + } +} + +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun PreviewQualitySelectorBottomSheetStandard() { + SignalTheme(isDarkMode = true) { + Content(SentMediaQuality.STANDARD) {} + } +} + +@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun PreviewQualitySelectorBottomSheetHigh() { + SignalTheme(isDarkMode = true) { + Content(SentMediaQuality.HIGH) {} + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheetDialog.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheetDialog.java deleted file mode 100644 index 5e985a952f..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/review/QualitySelectorBottomSheetDialog.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.thoughtcrime.securesms.mediasend.v2.review; - -import android.os.Bundle; -import android.view.ContextThemeWrapper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentManager; -import androidx.lifecycle.ViewModelProvider; - -import com.google.android.material.bottomsheet.BottomSheetDialogFragment; - -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionState; -import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel; -import org.thoughtcrime.securesms.mms.SentMediaQuality; -import org.thoughtcrime.securesms.util.BottomSheetUtil; -import org.thoughtcrime.securesms.util.WindowUtil; -import org.thoughtcrime.securesms.util.views.CheckedLinearLayout; - -/** - * Dialog for selecting media quality, tightly coupled with {@link MediaSelectionViewModel}. - */ -public final class QualitySelectorBottomSheetDialog extends BottomSheetDialogFragment { - - private MediaSelectionViewModel viewModel; - private CheckedLinearLayout standard; - private CheckedLinearLayout high; - - public static void show(@NonNull FragmentManager manager) { - QualitySelectorBottomSheetDialog fragment = new QualitySelectorBottomSheetDialog(); - - fragment.show(manager, BottomSheetUtil.STANDARD_BOTTOM_SHEET_FRAGMENT_TAG); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_Signal_RoundedBottomSheet); - super.onCreate(savedInstanceState); - } - - @Override - public @NonNull View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(inflater.getContext(), R.style.TextSecure_DarkTheme); - LayoutInflater themedInflater = LayoutInflater.from(contextThemeWrapper); - - return themedInflater.inflate(R.layout.quality_selector_dialog, container, false); - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { - standard = view.findViewById(R.id.quality_selector_dialog_standard); - high = view.findViewById(R.id.quality_selector_dialog_high); - - View.OnClickListener listener = v -> { - select(v); - view.postDelayed(this::dismissAllowingStateLoss, 250); - }; - - standard.setOnClickListener(listener); - high.setOnClickListener(listener); - - viewModel = new ViewModelProvider(requireActivity()).get(MediaSelectionViewModel.class); - viewModel.getState().observe(getViewLifecycleOwner(), this::updateQuality); - } - - @Override - public void onResume() { - super.onResume(); - WindowUtil.initializeScreenshotSecurity(requireContext(), requireDialog().getWindow()); - } - - private void updateQuality(@NonNull MediaSelectionState selectionState) { - select(selectionState.getQuality() == SentMediaQuality.STANDARD ? standard : high); - } - - private void select(@NonNull View view) { - standard.setChecked(view == standard); - high.setChecked(view == high); - viewModel.setSentMediaQuality(standard == view ? SentMediaQuality.STANDARD : SentMediaQuality.HIGH); - } - - @Override - public void show(@NonNull FragmentManager manager, @Nullable String tag) { - BottomSheetUtil.show(manager, tag, this); - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/MediaReviewVideoPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/MediaReviewVideoPageFragment.kt index 5a462c2498..0bcad54282 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/MediaReviewVideoPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/MediaReviewVideoPageFragment.kt @@ -10,8 +10,6 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.mediasend.VideoEditorFragment import org.thoughtcrime.securesms.mediasend.v2.HudCommand import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel -import org.thoughtcrime.securesms.mms.MediaConstraints -import org.thoughtcrime.securesms.stories.Stories private const val VIDEO_EDITOR_TAG = "video.editor.fragment" @@ -34,18 +32,6 @@ class MediaReviewVideoPageFragment : Fragment(R.layout.fragment_container), Vide restoreVideoEditorState() } - override fun onSaveInstanceState(outState: Bundle) { - super.onSaveInstanceState(outState) - saveEditorState() - } - - private fun saveEditorState() { - val saveState = videoEditorFragment.saveState() - if (saveState != null) { - sharedViewModel.setEditorState(requireUri(), saveState) - } - } - override fun onPlayerReady() { sharedViewModel.sendCommand(HudCommand.ResumeEntryTransition) } @@ -57,17 +43,8 @@ class MediaReviewVideoPageFragment : Fragment(R.layout.fragment_container), Vide override fun onTouchEventsNeeded(needed: Boolean) { sharedViewModel.setTouchEnabled(!needed) } - - override fun onVideoBeginEdit(uri: Uri) { - sharedViewModel.onVideoBeginEdit(uri) - } - - override fun onVideoEndEdit(uri: Uri) { - saveEditorState() - } - private fun restoreVideoEditorState() { - val data = sharedViewModel.getEditorState(requireUri()) as? VideoEditorFragment.Data + val data = sharedViewModel.getEditorState(requireUri()) as? VideoTrimData if (data != null) { videoEditorFragment.restoreState(data) @@ -82,10 +59,8 @@ class MediaReviewVideoPageFragment : Fragment(R.layout.fragment_container), Vide } else { val videoEditorFragment = VideoEditorFragment.newInstance( requireUri(), - requireMaxCompressedVideoSize(), requireMaxAttachmentSize(), - requireIsVideoGif(), - requireMaxVideoDuration() + requireIsVideoGif() ) childFragmentManager.beginTransaction() @@ -101,10 +76,8 @@ class MediaReviewVideoPageFragment : Fragment(R.layout.fragment_container), Vide } private fun requireUri(): Uri = requireNotNull(requireArguments().getParcelableCompat(ARG_URI, Uri::class.java)) - private fun requireMaxCompressedVideoSize(): Long = sharedViewModel.getMediaConstraints().getCompressedVideoMaxSize(requireContext()).toLong() - private fun requireMaxAttachmentSize(): Long = sharedViewModel.getMediaConstraints().getVideoMaxSize(requireContext()).toLong() + private fun requireMaxAttachmentSize(): Long = sharedViewModel.getMediaConstraints().getVideoMaxSize(requireContext()) private fun requireIsVideoGif(): Boolean = requireNotNull(requireArguments().getBoolean(ARG_IS_VIDEO_GIF)) - private fun requireMaxVideoDuration(): Long = if (sharedViewModel.isStory() && !MediaConstraints.isVideoTranscodeAvailable()) Stories.MAX_VIDEO_DURATION_MILLIS else Long.MAX_VALUE companion object { private const val ARG_URI = "arg.uri" diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/VideoTrimData.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/VideoTrimData.kt new file mode 100644 index 0000000000..2dec255b28 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/videos/VideoTrimData.kt @@ -0,0 +1,48 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.mediasend.v2.videos + +import android.os.Bundle +import kotlin.time.Duration +import kotlin.time.Duration.Companion.microseconds + +/** + * This represents the editor state for the video trimmer. + */ +data class VideoTrimData( + val isDurationEdited: Boolean = false, + val totalInputDurationUs: Long = 0, + val startTimeUs: Long = 0, + val endTimeUs: Long = 0 +) { + + fun getDuration(): Duration = (endTimeUs - startTimeUs).microseconds + + fun toBundle(): Bundle { + return Bundle().apply { + putByte(KEY_EDITED, (if (isDurationEdited) 1 else 0).toByte()) + putLong(KEY_TOTAL, totalInputDurationUs) + putLong(KEY_START, startTimeUs) + putLong(KEY_END, endTimeUs) + } + } + + companion object { + private const val KEY_EDITED = "EDITED" + private const val KEY_TOTAL = "TOTAL" + private const val KEY_START = "START" + private const val KEY_END = "END" + + fun fromBundle(bundle: Bundle): VideoTrimData { + return VideoTrimData( + isDurationEdited = bundle.getByte(KEY_EDITED) == 1.toByte(), + totalInputDurationUs = bundle.getLong(KEY_TOTAL), + startTimeUs = bundle.getLong(KEY_START), + endTimeUs = bundle.getLong(KEY_END) + ) + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 55c1b6d82d..d95e62adbb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -150,6 +150,10 @@ public MessageRequestRepository(@NonNull Context context) { } } + public boolean threadContainsSms(long threadId) { + return SignalDatabase.messages().threadContainsSms(threadId); + } + private boolean reportedAsSpam(long threadId) { return SignalDatabase.messages().hasReportSpamMessage(threadId) || SignalDatabase.messages().getOutgoingSecureMessageCount(threadId) > 0; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt index 4a9af42bc8..850d0f56ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/DataMessageProcessor.kt @@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.groups.BadGroupIdException import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob +import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob import org.thoughtcrime.securesms.jobs.GroupCallPeekJob import org.thoughtcrime.securesms.jobs.GroupV2UpdateSelfProfileKeyJob import org.thoughtcrime.securesms.jobs.PaymentLedgerUpdateJob @@ -53,6 +54,7 @@ import org.thoughtcrime.securesms.jobs.RefreshAttributesJob import org.thoughtcrime.securesms.jobs.RetrieveProfileJob import org.thoughtcrime.securesms.jobs.SendDeliveryReceiptJob import org.thoughtcrime.securesms.jobs.TrimThreadJob +import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil import org.thoughtcrime.securesms.messages.MessageContentProcessor.Companion.debug @@ -83,6 +85,7 @@ import org.thoughtcrime.securesms.recipients.RecipientUtil import org.thoughtcrime.securesms.stickers.StickerLocator import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.EarlyMessageCacheEntry +import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.LinkUtil import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.MessageConstraintsUtil @@ -145,24 +148,27 @@ object DataMessageProcessor { localMetrics?.onGv2Processed() } + var insertResult: InsertResult? = null var messageId: MessageId? = null when { message.isInvalid -> handleInvalidMessage(context, senderRecipient.id, groupId, envelope.timestamp!!) - message.isEndSession -> messageId = handleEndSessionMessage(context, senderRecipient.id, envelope, metadata) - message.isExpirationUpdate -> messageId = handleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient.id, groupId, message.expireTimerDuration, receivedTime, false) - message.isStoryReaction -> messageId = handleStoryReaction(context, envelope, metadata, message, senderRecipient.id, groupId) + message.isEndSession -> insertResult = handleEndSessionMessage(context, senderRecipient.id, envelope, metadata) + message.isExpirationUpdate -> insertResult = handleExpirationUpdate(envelope, metadata, senderRecipient.id, threadRecipient.id, groupId, message.expireTimerDuration, receivedTime, false) + message.isStoryReaction -> insertResult = handleStoryReaction(context, envelope, metadata, message, senderRecipient.id, groupId) message.reaction != null -> messageId = handleReaction(context, envelope, message, senderRecipient.id, earlyMessageCacheEntry) message.hasRemoteDelete -> messageId = handleRemoteDelete(context, envelope, message, senderRecipient.id, earlyMessageCacheEntry) - message.isPaymentActivationRequest -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = true, isPaymentsActivated = false) - message.isPaymentActivated -> messageId = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = false, isPaymentsActivated = true) - message.payment != null -> messageId = handlePayment(context, envelope, metadata, message, senderRecipient.id, receivedTime) - message.storyContext != null -> messageId = handleStoryReply(context, envelope, metadata, message, senderRecipient, groupId, receivedTime) - message.giftBadge != null -> messageId = handleGiftMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, receivedTime) - message.isMediaMessage -> messageId = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime, localMetrics) - message.body != null -> messageId = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime, localMetrics) + message.isPaymentActivationRequest -> insertResult = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = true, isPaymentsActivated = false) + message.isPaymentActivated -> insertResult = handlePaymentActivation(envelope, metadata, message, senderRecipient.id, receivedTime, isActivatePaymentsRequest = false, isPaymentsActivated = true) + message.payment != null -> insertResult = handlePayment(context, envelope, metadata, message, senderRecipient.id, receivedTime) + message.storyContext != null -> insertResult = handleStoryReply(context, envelope, metadata, message, senderRecipient, groupId, receivedTime) + message.giftBadge != null -> insertResult = handleGiftMessage(context, envelope, metadata, message, senderRecipient, threadRecipient.id, receivedTime) + message.isMediaMessage -> insertResult = handleMediaMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime, localMetrics) + message.body != null -> insertResult = handleTextMessage(context, envelope, metadata, message, senderRecipient, threadRecipient, groupId, receivedTime, localMetrics) message.groupCallUpdate != null -> handleGroupCallUpdateMessage(envelope, message, senderRecipient.id, groupId) } + messageId = messageId ?: insertResult?.messageId?.let { MessageId(it) } + if (groupId != null) { val unknownGroup = when (groupProcessResult) { MessageContentProcessor.Gv2PreProcessResult.GROUP_UP_TO_DATE -> threadRecipient.isUnknownGroup @@ -207,6 +213,18 @@ object DataMessageProcessor { } } } + + if (insertResult != null && insertResult.threadWasNewlyCreated && !threadRecipient.isGroup && !threadRecipient.isSelf && !senderRecipient.isSystemContact) { + val timeSinceLastSync = System.currentTimeMillis() - SignalStore.misc().lastCdsForegroundSyncTime + if (timeSinceLastSync > FeatureFlags.cdsForegroundSyncInterval() || timeSinceLastSync < 0) { + log(envelope.timestamp!!, "New 1:1 chat. Scheduling a CDS sync to see if they match someone in our contacts.") + ApplicationDependencies.getJobManager().add(DirectoryRefreshJob(false)) + SignalStore.misc().lastCdsForegroundSyncTime = System.currentTimeMillis() + } else { + warn(envelope.timestamp!!, "New 1:1 chat, but performed a CDS sync $timeSinceLastSync ms ago, which is less than our threshold. Skipping CDS sync.") + } + } + localMetrics?.onPostProcessComplete() localMetrics?.complete(groupId != null) } @@ -265,7 +283,7 @@ object DataMessageProcessor { senderRecipientId: RecipientId, envelope: Envelope, metadata: EnvelopeMetadata - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "End session message.") val incomingMessage = IncomingMessage( @@ -284,7 +302,7 @@ object DataMessageProcessor { ApplicationDependencies.getProtocolStore().aci().deleteAllSessions(metadata.sourceServiceId.toString()) SecurityEvent.broadcastSecurityUpdateEvent(context) ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.threadId)) - MessageId(insertResult.messageId) + insertResult } else { null } @@ -304,7 +322,7 @@ object DataMessageProcessor { expiresIn: Duration, receivedTime: Long, sideEffect: Boolean - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Expiration update. Side effect: $sideEffect") if (groupId != null) { @@ -333,7 +351,7 @@ object DataMessageProcessor { SignalDatabase.recipients.setExpireMessages(threadRecipientId, expiresIn.inWholeSeconds.toInt()) if (insertResult != null) { - return MessageId(insertResult.messageId) + return insertResult } } catch (e: MmsException) { throw StorageFailedException(e, metadata.sourceServiceId.toString(), metadata.sourceDeviceId) @@ -369,7 +387,7 @@ object DataMessageProcessor { message: DataMessage, senderRecipientId: RecipientId, groupId: GroupId.V2? - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Story reaction.") val storyContext = message.storyContext!! @@ -445,7 +463,7 @@ object DataMessageProcessor { } if (parentStoryId.isDirectReply()) { - MessageId(insertResult.messageId) + insertResult } else { null } @@ -580,7 +598,7 @@ object DataMessageProcessor { receivedTime: Long, isActivatePaymentsRequest: Boolean, isPaymentsActivated: Boolean - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Payment activation request: $isActivatePaymentsRequest activated: $isPaymentsActivated") Preconditions.checkArgument(isActivatePaymentsRequest || isPaymentsActivated) @@ -596,11 +614,7 @@ object DataMessageProcessor { type = if (isActivatePaymentsRequest) MessageType.ACTIVATE_PAYMENTS_REQUEST else MessageType.PAYMENTS_ACTIVATED ) - val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(mediaMessage, -1).orNull() - - if (insertResult != null) { - return MessageId(insertResult.messageId) - } + return SignalDatabase.messages.insertMessageInbox(mediaMessage, -1).orNull() } catch (e: MmsException) { throw StorageFailedException(e, metadata.sourceServiceId.toString(), metadata.sourceDeviceId) } @@ -615,7 +629,7 @@ object DataMessageProcessor { message: DataMessage, senderRecipientId: RecipientId, receivedTime: Long - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Payment message.") if (message.payment?.notification?.mobileCoin?.receipt == null) { @@ -653,9 +667,8 @@ object DataMessageProcessor { val insertResult: InsertResult? = SignalDatabase.messages.insertMessageInbox(mediaMessage, -1).orNull() if (insertResult != null) { - val messageId = MessageId(insertResult.messageId) ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.threadId)) - return messageId + return insertResult } } catch (e: PublicKeyConflictException) { warn(envelope.timestamp!!, "Ignoring payment with public key already in database") @@ -684,7 +697,7 @@ object DataMessageProcessor { senderRecipient: Recipient, groupId: GroupId.V2?, receivedTime: Long - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Story reply.") val storyContext: DataMessage.StoryContext = message.storyContext!! @@ -780,7 +793,7 @@ object DataMessageProcessor { } if (parentStoryId.isDirectReply()) { - MessageId.fromNullable(insertResult.messageId) + insertResult } else { null } @@ -804,7 +817,7 @@ object DataMessageProcessor { senderRecipient: Recipient, threadRecipientId: RecipientId, receivedTime: Long - ): MessageId? { + ): InsertResult? { log(message.timestamp!!, "Gift message.") val giftBadge: DataMessage.GiftBadge = message.giftBadge!! @@ -827,7 +840,7 @@ object DataMessageProcessor { groupId: GroupId.V2?, receivedTime: Long, localMetrics: SignalLocalMetrics.MessageReceive? - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Media message.") notifyTypingStoppedFromIncomingMessage(context, senderRecipient, threadRecipient.id, metadata.sourceDeviceId) @@ -902,7 +915,7 @@ object DataMessageProcessor { } } - MessageId(insertResult.messageId) + insertResult } else { null } @@ -919,7 +932,7 @@ object DataMessageProcessor { groupId: GroupId.V2?, receivedTime: Long, localMetrics: SignalLocalMetrics.MessageReceive? - ): MessageId? { + ): InsertResult? { log(envelope.timestamp!!, "Text message.") val body = message.body ?: "" @@ -946,7 +959,7 @@ object DataMessageProcessor { return if (insertResult != null) { ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.forConversation(insertResult.threadId)) - MessageId(insertResult.messageId) + insertResult } else { null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 09f46804c8..3905d4ca68 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -812,6 +812,9 @@ private LegacyMetricEventListener(long messageId) { this.messageId = messageId; } + @Override + public void onMessageEncrypted() {} + @Override public void onMessageSent() { SignalLocalMetrics.GroupMessageSend.onLegacyMessageSent(messageId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt index 42f564631e..57d6b7d5df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptor.kt @@ -395,7 +395,7 @@ object MessageDecryptor { val aciAddress = SignalProtocolAddress(aci.toString(), deviceId) val pniAddress = SignalProtocolAddress(pni.toString(), deviceId) val aciIdentity = protocolStore.getAciStore().getIdentity(aciAddress) - val pniIdentity = protocolStore.getAciStore().getIdentity(pniAddress) + var pniIdentity = protocolStore.getAciStore().getIdentity(pniAddress) if (aciIdentity == null) { Log.w(TAG, "${logPrefix(envelope, aci)}[validatePniSignature] No identity found for ACI address $aciAddress") @@ -404,7 +404,18 @@ object MessageDecryptor { if (pniIdentity == null) { Log.w(TAG, "${logPrefix(envelope, aci)}[validatePniSignature] No identity found for PNI address $pniAddress") - return + if (deviceId != SignalServiceAddress.DEFAULT_DEVICE_ID) { + pniIdentity = protocolStore.getAciStore().getIdentity(SignalProtocolAddress(pni.toString(), SignalServiceAddress.DEFAULT_DEVICE_ID)) + + if (pniIdentity != null) { + Log.w(TAG, "${logPrefix(envelope, aci)}[validatePniSignature] Found PNI identity when looking up device 1. Using that.") + } else { + Log.w(TAG, "${logPrefix(envelope, aci)}[validatePniSignature] No PNI identity when looking up device 1 either.") + return + } + } else { + return + } } if (pniIdentity.verifyAlternateIdentity(aciIdentity, pniSignatureMessage.signature!!.toByteArray())) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index d3dd5b7c5d..25b5ac2c76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -6,8 +6,11 @@ import com.mobilecoin.lib.exceptions.SerializationException import okio.ByteString import org.signal.core.util.Hex import org.signal.core.util.orNull +import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair +import org.signal.libsignal.protocol.InvalidKeyException import org.signal.libsignal.protocol.InvalidMessageException +import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.state.SignedPreKeyRecord import org.signal.libsignal.protocol.util.Pair import org.signal.ringrtc.CallException @@ -105,7 +108,6 @@ import org.whispersystems.signalservice.api.push.DistributionId 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.push.ServiceIdType import org.whispersystems.signalservice.api.push.SignalServiceAddress import org.whispersystems.signalservice.api.storage.StorageKey import org.whispersystems.signalservice.internal.push.Content @@ -181,6 +183,8 @@ object SyncMessageProcessor { log(envelope.timestamp!!, "Processing sent transcript for message with ID ${sent.timestamp!!}") try { + handlePniIdentityKeys(envelope, sent) + if (sent.storyMessage != null || sent.storyMessageRecipients.isNotEmpty()) { handleSynchronizeSentStoryMessage(envelope, sent) return @@ -258,6 +262,34 @@ object SyncMessageProcessor { } } + private fun handlePniIdentityKeys(envelope: Envelope, sent: Sent) { + for (status in sent.unidentifiedStatus) { + if (status.destinationIdentityKey == null) { + continue + } + + val pni = PNI.parsePrefixedOrNull(status.destinationServiceId) + if (pni == null) { + continue + } + + val address = SignalProtocolAddress(pni.toString(), SignalServiceAddress.DEFAULT_DEVICE_ID) + + if (ApplicationDependencies.getProtocolStore().aci().identities().getIdentity(address) != null) { + log(envelope.timestamp!!, "Ignoring identity on sent transcript for $pni because we already have one.") + continue + } + + try { + log(envelope.timestamp!!, "Saving identity from sent transcript for $pni") + val identityKey = IdentityKey(status.destinationIdentityKey!!.toByteArray()) + ApplicationDependencies.getProtocolStore().aci().identities().saveIdentity(address, identityKey) + } catch (e: InvalidKeyException) { + warn(envelope.timestamp!!, "Failed to deserialize identity key for $pni") + } + } + } + private fun getSyncMessageDestination(message: Sent): Recipient { return if (message.message.hasGroupContext) { Recipient.externalPossiblyMigratedGroup(GroupId.v2(message.message!!.groupV2!!.groupMasterKey)) @@ -1211,16 +1243,23 @@ object SyncMessageProcessor { } private fun handleSynchronizeCallLogEvent(callLogEvent: CallLogEvent, envelopeTimestamp: Long) { - if (callLogEvent.type != CallLogEvent.Type.CLEAR) { - log(envelopeTimestamp, "Synchronize call log event has an invalid type ${callLogEvent.type}, ignoring.") - return - } else if (callLogEvent.timestamp == null) { + if (callLogEvent.timestamp == null) { log(envelopeTimestamp, "Synchronize call log event has null timestamp") return } - SignalDatabase.calls.deleteNonAdHocCallEventsOnOrBefore(callLogEvent.timestamp!!) - SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(callLogEvent.timestamp!!) + when (callLogEvent.type) { + CallLogEvent.Type.CLEAR -> { + SignalDatabase.calls.deleteNonAdHocCallEventsOnOrBefore(callLogEvent.timestamp!!) + SignalDatabase.callLinks.deleteNonAdminCallLinksOnOrBefore(callLogEvent.timestamp!!) + } + + CallLogEvent.Type.MARKED_AS_READ -> { + SignalDatabase.calls.markAllCallEventsRead(callLogEvent.timestamp!!) + } + + else -> log(envelopeTimestamp, "Synchronize call log event has an invalid type ${callLogEvent.type}, ignoring.") + } } private fun handleSynchronizeCallLink(callLinkUpdate: CallLinkUpdate, envelopeTimestamp: Long) { @@ -1237,6 +1276,13 @@ object SyncMessageProcessor { } val roomId = CallLinkRoomId.fromCallLinkRootKey(callLinkRootKey) + if (callLinkUpdate.type == CallLinkUpdate.Type.DELETE) { + log(envelopeTimestamp, "Synchronize call link deletion.") + SignalDatabase.callLinks.deleteCallLink(roomId) + + return + } + if (SignalDatabase.callLinks.callLinkExists(roomId)) { log(envelopeTimestamp, "Synchronize call link for a link we already know about. Updating credentials.") SignalDatabase.callLinks.updateCallLinkCredentials( diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java index 76749cba01..d96f5b5f5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplicationMigrations.java @@ -133,9 +133,10 @@ static final class Version { static final int SVR2_ENCLAVE_UPDATE = 100; static final int STORAGE_LOCAL_UNKNOWNS_FIX = 101; static final int PNP_LAUNCH = 102; + static final int EMOJI_VERSION_10 = 103; } - public static final int CURRENT_VERSION = 102; + public static final int CURRENT_VERSION = 103; /** * This *must* be called after the {@link JobManager} has been instantiated, but *before* the call @@ -598,6 +599,10 @@ private static LinkedHashMap getMigrationJobs(@NonNull Co jobs.put(Version.PNP_LAUNCH, new PnpLaunchMigrationJob()); } + if (lastSeenVersion < Version.EMOJI_VERSION_10) { + jobs.put(Version.EMOJI_VERSION_10, new EmojiDownloadMigrationJob()); + } + return jobs; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMessage.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMessage.kt index 19b7b8a38c..4d947da7de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMessage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMessage.kt @@ -8,7 +8,9 @@ import org.thoughtcrime.securesms.database.model.ParentStoryId import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.recipients.RecipientId @@ -36,7 +38,8 @@ class IncomingMessage( sharedContacts: List = emptyList(), linkPreviews: List = emptyList(), mentions: List = emptyList(), - val giftBadge: GiftBadge? = null + val giftBadge: GiftBadge? = null, + val messageExtras: MessageExtras? = null ) { val attachments: List = ArrayList(attachments) @@ -104,9 +107,8 @@ class IncomingMessage( serverTimeMillis = timestamp, groupId = groupId, groupContext = messageGroupContext, - serverGuid = serverGuid, - body = messageGroupContext.encodedGroupContext, - type = MessageType.GROUP_UPDATE + type = MessageType.GROUP_UPDATE, + messageExtras = MessageExtras(gv2UpdateDescription = GV2UpdateDescription(gv2ChangeDescription = groupContext, groupChangeUpdate = null)) ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java index 121ca9ff99..f317b4e6b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java @@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MemoryFileDescriptor; +import org.thoughtcrime.securesms.video.TranscodingPreset; import java.io.IOException; import java.io.InputStream; @@ -40,6 +41,10 @@ public static MediaConstraints getMmsMediaConstraints(int subscriptionId) { public abstract int getImageMaxHeight(Context context); public abstract int getImageMaxSize(Context context); + public TranscodingPreset getVideoTranscodingSettings() { + return TranscodingPreset.LEVEL_1; + } + public boolean isHighQuality() { return false; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java index 3d0dfd34c5..ae252aed23 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java @@ -11,6 +11,7 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras; import org.thoughtcrime.securesms.messages.SignalServiceProtoUtil; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; @@ -30,7 +31,6 @@ */ public final class MessageGroupContext { - @NonNull private final String encodedGroupContext; @NonNull private final GroupProperties group; @Nullable private final GroupV1Properties groupV1; @Nullable private final GroupV2Properties groupV2; @@ -38,7 +38,6 @@ public final class MessageGroupContext { public MessageGroupContext(@NonNull String encodedGroupContext, boolean v2) throws IOException { - this.encodedGroupContext = encodedGroupContext; if (v2) { this.groupV1 = null; this.groupV2 = new GroupV2Properties(DecryptedGroupV2Context.ADAPTER.decode(Base64.decode(encodedGroupContext))); @@ -50,15 +49,25 @@ public MessageGroupContext(@NonNull String encodedGroupContext, boolean v2) } } + public MessageGroupContext(@NonNull MessageExtras messageExtras, boolean v2) { + if (v2) { + this.groupV1 = null; + this.groupV2 = new GroupV2Properties(messageExtras.gv2UpdateDescription.gv2ChangeDescription); + this.group = groupV2; + } else { + this.groupV1 = new GroupV1Properties(messageExtras.gv1Context); + this.groupV2 = null; + this.group = groupV1; + } + } + public MessageGroupContext(@NonNull GroupContext group) { - this.encodedGroupContext = Base64.encodeWithPadding(group.encode()); this.groupV1 = new GroupV1Properties(group); this.groupV2 = null; this.group = groupV1; } public MessageGroupContext(@NonNull DecryptedGroupV2Context group) { - this.encodedGroupContext = Base64.encodeWithPadding(group.encode()); this.groupV1 = null; this.groupV2 = new GroupV2Properties(group); this.group = groupV2; @@ -82,10 +91,6 @@ public boolean isV2Group() { return groupV2 != null; } - public @NonNull String getEncodedGroupContext() { - return encodedGroupContext; - } - public String getName() { return group.getName(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMessage.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMessage.kt index 79a7e159a8..3859640d4c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMessage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMessage.kt @@ -9,8 +9,9 @@ import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.ParentStoryId import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList -import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context +import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription import org.thoughtcrime.securesms.database.model.databaseprotos.GiftBadge +import org.thoughtcrime.securesms.database.model.databaseprotos.MessageExtras import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.sms.GroupV2UpdateMessageUtil @@ -52,7 +53,8 @@ data class OutgoingMessage( val scheduledDate: Long = -1, val messageToEdit: Long = 0, val isReportSpam: Boolean = false, - val isMessageRequestAccept: Boolean = false + val isMessageRequestAccept: Boolean = false, + val messageExtras: MessageExtras? = null ) { val isV2Group: Boolean = messageGroupContext != null && GroupV2UpdateMessageUtil.isGroupV2(messageGroupContext) @@ -228,17 +230,18 @@ data class OutgoingMessage( * Helper for creating a group update message when a state change occurs and needs to be sent to others. */ @JvmStatic - fun groupUpdateMessage(threadRecipient: Recipient, group: DecryptedGroupV2Context, sentTimeMillis: Long): OutgoingMessage { - val groupContext = MessageGroupContext(group) + fun groupUpdateMessage(threadRecipient: Recipient, update: GV2UpdateDescription, sentTimeMillis: Long): OutgoingMessage { + val messageExtras = MessageExtras(gv2UpdateDescription = update) + val groupContext = MessageGroupContext(update.gv2ChangeDescription!!) return OutgoingMessage( threadRecipient = threadRecipient, - body = groupContext.encodedGroupContext, sentTimeMillis = sentTimeMillis, messageGroupContext = groupContext, isGroup = true, isGroupUpdate = true, - isSecure = true + isSecure = true, + messageExtras = messageExtras ) } @@ -260,7 +263,6 @@ data class OutgoingMessage( ): OutgoingMessage { return OutgoingMessage( threadRecipient = threadRecipient, - body = groupContext.encodedGroupContext, isGroup = true, isGroupUpdate = true, messageGroupContext = groupContext, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/PushMediaConstraints.java b/app/src/main/java/org/thoughtcrime/securesms/mms/PushMediaConstraints.java index f5d00d8793..d19aec7732 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/PushMediaConstraints.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/PushMediaConstraints.java @@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.LocaleFeatureFlags; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.video.TranscodingPreset; import java.util.Arrays; @@ -90,6 +91,11 @@ public int getImageCompressionQualitySetting(@NonNull Context context) { return currentConfig.qualitySetting; } + @Override + public TranscodingPreset getVideoTranscodingSettings() { + return currentConfig.videoPreset; + } + private static @NonNull MediaConfig getCurrentConfig(@NonNull Context context, @Nullable SentMediaQuality sentMediaQuality) { if (Util.isLowMemory(context)) { return MediaConfig.LEVEL_1_LOW_MEMORY; @@ -102,29 +108,32 @@ public int getImageCompressionQualitySetting(@NonNull Context context) { } public enum MediaConfig { - LEVEL_1_LOW_MEMORY(true, 1, MB, new int[] { 768, 512 }, 70), + LEVEL_1_LOW_MEMORY(true, 1, MB, new int[] { 768, 512 }, 70, TranscodingPreset.LEVEL_1), - LEVEL_1(false, 1, MB, new int[] { 1600, 1024, 768, 512 }, 70), - LEVEL_2(false, 2, (int) (1.5 * MB), new int[] { 2048, 1600, 1024, 768, 512 }, 75), - LEVEL_3(false, 3, (int) (3 * MB), new int[] { 4096, 3072, 2048, 1600, 1024, 768, 512 }, 75); + LEVEL_1(false, 1, MB, new int[] { 1600, 1024, 768, 512 }, 70, TranscodingPreset.LEVEL_1), + LEVEL_2(false, 2, (int) (1.5 * MB), new int[] { 2048, 1600, 1024, 768, 512 }, 75, TranscodingPreset.LEVEL_2), + LEVEL_3(false, 3, (int) (3 * MB), new int[] { 4096, 3072, 2048, 1600, 1024, 768, 512 }, 75, TranscodingPreset.LEVEL_3); - private final boolean isLowMemory; - private final int level; - private final int maxImageFileSize; - private final int[] imageSizeTargets; - private final int qualitySetting; + private final boolean isLowMemory; + private final int level; + private final int maxImageFileSize; + private final int[] imageSizeTargets; + private final int qualitySetting; + private final TranscodingPreset videoPreset; MediaConfig(boolean isLowMemory, int level, int maxImageFileSize, @NonNull int[] imageSizeTargets, - @IntRange(from = 0, to = 100) int qualitySetting) + @IntRange(from = 0, to = 100) int qualitySetting, + TranscodingPreset videoPreset) { this.isLowMemory = isLowMemory; this.level = level; this.maxImageFileSize = maxImageFileSize; this.imageSizeTargets = imageSizeTargets; this.qualitySetting = qualitySetting; + this.videoPreset = videoPreset; } public int getMaxImageFileSize() { @@ -135,10 +144,14 @@ public int[] getImageSizeTargets() { return imageSizeTargets; } - public int getQualitySetting() { + public int getImageQualitySetting() { return qualitySetting; } + public TranscodingPreset getVideoPreset() { + return videoPreset; + } + public static @Nullable MediaConfig forLevel(int level) { boolean isLowMemory = Util.isLowMemory(ApplicationDependencies.getApplication()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt index 47ed4f0ff1..dce50c11b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationItem.kt @@ -94,7 +94,7 @@ sealed class NotificationItem(val threadRecipient: Recipient, protected val reco context.getString(R.string.SingleRecipientNotificationBuilder_new_message) } else { SpannableStringBuilder().apply { - append(Util.getBoldedString(authorRecipient.getShortDisplayNameIncludingUsername(context))) + append(Util.getBoldedString(authorRecipient.getShortDisplayName(context))) if (threadRecipient != authorRecipient) { append(Util.getBoldedString("@${threadRecipient.getDisplayName(context)}")) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java b/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java index 74fa4f3352..f5f72e1790 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java @@ -20,23 +20,29 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import org.signal.core.util.DimensionUnit; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ViewUtil; +import java.util.Objects; + public class RationaleDialog { public static MaterialAlertDialogBuilder createFor(@NonNull Context context, @NonNull String message, @DrawableRes int... drawables) { - View view = LayoutInflater.from(context).inflate(R.layout.permissions_rationale_dialog, null); - ViewGroup header = view.findViewById(R.id.header_container); - TextView text = view.findViewById(R.id.message); + View view = LayoutInflater.from(context).inflate(R.layout.permissions_rationale_dialog, null); + ViewGroup header = view.findViewById(R.id.header_container); + TextView text = view.findViewById(R.id.message); + int iconSize = (int) DimensionUnit.DP.toPixels(32); for (int i=0;i Unit + ): Controller { + return permissionHandler( + permission = android.Manifest.permission.CAMERA, + icon = painterResource(id = R.drawable.symbol_camera_24), + rationale = rationale, + onPermissionGranted = onPermissionGranted + ) + } + + /** + * Generic permissions rationale dialog and state management for single permissions. + */ + @OptIn(ExperimentalPermissionsApi::class) + @Composable + fun permissionHandler( + permission: String, + icon: Painter, + rationale: String, + onPermissionGranted: () -> Unit + ): Controller { + var requestState by remember { + mutableStateOf(RequestState.NONE) + } + + val permissionState = rememberPermissionState(permission = permission) { + if (it && requestState == RequestState.SYSTEM) { + onPermissionGranted() + } + } + + if (requestState == RequestState.RATIONALE) { + Dialogs.PermissionRationaleDialog( + icon = icon, + rationale = rationale, + confirm = stringResource(id = R.string.Permissions_continue), + dismiss = stringResource(id = R.string.Permissions_not_now), + onConfirm = { + requestState = RequestState.SYSTEM + permissionState.launchPermissionRequest() + }, + onDismiss = { + requestState = RequestState.NONE + } + ) + } + + return object : Controller { + override fun request() { + if (permissionState.status.isGranted) { + requestState = RequestState.NONE + onPermissionGranted() + } else { + requestState = RequestState.RATIONALE + } + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt index c2e877c968..6ef87094ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/SvrRepository.kt @@ -39,11 +39,10 @@ object SvrRepository { val TAG = Log.tag(SvrRepository::class.java) - private val svr2Deprecated: SecureValueRecovery = ApplicationDependencies.getSignalServiceAccountManager().getSecureValueRecoveryV2(BuildConfig.SVR2_MRENCLAVE_DEPRECATED) private val svr2: SecureValueRecovery = ApplicationDependencies.getSignalServiceAccountManager().getSecureValueRecoveryV2(BuildConfig.SVR2_MRENCLAVE) /** An ordered list of SVR implementations to read from. They should be in priority order, with the most important one listed first. */ - private val readImplementations: List = listOf(svr2, svr2Deprecated) + private val readImplementations: List = listOf(svr2) /** An ordered list of SVR implementations to write to. They should be in priority order, with the most important one listed first. */ private val writeImplementations: List = listOf(svr2) @@ -74,8 +73,7 @@ object SvrRepository { Log.i(TAG, "restoreMasterKeyPreRegistration()", true) val operations: List RestoreResponse>> = listOf( - svr2 to { restoreMasterKeyPreRegistration(svr2, credentials.svr2, userPin) }, - svr2Deprecated to { restoreMasterKeyPreRegistration(svr2Deprecated, credentials.svr2, userPin) } + svr2 to { restoreMasterKeyPreRegistration(svr2, credentials.svr2, userPin) } ) for ((implementation, operation) in operations) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt index 27dd0d60a5..660e2221b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameRepository.kt @@ -311,6 +311,10 @@ object UsernameRepository { return BASE_URL + base64 } + fun isValidLink(url: String): Boolean { + return parseLink(url) != null + } + @JvmStatic fun onUsernameConsistencyValidated() { SignalStore.account().usernameSyncState = AccountValues.UsernameSyncState.IN_SYNC diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java index a4768c4253..549c5b9bf6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java @@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto20dp; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; +import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.databinding.ReviewBannerViewBinding; import org.thoughtcrime.securesms.recipients.Recipient; @@ -99,7 +100,7 @@ FallbackContactPhoto getPhotoForGroup() { @Override public @NonNull FallbackContactPhoto getPhotoForLocalNumber() { - throw new UnsupportedOperationException("This provider does not support local number"); + return new ResourceContactPhoto(R.drawable.symbol_note_light_24, R.drawable.symbol_note_light_24); } @NonNull diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 63f4dbbb79..7b0b08899a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -545,10 +545,6 @@ public boolean isSelf() { } } - public boolean hasName() { - return groupName != null; - } - /** * False iff it {@link #getDisplayName} would fall back to e164, email or unknown. */ @@ -562,21 +558,11 @@ public boolean hasAUserSetDisplayName(@NonNull Context context) { String name = getNameFromLocalData(context); if (Util.isEmpty(name)) { - name = getUnknownDisplayName(context); - } - - return StringUtil.isolateBidi(name); - } - - public @NonNull String getDisplayNameOrUsername(@NonNull Context context) { - String name = getNameFromLocalData(context); - - if (Util.isEmpty(name)) { - name = StringUtil.isolateBidi(username); + name = username; } if (Util.isEmpty(name)) { - name = StringUtil.isolateBidi(getUnknownDisplayName(context)); + name = getUnknownDisplayName(context); } return StringUtil.isolateBidi(name); @@ -644,16 +630,6 @@ public boolean hasNonUsernameDisplayName(@NonNull Context context) { String name = Util.getFirstNonEmpty(getGroupName(context), getSystemProfileName().getGivenName(), getProfileName().getGivenName(), - getDisplayName(context)); - - return StringUtil.isolateBidi(name); - } - - public @NonNull String getShortDisplayNameIncludingUsername(@NonNull Context context) { - String name = Util.getFirstNonEmpty(getGroupName(context), - getSystemProfileName().getGivenName(), - getProfileName().getGivenName(), - shouldShowE164() ? getE164().orElse(null) : null, getUsername().orElse(null), getDisplayName(context)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientRepository.kt new file mode 100644 index 0000000000..db0f1e0caf --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientRepository.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.recipients + +import android.content.Context +import androidx.annotation.WorkerThread +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery +import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.phonenumbers.NumberUtil +import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter +import java.io.IOException + +/** + * We operate on recipients many places, but sometimes we find ourselves performing the same recipient-related operations in several locations. + * This is meant to be a place to put those common operations. + */ +object RecipientRepository { + + private val TAG = Log.tag(RecipientRepository::class.java) + + /** + * Attempts to lookup a potentially-new recipient by their e164. + * We will check locally first for a potential match, but may end up hitting the network. + * This will not create a new recipient if we could not find it in the CDSI directory. + */ + @WorkerThread + @JvmStatic + fun lookupNewE164(context: Context, inputE164: String): LookupResult { + val e164 = PhoneNumberFormatter.get(context).format(inputE164) + + if (!NumberUtil.isVisuallyValidNumber(e164)) { + return LookupResult.InvalidEntry + } + + val matchingFullRecipientId = SignalDatabase.recipients.getByE164IfRegisteredAndDiscoverable(e164) + if (matchingFullRecipientId != null) { + Log.i(TAG, "Already have a full, discoverable recipient for $e164. $matchingFullRecipientId") + return LookupResult.Success(matchingFullRecipientId) + } + + Log.i(TAG, "Need to lookup up $e164 with CDSI.") + + return try { + val result = ContactDiscovery.lookupE164(e164) + if (result == null) { + LookupResult.NotFound() + } else { + LookupResult.Success(result.recipientId) + } + } catch (e: IOException) { + return LookupResult.NetworkError + } + } + + sealed interface LookupResult { + data class Success(val recipientId: RecipientId) : LookupResult + object InvalidEntry : LookupResult + data class NotFound(val recipientId: RecipientId = RecipientId.UNKNOWN) : LookupResult + object NetworkError : LookupResult + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt index da9954ccaa..4db9e45db2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/about/AboutSheet.kt @@ -89,8 +89,8 @@ class AboutSheet : ComposeBottomSheetDialogFragment() { model = AboutModel( isSelf = recipient.get().isSelf, hasAvatar = recipient.get().profileAvatarFileDetails.hasFile(), - displayName = recipient.get().getDisplayNameOrUsername(requireContext()), - shortName = recipient.get().getShortDisplayNameIncludingUsername(requireContext()), + displayName = recipient.get().getDisplayName(requireContext()), + shortName = recipient.get().getShortDisplayName(requireContext()), about = recipient.get().about, verified = verified, recipientForAvatar = recipient.get(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java index dd587806ba..5ad040e401 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java @@ -4,8 +4,9 @@ import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.InsetDrawable; import android.os.Bundle; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -18,8 +19,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.lifecycle.ViewModelProvider; @@ -34,6 +35,7 @@ import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference; import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto80dp; +import org.thoughtcrime.securesms.fonts.SignalSymbols; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; @@ -41,7 +43,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.recipients.ui.about.AboutSheet; -import org.thoughtcrime.securesms.recipients.ui.about.AboutSheetKt; import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.SpanUtil; @@ -183,20 +184,29 @@ public void onViewCreated(@NonNull View fragmentView, @Nullable Bundle savedInst } String name = recipient.isSelf() ? requireContext().getString(R.string.note_to_self) - : recipient.getDisplayNameOrUsername(requireContext()); + : recipient.getDisplayName(requireContext()); fullName.setVisibility(TextUtils.isEmpty(name) ? View.GONE : View.VISIBLE); SpannableStringBuilder nameBuilder = new SpannableStringBuilder(name); if (recipient.showVerified()) { - SpanUtil.appendCenteredImageSpan(nameBuilder, ContextUtil.requireDrawable(requireContext(), R.drawable.ic_official_28), 28, 28); + SpanUtil.appendSpacer(nameBuilder, 8); + SpanUtil.appendCenteredImageSpanWithoutSpace(nameBuilder, ContextUtil.requireDrawable(requireContext(), R.drawable.ic_official_28), 28, 28); + } else if (recipient.isSystemContact()) { + CharSequence systemContactGlyph = SignalSymbols.INSTANCE.getSpannedString(requireContext(), + SignalSymbols.Weight.BOLD, + SignalSymbols.Glyph.PERSON_CIRCLE); + + nameBuilder.append(" "); + nameBuilder.append(SpanUtil.ofSize(systemContactGlyph, 20)); } if (!recipient.isSelf() && recipient.isIndividual()) { - Drawable drawable = ContextUtil.requireDrawable(requireContext(), R.drawable.symbol_chevron_right_24_color_on_secondary_container); - drawable.setBounds(0, 0, (int) DimensionUnit.DP.toPixels(24), (int) DimensionUnit.DP.toPixels(24)); + CharSequence chevronGlyph = SignalSymbols.INSTANCE.getSpannedString(requireContext(), + SignalSymbols.Weight.BOLD, + SignalSymbols.Glyph.CHEVRON_RIGHT); - Drawable insetDrawable = new InsetDrawable(drawable, 0, 0, 0, (int) DimensionUnit.DP.toPixels(4)); - - SpanUtil.appendBottomImageSpan(nameBuilder, insetDrawable, 24, 28); + nameBuilder.append(" "); + nameBuilder.append(SpanUtil.color(ContextCompat.getColor(requireContext(), R.color.signal_colorOutline), + SpanUtil.ofSize(chevronGlyph, 24))); fullName.setText(nameBuilder); fullName.setOnClickListener(v -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt index 817f1601bd..9e8f75016c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByActivity.kt @@ -10,9 +10,8 @@ import android.content.Intent import android.content.res.Configuration import android.os.Bundle import androidx.activity.compose.setContent +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContract -import androidx.compose.animation.slideInHorizontally -import androidx.compose.animation.slideOutHorizontally import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy import androidx.compose.foundation.layout.Box @@ -26,6 +25,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.shape.RoundedCornerShape @@ -67,6 +67,8 @@ import androidx.navigation.compose.dialog import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import kotlinx.coroutines.launch +import org.signal.core.ui.Animations.navHostSlideInTransition +import org.signal.core.ui.Animations.navHostSlideOutTransition import org.signal.core.ui.Buttons import org.signal.core.ui.Dialogs import org.signal.core.ui.Dividers @@ -77,11 +79,13 @@ import org.signal.core.ui.theme.SignalTheme import org.signal.core.util.getParcelableExtraCompat import org.thoughtcrime.securesms.PassphraseRequiredActivity import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.UsernameQrScannerActivity import org.thoughtcrime.securesms.invites.InviteActions +import org.thoughtcrime.securesms.permissions.compose.Permissions import org.thoughtcrime.securesms.phonenumbers.PhoneNumberVisualTransformation -import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.registration.util.CountryPrefix +import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme import org.thoughtcrime.securesms.util.viewModel import org.whispersystems.signalservice.api.util.PhoneNumberFormatter @@ -91,6 +95,8 @@ import org.whispersystems.signalservice.api.util.PhoneNumberFormatter */ class FindByActivity : PassphraseRequiredActivity() { + private val theme = DynamicNoActionBarTheme() + companion object { private const val MODE = "FindByActivity.mode" private const val RECIPIENT_ID = "FindByActivity.recipientId" @@ -101,6 +107,15 @@ class FindByActivity : PassphraseRequiredActivity() { } override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { + theme.onCreate(this) + + val qrScanLauncher: ActivityResultLauncher = registerForActivityResult(UsernameQrScannerActivity.Contract()) { recipientId -> + if (recipientId != null) { + setResult(RESULT_OK, Intent().putExtra(RECIPIENT_ID, recipientId)) + finishAfterTransition() + } + } + setContent { val state by viewModel.state @@ -110,10 +125,10 @@ class FindByActivity : PassphraseRequiredActivity() { NavHost( navController = navController, startDestination = "find-by-content", - enterTransition = { slideInHorizontally(initialOffsetX = { it }) }, - exitTransition = { slideOutHorizontally(targetOffsetX = { -it }) }, - popEnterTransition = { slideInHorizontally(initialOffsetX = { -it }) }, - popExitTransition = { slideOutHorizontally(targetOffsetX = { it }) } + enterTransition = { navHostSlideInTransition { it } }, + exitTransition = { navHostSlideOutTransition { -it } }, + popEnterTransition = { navHostSlideInTransition { -it } }, + popExitTransition = { navHostSlideOutTransition { it } } ) { composable("find-by-content") { val title = remember(state.mode) { @@ -126,6 +141,14 @@ class FindByActivity : PassphraseRequiredActivity() { navigationIconPainter = painterResource(id = R.drawable.symbol_arrow_left_24) ) { val context = LocalContext.current + + val cameraPermissionController = Permissions.cameraPermissionHandler( + rationale = stringResource(id = R.string.PaymentsTransferFragment__to_scan_a_qr_code_signal_needs_access_to_the_camera), + onPermissionGranted = { + qrScanLauncher.launch(Unit) + } + ) + Content( paddingValues = it, state = state, @@ -140,11 +163,15 @@ class FindByActivity : PassphraseRequiredActivity() { FindByResult.InvalidEntry -> navController.navigate("invalid-entry") is FindByResult.NotFound -> navController.navigate("not-found/${result.recipientId.toLong()}") + is FindByResult.NetworkError -> navController.navigate("network-error") } } }, onSelectCountryPrefixClick = { navController.navigate("select-country-prefix") + }, + onQrCodeScanClicked = { + cameraPermissionController.request() } ) } @@ -196,6 +223,16 @@ class FindByActivity : PassphraseRequiredActivity() { ) } + dialog( + route = "network-error" + ) { + Dialogs.SimpleMessageDialog( + message = getString(R.string.FindByActivity__network_error_dialog), + dismiss = getString(android.R.string.ok), + onDismiss = { navController.popBackStack() } + ) + } + dialog( route = "not-found/{recipientId}", arguments = listOf(navArgument("recipientId") { type = NavType.LongType }) @@ -236,15 +273,10 @@ class FindByActivity : PassphraseRequiredActivity() { dismiss = dismiss, onConfirm = { if (state.mode == FindByMode.PHONE_NUMBER) { - val recipientId = navBackStackEntry.arguments?.getLong("recipientId")?.takeIf { it > 0 }?.let { RecipientId.from(it) } ?: RecipientId.UNKNOWN - if (recipientId != RecipientId.UNKNOWN) { - InviteActions.inviteUserToSignal( - context, - Recipient.resolved(recipientId), - null, - this@FindByActivity::startActivity - ) - } + InviteActions.inviteUserToSignal( + context, + this@FindByActivity::startActivity + ) } }, onDismiss = { navController.popBackStack() } @@ -255,6 +287,11 @@ class FindByActivity : PassphraseRequiredActivity() { } } + override fun onResume() { + super.onResume() + theme.onResume(this) + } + class Contract : ActivityResultContract() { override fun createIntent(context: Context, input: FindByMode): Intent { return Intent(context, FindByActivity::class.java) @@ -273,7 +310,8 @@ private fun Content( state: FindByState, onUserEntryChanged: (String) -> Unit, onNextClick: () -> Unit, - onSelectCountryPrefixClick: () -> Unit + onSelectCountryPrefixClick: () -> Unit, + onQrCodeScanClicked: () -> Unit ) { val placeholderLabel = remember(state.mode) { if (state.mode == FindByMode.PHONE_NUMBER) R.string.FindByActivity__phone_number else R.string.FindByActivity__username @@ -364,6 +402,23 @@ private fun Content( .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) .padding(top = 8.dp) ) + + Spacer(modifier = Modifier.height(32.dp)) + + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center + ) { + Buttons.Small(onClick = onQrCodeScanClicked) { + Icon(painter = painterResource(id = R.drawable.symbol_qrcode_24), contentDescription = stringResource(id = R.string.FindByActivity__qr_scan_button)) + Spacer(modifier = Modifier.width(10.dp)) + Text( + text = stringResource(id = R.string.FindByActivity__qr_scan_button), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSurface + ) + } + } } Spacer(modifier = Modifier.weight(1f)) @@ -373,7 +428,7 @@ private fun Content( modifier = Modifier.fillMaxWidth() ) { Buttons.LargeTonal( - enabled = !state.isLookupInProgress, + enabled = !state.isLookupInProgress && state.userEntry.isNotBlank(), onClick = onNextClick, contentPadding = PaddingValues(0.dp), modifier = Modifier @@ -387,6 +442,10 @@ private fun Content( } } + if (state.isLookupInProgress) { + Dialogs.IndeterminateProgressDialog() + } + LaunchedEffect(Unit) { focusRequester.requestFocus() } @@ -541,8 +600,8 @@ private fun CountryPrefixRowItem( } } -@Preview(name = "Light Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_NO) -@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES) +@Preview(name = "Light Theme", group = "content - phone", uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Theme", group = "content - phone", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable private fun ContentPreviewPhoneNumber() { Previews.Preview { @@ -554,13 +613,14 @@ private fun ContentPreviewPhoneNumber() { ), onUserEntryChanged = {}, onNextClick = {}, - onSelectCountryPrefixClick = {} + onSelectCountryPrefixClick = {}, + onQrCodeScanClicked = {} ) } } -@Preview(name = "Light Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_NO) -@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES) +@Preview(name = "Light Theme", group = "content - username", uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Theme", group = "content - username", uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable private fun ContentPreviewUsername() { Previews.Preview { @@ -572,7 +632,8 @@ private fun ContentPreviewUsername() { ), onUserEntryChanged = {}, onNextClick = {}, - onSelectCountryPrefixClick = {} + onSelectCountryPrefixClick = {}, + onQrCodeScanClicked = {} ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByResult.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByResult.kt index f845a54629..19547ad8f0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByResult.kt @@ -11,4 +11,5 @@ sealed interface FindByResult { data class Success(val recipientId: RecipientId) : FindByResult object InvalidEntry : FindByResult data class NotFound(val recipientId: RecipientId = RecipientId.UNKNOWN) : FindByResult + object NetworkError : FindByResult } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByState.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByState.kt index de79b9f213..d701b2f7bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByState.kt @@ -5,9 +5,15 @@ package org.thoughtcrime.securesms.recipients.ui.findby +import com.google.i18n.phonenumbers.NumberParseException import com.google.i18n.phonenumbers.PhoneNumberUtil +import org.signal.core.util.orNull +import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.registration.util.CountryPrefix +/** + * State for driving find by number/username screen. + */ data class FindByState( val mode: FindByMode, val userEntry: String = "", @@ -17,4 +23,21 @@ data class FindByState( val selectedCountryPrefix: CountryPrefix = supportedCountryPrefixes.first(), val countryPrefixSearchEntry: String = "", val isLookupInProgress: Boolean = false -) +) { + companion object { + fun startingState(self: Recipient, mode: FindByMode): FindByState { + val countryCode: Int = try { + PhoneNumberUtil.getInstance() + .parse(self.e164.orNull(), null) + .countryCode + } catch (e: NumberParseException) { + -1 + } + + val state = FindByState(mode = mode) + return state.copy( + selectedCountryPrefix = state.supportedCountryPrefixes.firstOrNull { it.digits == countryCode } ?: state.supportedCountryPrefixes.first() + ) + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModel.kt index 8637b1910b..f31ca2e091 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/findby/FindByViewModel.kt @@ -14,23 +14,18 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import org.signal.core.util.concurrent.safeBlockingGet -import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery -import org.thoughtcrime.securesms.phonenumbers.NumberUtil import org.thoughtcrime.securesms.profiles.manage.UsernameRepository import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.recipients.RecipientRepository import org.thoughtcrime.securesms.registration.util.CountryPrefix import org.thoughtcrime.securesms.util.UsernameUtil -import org.whispersystems.signalservice.api.util.PhoneNumberFormatter -import java.util.concurrent.TimeUnit class FindByViewModel( mode: FindByMode ) : ViewModel() { private val internalState = mutableStateOf( - FindByState( - mode = mode - ) + FindByState.startingState(self = Recipient.self(), mode = mode) ) val state: State = internalState @@ -88,40 +83,13 @@ class FindByViewModel( val countryCode = stateSnapshot.selectedCountryPrefix.digits val nationalNumber = stateSnapshot.userEntry.removePrefix(countryCode.toString()) - val e164 = "$countryCode$nationalNumber" + val e164 = "+$countryCode$nationalNumber" - if (!NumberUtil.isVisuallyValidNumber(e164)) { - return FindByResult.InvalidEntry - } - - val recipient = try { - Recipient.external(context, e164) - } catch (e: Exception) { - return FindByResult.InvalidEntry - } - - return if (!recipient.isRegistered || !recipient.hasServiceId()) { - try { - ContactDiscovery.refresh(context, recipient, false, TimeUnit.SECONDS.toMillis(10)) - val resolved = Recipient.resolved(recipient.id) - if (!resolved.isRegistered) { - if (PhoneNumberFormatter.isValidNumber(nationalNumber, countryCode.toString())) { - FindByResult.NotFound(recipient.id) - } else { - FindByResult.InvalidEntry - } - } else { - FindByResult.Success(recipient.id) - } - } catch (e: Exception) { - if (PhoneNumberFormatter.isValidNumber(nationalNumber, countryCode.toString())) { - FindByResult.NotFound(recipient.id) - } else { - FindByResult.InvalidEntry - } - } - } else { - FindByResult.Success(recipient.id) + return when (val result = RecipientRepository.lookupNewE164(context, e164)) { + RecipientRepository.LookupResult.InvalidEntry -> FindByResult.InvalidEntry + RecipientRepository.LookupResult.NetworkError -> FindByResult.NetworkError + is RecipientRepository.LookupResult.NotFound -> FindByResult.NotFound(result.recipientId) + is RecipientRepository.LookupResult.Success -> FindByResult.Success(result.recipientId) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java index b7dd4fece1..edbd5438f2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java @@ -122,16 +122,16 @@ private void presentText(@NonNull MmsMessageRecord messageRecord, boolean hasWal if (messageRecord.isViewed()) { iconColor = openedIconColor; text.setText(R.string.RevealableMessageView_viewed); - icon.setImageResource(R.drawable.ic_viewed_once_24); + icon.setImageResource(R.drawable.symbol_view_once_dash_24); } else { iconColor = unopenedIconColor; text.setText(R.string.RevealableMessageView_media); - icon.setImageResource(R.drawable.ic_view_once_24); + icon.setImageResource(R.drawable.symbol_view_once_24); } } else if (ViewOnceUtil.isViewable(messageRecord)) { iconColor = unopenedIconColor; text.setText(getDescriptionId(messageRecord)); - icon.setImageResource(R.drawable.ic_view_once_24); + icon.setImageResource(R.drawable.symbol_view_once_24); } else if (networkInProgress(messageRecord)) { iconColor = unopenedIconColor; text.setText(""); @@ -140,11 +140,11 @@ private void presentText(@NonNull MmsMessageRecord messageRecord, boolean hasWal } else if (requiresTapToDownload(messageRecord)) { iconColor = unopenedIconColor; text.setText(formatFileSize(messageRecord)); - icon.setImageResource(R.drawable.ic_arrow_down_circle_outline_24); + icon.setImageResource(R.drawable.symbol_arrow_circle_down_24); } else { iconColor = openedIconColor; text.setText(R.string.RevealableMessageView_viewed); - icon.setImageResource(R.drawable.ic_viewed_once_24); + icon.setImageResource(R.drawable.symbol_view_once_dash_24); } text.setTextColor(textColor); diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt b/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt index 2962745d82..da82c34643 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/HSVColorSlider.kt @@ -155,6 +155,11 @@ object HSVColorSlider { val radii: FloatArray = (1..8).map { 50f }.toFloatArray() val bounds = RectF() val clipPath = Path() + val paint = Paint().apply { + color = Color.WHITE + style = Paint.Style.STROKE + strokeWidth = ViewUtil.dpToPx(4).toFloat() + } return customizeOnDraw { wrapped, canvas -> canvas.save() @@ -164,6 +169,7 @@ object HSVColorSlider { clipPath.rewind() clipPath.addRoundRect(bounds, radii, Path.Direction.CW) + canvas.drawPath(clipPath, paint) canvas.clipPath(clipPath) wrapped.draw(canvas) canvas.restore() diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index 301b6063fe..8e3314b326 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -320,12 +320,6 @@ public Uri getUri() { return imageUri; } - @Nullable - @Override - public View getPlaybackControls() { - return null; - } - @Override public Object saveState() { Data data = new Data(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHudV2.kt b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHudV2.kt index 0ca9d1c74a..2b44d72fca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHudV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHudV2.kt @@ -146,9 +146,9 @@ class ImageEditorHudV2 @JvmOverloads constructor( cropAspectLockButton.setOnClickListener { listener?.onCropAspectLock() if (listener?.isCropAspectLocked == true) { - cropAspectLockButton.setImageResource(R.drawable.ic_crop_lock_24) + cropAspectLockButton.setImageResource(R.drawable.symbol_crop_lock_24) } else { - cropAspectLockButton.setImageResource(R.drawable.ic_crop_unlock_24) + cropAspectLockButton.setImageResource(R.drawable.symbol_crop_unlock_24) } } @@ -355,7 +355,7 @@ class ImageEditorHudV2 @JvmOverloads constructor( private fun presentModeDraw() { drawButton.isSelected = true - brushToggle.setImageResource(R.drawable.ic_draw_white_24) + brushToggle.setImageResource(R.drawable.symbol_brush_pen_24) widthSeekBar.progress = SignalStore.imageEditorValues().getMarkerPercentage() listener?.onColorChange(getActiveColor()) updateColorIndicator() @@ -368,7 +368,7 @@ class ImageEditorHudV2 @JvmOverloads constructor( private fun presentModeHighlight() { drawButton.isSelected = true - brushToggle.setImageResource(R.drawable.ic_marker_24) + brushToggle.setImageResource(R.drawable.symbol_brush_highlighter_24) widthSeekBar.progress = SignalStore.imageEditorValues().getHighlighterPercentage() listener?.onColorChange(getActiveColor()) updateColorIndicator() diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorHud.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorHud.java deleted file mode 100644 index 62bfc7b624..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorHud.java +++ /dev/null @@ -1,226 +0,0 @@ -package org.thoughtcrime.securesms.scribbles; - -import android.animation.Animator; -import android.content.Context; -import android.database.Cursor; -import android.graphics.Rect; -import android.net.Uri; -import android.provider.OpenableColumns; -import android.util.AttributeSet; -import android.view.View; -import android.view.animation.OvershootInterpolator; -import android.widget.LinearLayout; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresApi; -import androidx.core.view.ViewCompat; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.media.DecryptableUriMediaInput; -import org.thoughtcrime.securesms.mms.VideoSlide; -import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.video.TranscodingQuality; -import org.thoughtcrime.securesms.video.VideoBitRateCalculator; -import org.thoughtcrime.securesms.video.VideoUtil; -import org.thoughtcrime.securesms.video.videoconverter.VideoThumbnailsRangeSelectorView; - -import java.io.IOException; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * The HUD (heads-up display) that contains all of the tools for editing video. - */ -public final class VideoEditorHud extends LinearLayout { - - @SuppressWarnings("unused") - private static final String TAG = Log.tag(VideoEditorHud.class); - - private final List exclusionZone = List.of(new Rect()); - - private VideoThumbnailsRangeSelectorView videoTimeLine; - private EventListener eventListener; - private View playOverlay; - - public VideoEditorHud(@NonNull Context context) { - super(context); - initialize(); - } - - public VideoEditorHud(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - initialize(); - } - - public VideoEditorHud(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - initialize(); - } - - private void initialize() { - View root = inflate(getContext(), R.layout.video_editor_hud, this); - setOrientation(VERTICAL); - - videoTimeLine = root.findViewById(R.id.video_timeline); - playOverlay = root.findViewById(R.id.play_overlay); - - playOverlay.setOnClickListener(v -> eventListener.onPlay()); - } - - public void setEventListener(EventListener eventListener) { - this.eventListener = eventListener; - } - - @Override - protected void onLayout(boolean changed, int l, int t, int r, int b) { - final Rect outRect = exclusionZone.get(0); - videoTimeLine.getHitRect(outRect); - outRect.left = l; - outRect.right = r; - ViewCompat.setSystemGestureExclusionRects(this, exclusionZone); - super.onLayout(changed, l, t, r, b); - } - - @RequiresApi(api = 23) - public void setVideoSource(@NonNull VideoSlide slide, @NonNull VideoBitRateCalculator videoBitRateCalculator, long maxSendSize) - throws IOException - { - Uri uri = slide.getUri(); - - if (uri == null || !slide.hasVideo()) { - return; - } - - videoTimeLine.setInput(DecryptableUriMediaInput.createForUri(getContext(), uri)); - - long size = tryGetUriSize(getContext(), uri, Long.MAX_VALUE); - - if (size > maxSendSize) { - videoTimeLine.setTimeLimit(videoBitRateCalculator.getMaxVideoUploadDurationInSeconds(), TimeUnit.SECONDS); - } - - videoTimeLine.setOnRangeChangeListener(new VideoThumbnailsRangeSelectorView.OnRangeChangeListener() { - - @Override - public void onPositionDrag(long position) { - if (eventListener != null) { - eventListener.onSeek(position, false); - } - } - - @Override - public void onEndPositionDrag(long position) { - if (eventListener != null) { - eventListener.onSeek(position, true); - } - } - - @Override - public void onRangeDrag(long minValueUs, long maxValueUs, long durationUs, VideoThumbnailsRangeSelectorView.Thumb thumb) { - if (eventListener != null) { - eventListener.onEditVideoDuration(durationUs, minValueUs, maxValueUs, thumb == VideoThumbnailsRangeSelectorView.Thumb.MIN, false); - } - } - - @Override - public void onRangeDragEnd(long minValueUs, long maxValueUs, long durationUs, VideoThumbnailsRangeSelectorView.Thumb thumb) { - if (eventListener != null) { - eventListener.onEditVideoDuration(durationUs, minValueUs, maxValueUs, thumb == VideoThumbnailsRangeSelectorView.Thumb.MIN, true); - } - } - - @Override - public VideoThumbnailsRangeSelectorView.Quality getQuality(long clipDurationUs, long totalDurationUs) { - int inputBitRate = VideoBitRateCalculator.bitRate(size, TimeUnit.MICROSECONDS.toMillis(totalDurationUs)); - - TranscodingQuality targetQuality = videoBitRateCalculator.getTargetQuality(TimeUnit.MICROSECONDS.toMillis(clipDurationUs), inputBitRate); - return new VideoThumbnailsRangeSelectorView.Quality(targetQuality.getFileSizeEstimate(), (int) (100 * targetQuality.getQuality())); - } - }); - } - - public void showPlayButton() { - playOverlay.setVisibility(VISIBLE); - playOverlay.animate() - .setListener(null) - .alpha(1) - .scaleX(1).scaleY(1) - .setInterpolator(new OvershootInterpolator()) - .start(); - } - - public void fadePlayButton() { - playOverlay.animate() - .setListener(new Animator.AnimatorListener() { - @Override - public void onAnimationEnd(Animator animation) { - playOverlay.setVisibility(GONE); - } - - @Override - public void onAnimationStart(Animator animation) {} - - @Override - public void onAnimationCancel(Animator animation) {} - - @Override - public void onAnimationRepeat(Animator animation) {} - }) - .alpha(0) - .scaleX(0.8f).scaleY(0.8f) - .start(); - } - - public void hidePlayButton() { - playOverlay.setVisibility(GONE); - playOverlay.setAlpha(0); - playOverlay.setScaleX(0.8f); - playOverlay.setScaleY(0.8f); - } - - @RequiresApi(api = 23) - public void setDurationRange(long totalDuration, long fromDuration, long toDuration) { - videoTimeLine.setRange(fromDuration, toDuration); - } - - @RequiresApi(api = 23) - public void setPosition(long playbackPositionUs) { - videoTimeLine.setActualPosition(playbackPositionUs); - } - - public interface EventListener { - - void onEditVideoDuration(long totalDurationUs, long startTimeUs, long endTimeUs, boolean fromEdited, boolean editingComplete); - - void onPlay(); - - void onSeek(long position, boolean dragComplete); - } - - private long tryGetUriSize(@NonNull Context context, @NonNull Uri uri, long defaultValue) { - try { - return getSize(context, uri); - } catch (IOException e) { - Log.w(TAG, e); - return defaultValue; - } - } - - private static long getSize(@NonNull Context context, @NonNull Uri uri) throws IOException { - long size = 0; - - try (Cursor cursor = context.getContentResolver().query(uri, null, null, null, null)) { - if (cursor != null && cursor.moveToFirst() && cursor.getColumnIndex(OpenableColumns.SIZE) >= 0) { - size = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE)); - } - } - - if (size <= 0) { - size = MediaUtil.getMediaSize(context, uri); - } - - return size; - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorPlayButtonLayout.kt b/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorPlayButtonLayout.kt new file mode 100644 index 0000000000..000aa01e9e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/VideoEditorPlayButtonLayout.kt @@ -0,0 +1,55 @@ +package org.thoughtcrime.securesms.scribbles + +import android.animation.Animator +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.widget.FrameLayout +import org.signal.core.util.logging.Log.tag +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.util.createDefaultCubicBezierInterpolator + +/** + * The play button overlay for controlling playback in the video editor. + */ +class VideoEditorPlayButtonLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) { + private val playOverlay: View = inflate(this.context, R.layout.video_editor_hud, this).findViewById(R.id.play_overlay) + + fun setPlayClickListener(listener: OnClickListener?) { + playOverlay.setOnClickListener(listener) + } + + fun showPlayButton() { + playOverlay.visibility = VISIBLE + playOverlay.animate() + .setListener(null) + .alpha(1f) + .setInterpolator(createDefaultCubicBezierInterpolator()) + .setDuration(500) + .start() + } + + fun fadePlayButton() { + playOverlay.animate() + .setListener(object : Animator.AnimatorListener { + override fun onAnimationEnd(animation: Animator) { playOverlay.visibility = GONE } + override fun onAnimationStart(animation: Animator) = Unit + override fun onAnimationCancel(animation: Animator) = Unit + override fun onAnimationRepeat(animation: Animator) = Unit + }) + .alpha(0f) + .setInterpolator(createDefaultCubicBezierInterpolator()) + .setDuration(200) + .start() + } + + fun hidePlayButton() { + playOverlay.visibility = GONE + playOverlay.setAlpha(0f) + } + + companion object { + @Suppress("unused") + private val TAG = tag(VideoEditorPlayButtonLayout::class.java) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/ContactSearchResult.kt b/app/src/main/java/org/thoughtcrime/securesms/search/ContactSearchResult.kt deleted file mode 100644 index d5fdb10c64..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/search/ContactSearchResult.kt +++ /dev/null @@ -1,5 +0,0 @@ -package org.thoughtcrime.securesms.search - -import org.thoughtcrime.securesms.recipients.Recipient - -data class ContactSearchResult(val results: List, val query: String) diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java index be8c90db35..c70ca8c52f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/search/SearchRepository.java @@ -2,7 +2,6 @@ import android.content.Context; import android.database.Cursor; -import android.database.MergeCursor; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; @@ -14,7 +13,6 @@ import org.signal.core.util.CursorUtil; import org.signal.core.util.StringUtil; -import org.signal.core.util.concurrent.LatestPrioritizedSerialExecutor; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.contacts.ContactRepository; @@ -52,7 +50,6 @@ import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; -import java.util.function.Consumer; import static org.thoughtcrime.securesms.database.SearchTable.SNIPPET_WRAP; @@ -72,8 +69,7 @@ public class SearchRepository { private final MentionTable mentionTable; private final MessageTable messageTable; - private final LatestPrioritizedSerialExecutor searchExecutor; - private final Executor serialExecutor; + private final Executor serialExecutor; public SearchRepository(@NonNull String noteToSelfTitle) { this.context = ApplicationDependencies.getApplication().getApplicationContext(); @@ -84,7 +80,6 @@ public SearchRepository(@NonNull String noteToSelfTitle) { this.mentionTable = SignalDatabase.mentions(); this.messageTable = SignalDatabase.messages(); this.contactRepository = new ContactRepository(context, noteToSelfTitle); - this.searchExecutor = new LatestPrioritizedSerialExecutor(SignalExecutors.BOUNDED); this.serialExecutor = new SerialExecutor(SignalExecutors.BOUNDED); } @@ -98,17 +93,6 @@ public SearchRepository(@NonNull String noteToSelfTitle) { return new ThreadSearchResult(result, query); } - public void queryContacts(@NonNull String query, @NonNull Consumer callback) { - searchExecutor.execute(1, () -> { - long start = System.currentTimeMillis(); - List result = queryContacts(query); - - Log.d(TAG, "[contacts] Search took " + (System.currentTimeMillis() - start) + " ms"); - - callback.accept(new ContactSearchResult(result, query)); - }); - } - @WorkerThread public @NonNull MessageSearchResult queryMessagesSync(@NonNull String query) { long start = System.currentTimeMillis(); @@ -139,27 +123,6 @@ public void query(@NonNull String query, long threadId, @NonNull Callback queryContacts(String query) { - if (Util.isEmpty(query)) { - return Collections.emptyList(); - } - - Cursor contacts = null; - - try { - Cursor textSecureContacts = contactRepository.querySignalContacts(query); - Cursor systemContacts = contactRepository.queryNonSignalContacts(query); - - contacts = new MergeCursor(new Cursor[] { textSecureContacts, systemContacts }); - - return readToList(contacts, new RecipientModelBuilder(), 250); - } finally { - if (contacts != null) { - contacts.close(); - } - } - } - private @NonNull List queryConversations(@NonNull String query, boolean unreadOnly) { if (Util.isEmpty(query)) { return Collections.emptyList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/search/SearchResult.kt b/app/src/main/java/org/thoughtcrime/securesms/search/SearchResult.kt deleted file mode 100644 index 4099c93b4c..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/search/SearchResult.kt +++ /dev/null @@ -1,45 +0,0 @@ -package org.thoughtcrime.securesms.search - -import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter -import org.thoughtcrime.securesms.database.model.ThreadRecord -import org.thoughtcrime.securesms.recipients.Recipient - -/** - * Represents an all-encompassing search result that can contain various result for different - * subcategories. - */ -data class SearchResult( - val query: String, - val contacts: List, - val conversations: List, - val messages: List, - val conversationFilter: ConversationFilter -) { - fun size(): Int { - return contacts.size + conversations.size + messages.size - } - - val isEmpty: Boolean - get() = size() == 0 - - fun merge(result: ContactSearchResult): SearchResult { - return this.copy(contacts = result.results, query = result.query) - } - - fun merge(result: ThreadSearchResult): SearchResult { - return this.copy(conversations = result.results, query = result.query) - } - - fun merge(result: MessageSearchResult): SearchResult { - return this.copy(messages = result.results, query = result.query) - } - - fun merge(conversationFilter: ConversationFilter): SearchResult { - return this.copy(conversationFilter = conversationFilter) - } - - companion object { - @JvmField - val EMPTY = SearchResult("", emptyList(), emptyList(), emptyList(), ConversationFilter.OFF) - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/SignalCallLinkManager.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/SignalCallLinkManager.kt index 3bc60df89b..0b1e4ef928 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/SignalCallLinkManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/SignalCallLinkManager.kt @@ -171,7 +171,7 @@ class SignalCallLinkManager( name ) { result -> if (result.isSuccess) { - emitter.onSuccess(UpdateCallLinkResult.Success(result.value!!.toAppState())) + emitter.onSuccess(UpdateCallLinkResult.Update(result.value!!.toAppState())) } else { emitter.onSuccess(UpdateCallLinkResult.Failure(result.status)) } @@ -198,7 +198,7 @@ class SignalCallLinkManager( restrictions ) { result -> if (result.isSuccess) { - emitter.onSuccess(UpdateCallLinkResult.Success(result.value!!.toAppState())) + emitter.onSuccess(UpdateCallLinkResult.Update(result.value!!.toAppState())) } else { emitter.onSuccess(UpdateCallLinkResult.Failure(result.status)) } @@ -206,9 +206,8 @@ class SignalCallLinkManager( } } - fun updateCallLinkRevoked( - credentials: CallLinkCredentials, - revoked: Boolean + fun deleteCallLink( + credentials: CallLinkCredentials ): Single { if (credentials.adminPassBytes == null) { return Single.just(UpdateCallLinkResult.NotAuthorized) @@ -217,15 +216,14 @@ class SignalCallLinkManager( return Single.create { emitter -> val credentialPresentation = requestCallLinkAuthCredentialPresentation(credentials.linkKeyBytes) - callManager.updateCallLinkRevoked( + callManager.deleteCallLink( SignalStore.internalValues().groupCallingServer(), credentialPresentation.serialize(), CallLinkRootKey(credentials.linkKeyBytes), - credentials.adminPassBytes, - revoked + credentials.adminPassBytes ) { result -> - if (result.isSuccess) { - emitter.onSuccess(UpdateCallLinkResult.Success(result.value!!.toAppState())) + if (result.isSuccess && result.value == true) { + emitter.onSuccess(UpdateCallLinkResult.Delete(credentials.roomId)) } else { emitter.onSuccess(UpdateCallLinkResult.Failure(result.status)) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/UpdateCallLinkResult.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/UpdateCallLinkResult.kt index c90033f282..2d72d138b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/UpdateCallLinkResult.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/links/UpdateCallLinkResult.kt @@ -9,10 +9,14 @@ package org.thoughtcrime.securesms.service.webrtc.links * Result type for call link updates. */ sealed interface UpdateCallLinkResult { - data class Success( + data class Update( val state: SignalCallLinkState ) : UpdateCallLinkResult + data class Delete( + val roomId: CallLinkRoomId + ) : UpdateCallLinkResult + data class Failure( val status: Short ) : UpdateCallLinkResult diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java index dcd202b095..2c94980a4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java @@ -22,7 +22,7 @@ public ShareSelectionMappingModel(@NonNull ShareContact shareContact, boolean is String name = shareContact.getRecipientId() .map(Recipient::resolved) .map(recipient -> recipient.isSelf() ? context.getString(R.string.note_to_self) - : recipient.getShortDisplayNameIncludingUsername(context)) + : recipient.getShortDisplayName(context)) .orElseGet(shareContact::getNumber); return isFirst ? name : context.getString(R.string.ShareActivity__comma_s, name); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialMappingModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialMappingModel.java index c08bdc2cb8..8de6ba8134 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialMappingModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialMappingModel.java @@ -21,7 +21,7 @@ class ShareInterstitialMappingModel extends RecipientMappingModel 0); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java index aff3a7a457..5fae5f2143 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java @@ -287,7 +287,7 @@ void bind(@NonNull RequestManager requestManager, shareButtonImage.setVisibility(View.VISIBLE); shareButton.setOnClickListener(v -> eventListener.onStickerPackShareClicked(stickerPack.getPackId(), stickerPack.getPackKey())); } else { - actionButtonImage.setImageResource(R.drawable.ic_arrow_down); + actionButtonImage.setImageResource(R.drawable.symbol_arrow_down_24); actionButton.setOnClickListener(v -> eventListener.onStickerPackInstallClicked(stickerPack.getPackId(), stickerPack.getPackKey())); shareButton.setVisibility(View.GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt index d04379e1ba..6e52304a2f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/dialogs/StoryContextMenu.kt @@ -168,7 +168,7 @@ object StoryContextMenu { isFromSelf = selectedStory.sender.isSelf, isToGroup = selectedStory.group != null, isFromReleaseChannel = selectedStory.sender.isReleaseNotes, - canHide = true, + canHide = !selectedStory.sender.shouldHideStory(), callbacks = object : Callbacks { override fun onHide() = onHide(selectedStory) override fun onUnhide() = throw NotImplementedError() diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt index e0ea88505e..9c6993f78b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/tabs/ConversationListTabRepository.kt @@ -28,6 +28,6 @@ class ConversationListTabRepository { } fun getNumberOfUnseenCalls(): Flowable { - return RxDatabaseObserver.conversationList.map { SignalDatabase.messages.getUnreadMisedCallCount() } + return RxDatabaseObserver.conversationList.map { SignalDatabase.calls.getUnreadMissedCallCount() } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Animations.kt b/app/src/main/java/org/thoughtcrime/securesms/util/Animations.kt index 96e0670bec..d49f1bf771 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Animations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Animations.kt @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.util import android.view.animation.Animation +import android.view.animation.Interpolator +import androidx.core.view.animation.PathInterpolatorCompat fun Animation.setListeners( onAnimationStart: (animation: Animation?) -> Unit = { }, @@ -21,3 +23,5 @@ fun Animation.setListeners( } }) } + +fun createDefaultCubicBezierInterpolator(): Interpolator = PathInterpolatorCompat.create(0.17f, 0.17f, 0f, 1f) diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 2c7e6412bd..50eba0cc52 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -62,6 +62,7 @@ public final class FeatureFlags { private static final String CLIENT_EXPIRATION = "android.clientExpiration"; private static final String CUSTOM_VIDEO_MUXER = "android.customVideoMuxer.1"; private static final String CDS_REFRESH_INTERVAL = "cds.syncInterval.seconds"; + private static final String CDS_FOREGROUND_SYNC_INTERVAL = "cds.foregroundSyncInterval.seconds"; private static final String AUTOMATIC_SESSION_RESET = "android.automaticSessionReset.2"; private static final String AUTOMATIC_SESSION_INTERVAL = "android.automaticSessionResetInterval"; private static final String DEFAULT_MAX_BACKOFF = "android.defaultMaxBackoff"; @@ -122,6 +123,8 @@ public final class FeatureFlags { private static final String RETRY_RECEIPT_MAX_COUNT = "android.retryReceipt.maxCount"; private static final String RETRY_RECEIPT_MAX_COUNT_RESET_AGE = "android.retryReceipt.maxCountResetAge"; private static final String PREKEY_FORCE_REFRESH_INTERVAL = "android.prekeyForceRefreshInterval"; + private static final String CDSI_LIBSIGNAL_NET = "android.cds.libsignal"; + private static final String RX_MESSAGE_SEND = "android.rxMessageSend"; /** * We will only store remote values for flags in this set. If you want a flag to be controllable @@ -136,6 +139,7 @@ public final class FeatureFlags { CLIENT_EXPIRATION, CUSTOM_VIDEO_MUXER, CDS_REFRESH_INTERVAL, + CDS_FOREGROUND_SYNC_INTERVAL, GROUP_NAME_MAX_LENGTH, AUTOMATIC_SESSION_RESET, AUTOMATIC_SESSION_INTERVAL, @@ -196,7 +200,9 @@ public final class FeatureFlags { VIDEO_RECORD_1X_ZOOM, RETRY_RECEIPT_MAX_COUNT, RETRY_RECEIPT_MAX_COUNT_RESET_AGE, - PREKEY_FORCE_REFRESH_INTERVAL + PREKEY_FORCE_REFRESH_INTERVAL, + CDSI_LIBSIGNAL_NET, + RX_MESSAGE_SEND ); @VisibleForTesting @@ -226,6 +232,7 @@ public final class FeatureFlags { CLIENT_EXPIRATION, CUSTOM_VIDEO_MUXER, CDS_REFRESH_INTERVAL, + CDS_FOREGROUND_SYNC_INTERVAL, GROUP_NAME_MAX_LENGTH, AUTOMATIC_SESSION_RESET, AUTOMATIC_SESSION_INTERVAL, @@ -268,7 +275,9 @@ public final class FeatureFlags { VIDEO_RECORD_1X_ZOOM, RETRY_RECEIPT_MAX_COUNT, RETRY_RECEIPT_MAX_COUNT_RESET_AGE, - PREKEY_FORCE_REFRESH_INTERVAL + PREKEY_FORCE_REFRESH_INTERVAL, + CDSI_LIBSIGNAL_NET, + RX_MESSAGE_SEND ); /** @@ -389,6 +398,11 @@ public static int cdsRefreshIntervalSeconds() { return getInteger(CDS_REFRESH_INTERVAL, (int) TimeUnit.HOURS.toSeconds(48)); } + /** The minimum time in between foreground CDS refreshes initiated via message requests, in milliseconds. */ + public static Long cdsForegroundSyncInterval() { + return TimeUnit.SECONDS.toMillis(getInteger(CDS_FOREGROUND_SYNC_INTERVAL, (int) TimeUnit.HOURS.toSeconds(4))); + } + public static @NonNull SelectionLimits shareSelectionLimit() { int limit = getInteger(SHARE_SELECTION_LIMIT, 5); return new SelectionLimits(limit, limit); @@ -623,6 +637,16 @@ public static long preKeyForceRefreshInterval() { return getLong(PREKEY_FORCE_REFRESH_INTERVAL, TimeUnit.HOURS.toMillis(1)); } + /** Make CDSI lookups via libsignal-net instead of native websocket. */ + public static boolean useLibsignalNetForCdsiLookup() { + return getBoolean(CDSI_LIBSIGNAL_NET, false); + } + + /** Use Rx threading model to do sends. */ + public static boolean useRxMessageSending() { + return getBoolean(RX_MESSAGE_SEND, false); + } + /** Only for rendering debug info. */ public static synchronized @NonNull Map getMemoryValues() { return new TreeMap<>(REMOTE_VALUES); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java index d0c63c7798..9e166cf661 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java @@ -147,9 +147,13 @@ public static void appendCenteredImageSpan(@NonNull SpannableStringBuilder build builder.append(" ").append(SpanUtil.buildCenteredImageSpan(drawable)); } - public static void appendBottomImageSpan(@NonNull SpannableStringBuilder builder, @NonNull Drawable drawable, int width, int height) { + public static void appendSpacer(@NonNull SpannableStringBuilder builder, int width) { + SpanUtil.appendCenteredImageSpanWithoutSpace(builder, new ColorDrawable(Color.TRANSPARENT), width, 8); + } + + public static void appendCenteredImageSpanWithoutSpace(@NonNull SpannableStringBuilder builder, @NonNull Drawable drawable, int width, int height) { drawable.setBounds(0, 0, ViewUtil.dpToPx(width), ViewUtil.dpToPx(height)); - builder.append(SpanUtil.buildImageSpan(drawable, DynamicDrawableSpan.ALIGN_BOTTOM)); + builder.append(SpanUtil.buildCenteredImageSpan(drawable)); } public static CharSequence learnMore(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/InMemoryTranscoder.java b/app/src/main/java/org/thoughtcrime/securesms/video/InMemoryTranscoder.java index 82b544fe9e..d4b2f23b7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/InMemoryTranscoder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/InMemoryTranscoder.java @@ -17,8 +17,8 @@ import org.thoughtcrime.securesms.video.exceptions.VideoSourceException; import org.thoughtcrime.securesms.video.interfaces.TranscoderCancelationSignal; import org.thoughtcrime.securesms.video.postprocessing.Mp4FaststartPostProcessor; -import org.thoughtcrime.securesms.video.videoconverter.exceptions.EncodingException; import org.thoughtcrime.securesms.video.videoconverter.MediaConverter; +import org.thoughtcrime.securesms.video.videoconverter.exceptions.EncodingException; import org.thoughtcrime.securesms.video.videoconverter.mediadatasource.MediaDataSourceMediaInput; import java.io.Closeable; @@ -51,7 +51,7 @@ public final class InMemoryTranscoder implements Closeable { /** * @param upperSizeLimit A upper size to transcode to. The actual output size can be up to 10% smaller. */ - public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dataSource, @Nullable TranscoderOptions options, long upperSizeLimit) throws IOException, VideoSourceException { + public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dataSource, @Nullable TranscoderOptions options, @NonNull TranscodingPreset preset, long upperSizeLimit) throws IOException, VideoSourceException { this.context = context; this.dataSource = dataSource; this.options = options; @@ -71,8 +71,8 @@ public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dat } this.inSize = dataSource.getSize(); - this.inputBitRate = VideoBitRateCalculator.bitRate(inSize, duration); - this.targetQuality = new VideoBitRateCalculator(upperSizeLimit).getTargetQuality(duration, inputBitRate); + this.inputBitRate = TranscodingQuality.bitRate(inSize, duration); + this.targetQuality = TranscodingQuality.createFromPreset(preset, duration); this.upperSizeLimit = upperSizeLimit; this.transcodeRequired = inputBitRate >= targetQuality.getTargetTotalBitRate() * 1.2 || inSize > upperSizeLimit || containsLocation(mediaMetadataRetriever) || options != null; @@ -80,7 +80,7 @@ public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dat Log.i(TAG, "Video is within 20% of target bitrate, below the size limit, contained no location metadata or custom options."); } - this.fileSizeEstimate = targetQuality.getFileSizeEstimate(); + this.fileSizeEstimate = targetQuality.getByteCountEstimate(); this.memoryFileEstimate = (long) (fileSizeEstimate * 1.1); } @@ -168,7 +168,7 @@ public InMemoryTranscoder(@NonNull Context context, @NonNull MediaDataSource dat (outSize * 100d) / inSize, (outSize * 100d) / fileSizeEstimate, (outSize * 100d) / memoryFileEstimate, - numberFormat.format(VideoBitRateCalculator.bitRate(outSize, duration)))); + numberFormat.format(TranscodingQuality.bitRate(outSize, duration)))); if (outSize > upperSizeLimit) { throw new VideoSizeException("Size constraints could not be met!"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java index a422531476..b9626d2819 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java @@ -292,7 +292,7 @@ public long getPlaybackPositionUs() { if (this.exoPlayer != null) { return TimeUnit.MILLISECONDS.toMicros(this.exoPlayer.getCurrentPosition()) + clippedStartUs; } - return 0L; + return -1L; } public void setPlaybackPosition(long positionMs) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/VideoUtil.java b/app/src/main/java/org/thoughtcrime/securesms/video/VideoUtil.java index b5c64af1f5..929dc121ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/VideoUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/VideoUtil.java @@ -10,21 +10,19 @@ import org.thoughtcrime.securesms.mms.MediaConstraints; import org.thoughtcrime.securesms.video.videoconverter.utils.VideoConstants; -import java.util.concurrent.TimeUnit; - public final class VideoUtil { private VideoUtil() { } public static Size getVideoRecordingSize() { return isPortrait(screenSize()) - ? new Size(VideoConstants.VIDEO_SHORT_EDGE, VideoConstants.VIDEO_LONG_EDGE) - : new Size(VideoConstants.VIDEO_LONG_EDGE, VideoConstants.VIDEO_SHORT_EDGE); + ? new Size(VideoConstants.VIDEO_SHORT_EDGE_HD, VideoConstants.VIDEO_LONG_EDGE_HD) + : new Size(VideoConstants.VIDEO_LONG_EDGE_HD, VideoConstants.VIDEO_SHORT_EDGE_HD); } public static int getMaxVideoRecordDurationInSeconds(@NonNull Context context, @NonNull MediaConstraints mediaConstraints) { long allowedSize = mediaConstraints.getCompressedVideoMaxSize(context); - int duration = (int) Math.floor((float) allowedSize / VideoConstants.TOTAL_BYTES_PER_SECOND); + int duration = (int) Math.floor((float) allowedSize / VideoConstants.MAX_ALLOWED_BYTES_PER_SECOND); return Math.min(duration, VideoConstants.VIDEO_MAX_RECORD_LENGTH_S); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsRangeSelectorView.java b/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsRangeSelectorView.java index b250626148..d3bb8d7ead 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsRangeSelectorView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsRangeSelectorView.java @@ -4,9 +4,10 @@ import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; -import android.graphics.drawable.Drawable; +import android.os.Build; import android.util.AttributeSet; import android.view.MotionEvent; @@ -15,14 +16,12 @@ import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.annotation.RequiresApi; -import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.util.MemoryUnitFormat; +import org.thoughtcrime.securesms.util.ViewUtil; import java.util.Locale; -import java.util.Objects; import java.util.concurrent.TimeUnit; @RequiresApi(api = 23) @@ -30,8 +29,10 @@ public final class VideoThumbnailsRangeSelectorView extends VideoThumbnailsView private static final String TAG = Log.tag(VideoThumbnailsRangeSelectorView.class); - private static final long MINIMUM_SELECTABLE_RANGE = TimeUnit.MILLISECONDS.toMicros(500); - private static final int ANIMATION_DURATION_MS = 100; + private static final long MINIMUM_SELECTABLE_RANGE = TimeUnit.MILLISECONDS.toMicros(500); + private static final int ANIMATION_DURATION_MS = 100; + private static final float THUMB_RECT_CORNER_RADIUS = ViewUtil.dpToPx(4); + private static final float ACTIVE_REGION_CORNER_RADIUS = ViewUtil.dpToPx(8); private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Paint paintGrey = new Paint(Paint.ANTI_ALIAS_FLAG); @@ -39,8 +40,7 @@ public final class VideoThumbnailsRangeSelectorView extends VideoThumbnailsView private final Paint thumbTimeBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private final Rect tempDrawRect = new Rect(); private final RectF timePillRect = new RectF(); - private Drawable chevronLeft; - private Drawable chevronRight; + private final Path activeRegionPath = new Path(); @Px private int left; @Px private int right; @@ -55,13 +55,11 @@ public final class VideoThumbnailsRangeSelectorView extends VideoThumbnailsView private long downMax; private Thumb dragThumb; private Thumb lastDragThumb; - private OnRangeChangeListener onRangeChangeListener; + private PositionDragListener playerOnRangeChangeListener; + private RangeDragListener editorOnRangeChangeListener; @Px private int thumbSizePixels; @Px private int thumbTouchRadius; - @Px private int cursorPixels; - @ColorInt private int cursorColor; @ColorInt private int thumbColor; - @ColorInt private int thumbColorEdited; private long actualPosition; private long dragPosition; @Px private int thumbHintTextSize; @@ -70,8 +68,6 @@ public final class VideoThumbnailsRangeSelectorView extends VideoThumbnailsView private long dragStartTimeMs; private long dragEndTimeMs; private long maximumSelectableRangeMicros; - private Quality outputQuality; - private long qualityAvailableTimeMs; public VideoThumbnailsRangeSelectorView(final Context context) { super(context); @@ -93,10 +89,7 @@ private void init(final @Nullable AttributeSet attrs) { TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.VideoThumbnailsRangeSelectorView, 0, 0); try { thumbSizePixels = typedArray.getDimensionPixelSize(R.styleable.VideoThumbnailsRangeSelectorView_thumbWidth, 1); - cursorPixels = typedArray.getDimensionPixelSize(R.styleable.VideoThumbnailsRangeSelectorView_cursorWidth, 1); thumbColor = typedArray.getColor(R.styleable.VideoThumbnailsRangeSelectorView_thumbColor, 0xffff0000); - thumbColorEdited = typedArray.getColor(R.styleable.VideoThumbnailsRangeSelectorView_thumbColorEdited, thumbColor); - cursorColor = typedArray.getColor(R.styleable.VideoThumbnailsRangeSelectorView_cursorColor, thumbColor); thumbTouchRadius = typedArray.getDimensionPixelSize(R.styleable.VideoThumbnailsRangeSelectorView_thumbTouchRadius, 50); thumbHintTextSize = typedArray.getDimensionPixelSize(R.styleable.VideoThumbnailsRangeSelectorView_thumbHintTextSize, 0); thumbHintTextColor = typedArray.getColor(R.styleable.VideoThumbnailsRangeSelectorView_thumbHintTextColor, 0xffff0000); @@ -106,9 +99,6 @@ private void init(final @Nullable AttributeSet attrs) { } } - chevronLeft = VectorDrawableCompat.create(getResources(), R.drawable.ic_chevron_left_black_8dp, null); - chevronRight = VectorDrawableCompat.create(getResources(), R.drawable.ic_chevron_right_black_8dp, null); - paintGrey.setColor(0x7f000000); paintGrey.setStyle(Paint.Style.FILL_AND_STROKE); paintGrey.setStrokeWidth(1); @@ -124,45 +114,35 @@ private void init(final @Nullable AttributeSet attrs) { @Override protected void afterDurationChange(long duration) { - super.afterDurationChange(duration); - - if (maxValue != null && duration < maxValue) { - maxValue = duration; - } - - if (minValue != null && duration < minValue) { - minValue = duration; - } + maxValue = duration; if (duration > 0) { - if (externalMinValue != null) { - setMinMax(externalMinValue, getMaxValue(), Thumb.MIN); - externalMinValue = null; - } - if (externalMaxValue != null) { setMinMax(getMinValue(), externalMaxValue, Thumb.MAX); externalMaxValue = null; } - } - if (setMinValue(getMinValue())) { - Log.d(TAG, "Clamped video duration to " + getMaxValue()); - if (onRangeChangeListener != null) { - onRangeChangeListener.onRangeDragEnd(getMinValue(), getMaxValue(), getDuration(), Thumb.MAX); + if (externalMinValue != null) { + setMinMax(externalMinValue, getMaxValue(), Thumb.MIN); + externalMinValue = null; } } - if (onRangeChangeListener != null) { - onRangeChangeListener.onRangeDragEnd(getMinValue(), getMaxValue(), getDuration(), Thumb.MIN); - setOutputQuality(onRangeChangeListener.getQuality(getClipDuration(), getDuration())); - } + onRangeDrag(getMinValue(), getMaxValue(), duration, true); invalidate(); } - public void setOnRangeChangeListener(OnRangeChangeListener onRangeChangeListener) { - this.onRangeChangeListener = onRangeChangeListener; + public void registerPlayerOnRangeChangeListener(PositionDragListener playerOnRangeChangeListener) { + this.playerOnRangeChangeListener = playerOnRangeChangeListener; + } + + public void registerEditorOnRangeChangeListener(RangeDragListener editorOnRangeChangeListener) { + this.editorOnRangeChangeListener = editorOnRangeChangeListener; + } + + public void unregisterPlayerOnRangeChangeListener() { + this.playerOnRangeChangeListener = null; } public void setActualPosition(long position) { @@ -183,7 +163,6 @@ private void setDragPosition(long position) { protected void onDraw(final Canvas canvas) { super.onDraw(canvas); - canvas.translate(getPaddingLeft(), getPaddingTop()); int drawableWidth = getDrawableWidth(); int drawableHeight = getDrawableHeight(); @@ -192,77 +171,65 @@ protected void onDraw(final Canvas canvas) { long min = getMinValue(); long max = getMaxValue(); - boolean edited = min != 0 || max != duration; - long drawPosAt = dragThumb == Thumb.POSITION ? dragPosition : actualPosition; left = duration != 0 ? (int) ((min * drawableWidth) / duration) : 0; right = duration != 0 ? (int) ((max * drawableWidth) / duration) : drawableWidth; cursor = duration != 0 ? (int) ((drawPosAt * drawableWidth) / duration) : drawableWidth; + canvas.save(); + canvas.clipPath(clippingPath); + canvas.translate(getPaddingLeft(), getPaddingTop()); + // draw greyed out areas - tempDrawRect.set(0, 0, left - 1, drawableHeight); - canvas.drawRect(tempDrawRect, paintGrey); - tempDrawRect.set(right + 1, 0, drawableWidth, drawableHeight); - canvas.drawRect(tempDrawRect, paintGrey); + if (Build.VERSION.SDK_INT >= 26) { + activeRegionPath.reset(); + timePillRect.set(left + 1, 0, right - 1, drawableHeight); + activeRegionPath.addRoundRect(timePillRect, ACTIVE_REGION_CORNER_RADIUS, ACTIVE_REGION_CORNER_RADIUS, Path.Direction.CW); + canvas.clipOutPath(activeRegionPath); + tempDrawRect.set(0, 0, drawableWidth, drawableHeight); + canvas.drawRect(tempDrawRect, paintGrey); + } else { + tempDrawRect.set(0, 0, left - 1, drawableHeight); + canvas.drawRect(tempDrawRect, paintGrey); + tempDrawRect.set(right + 1, 0, drawableWidth, drawableHeight); + canvas.drawRect(tempDrawRect, paintGrey); + } + + canvas.restore(); - // draw area rectangle - paint.setStyle(Paint.Style.STROKE); - tempDrawRect.set(left, 0, right, drawableHeight); - paint.setColor(edited ? thumbColorEdited : thumbColor); - canvas.drawRect(tempDrawRect, paint); + canvas.translate(getPaddingLeft(), getPaddingTop()); + int verticalThumbInset = drawableHeight / 4; + int halfThumbWidth = thumbSizePixels / 2; // draw thumb rectangles paint.setStyle(Paint.Style.FILL_AND_STROKE); - tempDrawRect.set(left, 0, left + thumbSizePixels, drawableHeight); - canvas.drawRect(tempDrawRect, paint); - tempDrawRect.set(right - thumbSizePixels, 0, right, drawableHeight); - canvas.drawRect(tempDrawRect, paint); - - int arrowSize = Math.min(drawableHeight, thumbSizePixels * 2); - chevronLeft .setBounds(0, 0, arrowSize, arrowSize); - chevronRight.setBounds(0, 0, arrowSize, arrowSize); - - float dy = (drawableHeight - arrowSize) / 2f; - float arrowPaddingX = (thumbSizePixels - arrowSize) / 2f; - - // draw left thumb chevron - canvas.save(); - canvas.translate(left + arrowPaddingX, dy); - chevronLeft.draw(canvas); - canvas.restore(); - - // draw right thumb chevron - canvas.save(); - canvas.translate(right - thumbSizePixels + arrowPaddingX, dy); - chevronRight.draw(canvas); - canvas.restore(); + paint.setColor(thumbColor); + timePillRect.set(left - halfThumbWidth, verticalThumbInset, left + halfThumbWidth, drawableHeight - verticalThumbInset); + canvas.drawRoundRect(timePillRect, THUMB_RECT_CORNER_RADIUS, THUMB_RECT_CORNER_RADIUS, paint); + timePillRect.set(right - halfThumbWidth, verticalThumbInset, right + halfThumbWidth, drawableHeight - verticalThumbInset); + canvas.drawRoundRect(timePillRect, THUMB_RECT_CORNER_RADIUS, THUMB_RECT_CORNER_RADIUS, paint); // draw time hint pill if (thumbHintTextSize > 0) { if (dragStartTimeMs > 0 && (dragThumb == Thumb.MIN || dragThumb == Thumb.MAX)) { - drawTimeHint(canvas, drawableWidth, drawableHeight, dragThumb, false); + drawTimeHint(canvas, drawableWidth, dragThumb, false); } if (dragEndTimeMs > 0 && (lastDragThumb == Thumb.MIN || lastDragThumb == Thumb.MAX)) { - drawTimeHint(canvas, drawableWidth, drawableHeight, lastDragThumb, true); + drawTimeHint(canvas, drawableWidth, lastDragThumb, true); } - - canvas.save(); - canvas.translate(0, drawableHeight * 2); - drawDurationAndSizeHint(canvas, drawableWidth); - canvas.restore(); } // draw current position marker if (left <= cursor && cursor <= right && dragThumb != Thumb.MIN && dragThumb != Thumb.MAX) { - canvas.translate(cursorPixels / 2, 0); - tempDrawRect.set(cursor, 0, cursor + cursorPixels, drawableHeight); - paint.setColor(cursorColor); - canvas.drawRect(tempDrawRect, paint); + timePillRect.set(cursor - halfThumbWidth, 0, cursor + halfThumbWidth, drawableHeight); + paint.setStyle(Paint.Style.FILL_AND_STROKE); + paint.setColor(thumbColor); + canvas.drawRoundRect(timePillRect, THUMB_RECT_CORNER_RADIUS, THUMB_RECT_CORNER_RADIUS, paint); } } - private void drawTimeHint(Canvas canvas, int drawableWidth, int drawableHeight, Thumb dragThumb, boolean fadeOut) { + private void drawTimeHint(Canvas canvas, int drawableWidth, Thumb dragThumb, boolean fadeOut) { canvas.save(); long microsecondValue = dragThumb == Thumb.MIN ? getMinValue() : getMaxValue(); long seconds = TimeUnit.MICROSECONDS.toSeconds(microsecondValue); @@ -274,11 +241,11 @@ private void drawTimeHint(Canvas canvas, int drawableWidth, int drawableHeight, timePillRect.set(tempDrawRect.left - leftRightPadding, tempDrawRect.top - topBottomPadding, tempDrawRect.right + leftRightPadding, tempDrawRect.bottom + topBottomPadding); - float halfPillWidth = timePillRect.width() / 2f; + float halfPillWidth = timePillRect.width() / 2f; float halfPillHeight = timePillRect.height() / 2f; - long animationTime = fadeOut ? ANIMATION_DURATION_MS - Math.min(ANIMATION_DURATION_MS, System.currentTimeMillis() - dragEndTimeMs) - : Math.min(ANIMATION_DURATION_MS, System.currentTimeMillis() - dragStartTimeMs); + long animationTime = fadeOut ? ANIMATION_DURATION_MS - Math.min(ANIMATION_DURATION_MS, System.currentTimeMillis() - dragEndTimeMs) + : Math.min(ANIMATION_DURATION_MS, System.currentTimeMillis() - dragStartTimeMs); float animationPosition = animationTime / (float) ANIMATION_DURATION_MS; float scaleIn = 0.2f * animationPosition + 0.8f; int alpha = (int) (255 * animationPosition); @@ -288,10 +255,12 @@ private void drawTimeHint(Canvas canvas, int drawableWidth, int drawableHeight, } else { canvas.translate(Math.max(left, halfPillWidth), 0); } - canvas.translate(0, drawableHeight + halfPillHeight); + + float timePillOffset = timePillRect.height() * -1.5f; + canvas.translate(0, timePillOffset); canvas.scale(scaleIn, scaleIn); - thumbTimeBackgroundPaint.setAlpha(Math.round(alpha * 0.6f)); thumbTimeTextPaint.setAlpha(alpha); + thumbTimeBackgroundPaint.setAlpha(alpha); canvas.translate(leftRightPadding - halfPillWidth, halfPillHeight); canvas.drawRoundRect(timePillRect, halfPillHeight, halfPillHeight, thumbTimeBackgroundPaint); canvas.drawText(timeString, 0, 0, thumbTimeTextPaint); @@ -306,42 +275,6 @@ private void drawTimeHint(Canvas canvas, int drawableWidth, int drawableHeight, } } - private void drawDurationAndSizeHint(Canvas canvas, int drawableWidth) { - if (outputQuality == null) return; - - canvas.save(); - long microsecondValue = getMaxValue() - getMinValue(); - long seconds = TimeUnit.MICROSECONDS.toSeconds(microsecondValue); - String durationAndSize = String.format(Locale.getDefault(), "%d:%02d • %s", seconds / 60, seconds % 60, MemoryUnitFormat.formatBytes(outputQuality.fileSize, MemoryUnitFormat.MEGA_BYTES, true)); - float topBottomPadding = thumbHintTextSize * 0.5f; - float leftRightPadding = thumbHintTextSize * 0.75f; - - thumbTimeTextPaint.getTextBounds(durationAndSize, 0, durationAndSize.length(), tempDrawRect); - - timePillRect.set(tempDrawRect.left - leftRightPadding, tempDrawRect.top - topBottomPadding, tempDrawRect.right + leftRightPadding, tempDrawRect.bottom + topBottomPadding); - - float halfPillWidth = timePillRect.width() / 2f; - float halfPillHeight = timePillRect.height() / 2f; - - long animationTime = Math.min(ANIMATION_DURATION_MS, System.currentTimeMillis() - qualityAvailableTimeMs); - float animationPosition = animationTime / (float) ANIMATION_DURATION_MS; - float scaleIn = 0.2f * animationPosition + 0.8f; - int alpha = (int) (255 * animationPosition); - - canvas.translate(Math.max(halfPillWidth, Math.min((right + left) / 2f, drawableWidth - halfPillWidth)), - 2 * halfPillHeight); - canvas.scale(scaleIn, scaleIn); - thumbTimeBackgroundPaint.setAlpha(Math.round(alpha * 0.6f)); - thumbTimeTextPaint.setAlpha(alpha); - canvas.translate(leftRightPadding - halfPillWidth, halfPillHeight); - canvas.drawRoundRect(timePillRect, halfPillHeight, halfPillHeight, thumbTimeBackgroundPaint); - canvas.drawText(durationAndSize, 0, 0, thumbTimeTextPaint); - canvas.restore(); - - if (animationTime < ANIMATION_DURATION_MS) { - invalidate(); - } - } - public long getMinValue() { return minValue == null ? 0 : minValue; } @@ -350,22 +283,18 @@ public long getMaxValue() { return maxValue == null ? getDuration() : maxValue; } - public long getClipDuration() { - return getMaxValue() - getMinValue(); - } - private boolean setMinValue(long minValue) { if (this.minValue == null || this.minValue != minValue) { return setMinMax(minValue, getMaxValue(), Thumb.MIN); - } else{ + } else { return false; } } - public boolean setMaxValue(long maxValue) { + private boolean setMaxValue(long maxValue) { if (this.maxValue == null || this.maxValue != maxValue) { return setMinMax(getMinValue(), maxValue, Thumb.MAX); - } else{ + } else { return false; } } @@ -419,7 +348,7 @@ public boolean onTouchEvent(MotionEvent event) { if (actionMasked == MotionEvent.ACTION_MOVE) { boolean changed = false; - long delta = pixelToDuration(event.getX() - xDown); + long delta = pixelToDuration(event.getX() - xDown); switch (dragThumb) { case POSITION: setDragPosition(downCursor + delta); @@ -432,24 +361,22 @@ public boolean onTouchEvent(MotionEvent event) { changed = setMaxValue(downMax + delta); break; } - if (changed && onRangeChangeListener != null) { + if (changed) { if (dragThumb == Thumb.POSITION) { - onRangeChangeListener.onPositionDrag(dragPosition); + onPositionDrag(dragPosition); } else { - onRangeChangeListener.onRangeDrag(getMinValue(), getMaxValue(), getDuration(), dragThumb); - setOutputQuality(onRangeChangeListener.getQuality(getClipDuration(), getDuration())); + onRangeDrag(getMinValue(), getMaxValue(), getDuration(), false); } } return true; } if (actionMasked == MotionEvent.ACTION_UP) { - if (onRangeChangeListener != null) { + if (editorOnRangeChangeListener != null) { if (dragThumb == Thumb.POSITION) { - onRangeChangeListener.onEndPositionDrag(dragPosition); + onEndPositionDrag(dragPosition); } else { - onRangeChangeListener.onRangeDragEnd(getMinValue(), getMaxValue(), getDuration(), dragThumb); - setOutputQuality(onRangeChangeListener.getQuality(getClipDuration(), getDuration())); + onRangeDrag(getMinValue(), getMaxValue(), getDuration(), true); } lastDragThumb = dragThumb; dragEndTimeMs = System.currentTimeMillis(); @@ -466,20 +393,10 @@ public boolean onTouchEvent(MotionEvent event) { return true; } - private void setOutputQuality(@Nullable Quality outputQuality) { - if (!Objects.equals(this.outputQuality, outputQuality)) { - if (this.outputQuality == null) { - qualityAvailableTimeMs = System.currentTimeMillis(); - } - this.outputQuality = outputQuality; - invalidate(); - } - } - private @Nullable Thumb closestThumb(@Px float x) { - float midPoint = (right + left) / 2f; - Thumb possibleThumb = x < midPoint ? Thumb.MIN : Thumb.MAX; - int possibleThumbX = x < midPoint ? left : right; + float midPoint = (right + left) / 2f; + Thumb possibleThumb = x < midPoint ? Thumb.MIN : Thumb.MAX; + int possibleThumbX = x < midPoint ? left : right; if (Math.abs(x - possibleThumbX) < thumbTouchRadius) { return possibleThumb; @@ -503,7 +420,6 @@ private int getDrawableHeight() { public void setRange(long minValue, long maxValue) { if (getDuration() > 0) { setMinMax(minValue, maxValue, Thumb.MIN); - setMinMax(minValue, maxValue, Thumb.MAX); } else { externalMinValue = minValue; externalMaxValue = maxValue; @@ -514,49 +430,36 @@ public void setTimeLimit(int t, @NonNull TimeUnit timeUnit) { maximumSelectableRangeMicros = timeUnit.toMicros(t); } + private void onPositionDrag(long position) { + if (playerOnRangeChangeListener != null) { + playerOnRangeChangeListener.onPositionDrag(position); + } + } + + private void onEndPositionDrag(long position) { + if (playerOnRangeChangeListener != null) { + playerOnRangeChangeListener.onEndPositionDrag(position); + } + } + + private void onRangeDrag(long minValue, long maxValue, long duration, boolean end) { + if (editorOnRangeChangeListener != null) { + editorOnRangeChangeListener.onRangeDrag(minValue, maxValue, duration, end); + } + } + public enum Thumb { MIN, MAX, POSITION } - public interface OnRangeChangeListener { - + public interface PositionDragListener { void onPositionDrag(long position); - void onEndPositionDrag(long position); - - void onRangeDrag(long minValue, long maxValue, long duration, Thumb thumb); - - void onRangeDragEnd(long minValue, long maxValue, long duration, Thumb thumb); - - @Nullable Quality getQuality(long clipDurationUs, long totalDurationUs); } - public static final class Quality { - private final long fileSize; - private final int qualityRange; - - public Quality(long fileSize, int qualityRange) { - this.fileSize = fileSize; - this.qualityRange = qualityRange; - } - - @Override public boolean equals(Object o) { - if (!(o instanceof Quality)) { - return false; - } - - final Quality quality = (Quality) o; - - return fileSize == quality.fileSize && - qualityRange == quality.qualityRange; - } - - @Override public int hashCode() { - int result = (int) (fileSize ^ (fileSize >>> 32)); - result = 31 * result + qualityRange; - return result; - } + public interface RangeDragListener { + void onRangeDrag(long minValue, long maxValue, long duration, boolean start); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsView.java b/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsView.java index 2e5fe1a1d1..242c8ef2ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/videoconverter/VideoThumbnailsView.java @@ -4,8 +4,10 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.Rect; import android.graphics.RectF; +import android.net.Uri; import android.os.AsyncTask; import android.util.AttributeSet; import android.view.View; @@ -15,6 +17,8 @@ import androidx.annotation.RequiresApi; import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.media.DecryptableUriMediaInput; +import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.video.interfaces.MediaInput; import java.io.IOException; @@ -24,14 +28,16 @@ import java.util.List; @RequiresApi(api = 23) -public class VideoThumbnailsView extends View { +abstract public class VideoThumbnailsView extends View { - private static final String TAG = Log.tag(VideoThumbnailsView.class); + private static final String TAG = Log.tag(VideoThumbnailsView.class); + private static final int CORNER_RADIUS = ViewUtil.dpToPx(8); - private MediaInput input; - private volatile ArrayList thumbnails; + protected Uri currentUri; + + private MediaInput input; + private volatile ArrayList thumbnails; private AsyncTask thumbnailsTask; - private OnDurationListener durationListener; private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); private final RectF tempRect = new RectF(); @@ -39,6 +45,8 @@ public class VideoThumbnailsView extends View { private final Rect tempDrawRect = new Rect(); private long duration = 0; + protected final Path clippingPath = new Path(); + public VideoThumbnailsView(final Context context) { super(context); } @@ -51,8 +59,13 @@ public VideoThumbnailsView(final Context context, final @Nullable AttributeSet a super(context, attrs, defStyleAttr); } - public void setInput(@NonNull MediaInput input) { - this.input = input; + public void setInput(@NonNull Uri uri) throws IOException { + if (uri.equals(this.currentUri)) { + return; + } + + this.currentUri = uri; + this.input = DecryptableUriMediaInput.createForUri(getContext(), uri); this.thumbnails = null; if (thumbnailsTask != null) { thumbnailsTask.cancel(true); @@ -88,7 +101,15 @@ protected void onDraw(final Canvas canvas) { return; } - tempDrawRect.set(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()); + final int left = getPaddingLeft(); + final int top = getPaddingTop(); + final int right = getWidth() - getPaddingRight(); + final int bottom = getHeight() - getPaddingBottom(); + + clippingPath.reset(); + clippingPath.addRoundRect(left, top, right, bottom, CORNER_RADIUS, CORNER_RADIUS, Path.Direction.CW); + + tempDrawRect.set(left, top, right, bottom); if (!drawRect.equals(tempDrawRect)) { drawRect.set(tempDrawRect); @@ -116,6 +137,9 @@ protected void onDraw(final Canvas canvas) { tempRect.top = drawRect.top; tempRect.bottom = drawRect.bottom; + canvas.save(); + + canvas.clipPath(clippingPath); for (int i = 0; i < thumbnails.size(); i++) { tempRect.left = drawRect.left + i * thumbnailWidth; @@ -139,27 +163,21 @@ protected void onDraw(final Canvas canvas) { canvas.restore(); } } - } - } - public void setDurationListener(OnDurationListener durationListener) { - this.durationListener = durationListener; + canvas.restore(); + } } private void setDuration(long duration) { - if (durationListener != null) { - durationListener.onDurationKnown(duration); - } if (this.duration != duration) { this.duration = duration; afterDurationChange(duration); } } - protected void afterDurationChange(long duration) { - } + abstract void afterDurationChange(long duration); - protected long getDuration() { + public long getDuration() { return duration; } @@ -227,14 +245,10 @@ protected void onPostExecute(Void result) { VideoThumbnailsView view = viewReference.get(); List thumbnails = view != null ? view.thumbnails : null; if (view != null) { - view.setDuration(duration); + view.setDuration(ThumbnailsTask.this.duration); view.invalidate(); Log.i(TAG, "onPostExecute, we have " + (thumbnails != null ? thumbnails.size() : "null") + " thumbs"); } } } - - public interface OnDurationListener { - void onDurationKnown(long duration); - } } diff --git a/app/src/main/protowire/Backup.proto b/app/src/main/protowire/Backup.proto index 0299d77ffa..3897400c43 100644 --- a/app/src/main/protowire/Backup.proto +++ b/app/src/main/protowire/Backup.proto @@ -52,7 +52,7 @@ message AccountData { bool linkPreviews = 5; bool notDiscoverableByPhoneNumber = 6; bool preferContactAvatars = 7; - uint32 universalExpireTimer = 8; + uint32 universalExpireTimer = 8; // 0 means no universal expire timer. repeated string preferredReactionEmoji = 9; bool displayBadgesOnProfile = 10; bool keepMutedChatsArchived = 11; @@ -121,6 +121,7 @@ message Group { bool whitelisted = 2; bool hideStory = 3; StorySendMode storySendMode = 4; + string name = 5; } message Self {} @@ -132,7 +133,7 @@ message Chat { uint64 recipientId = 2; bool archived = 3; uint32 pinnedOrder = 4; // 0 = unpinned, otherwise chat is considered pinned and will be displayed in ascending order - uint64 expirationTimerMs = 5; + uint64 expirationTimerMs = 5; // 0 = no expire timer. uint64 muteUntilMs = 6; bool markedUnread = 7; bool dontNotifyForMentionsIfMuted = 8; @@ -173,17 +174,12 @@ message Call { AD_HOC_CALL = 4; } - enum Event { + enum State { UNKNOWN_EVENT = 0; - OUTGOING = 1; // 1:1 calls only - ACCEPTED = 2; // 1:1 and group calls. Group calls: You accepted a ring. - NOT_ACCEPTED = 3; // 1:1 calls only, - MISSED = 4; // 1:1 and group. Group calls: The remote ring has expired or was cancelled by the ringer. - DELETE = 5; // 1:1 and Group/Ad-Hoc Calls. - GENERIC_GROUP_CALL = 6; // Group/Ad-Hoc Calls only. Initial state - JOINED = 7; // Group Calls: User has joined the group call. - DECLINED = 8; // Group Calls: If you declined a ring. - OUTGOING_RING = 9; // Group Calls: If you are ringing a group. + COMPLETED = 1; // A call that was successfully completed or was accepted and in-progress at the time of the backup. + DECLINED_BY_USER = 2; // An incoming call that was manually declined by the user. + DECLINED_BY_NOTIFICATION_PROFILE = 3; // An incoming call that was automatically declined by an active notification profile. + MISSED = 4; // An incoming call that either expired, was cancelled by the sender, or was auto-rejected due to already being in a different call. } uint64 callId = 1; @@ -192,7 +188,7 @@ message Call { bool outgoing = 4; uint64 timestamp = 5; optional uint64 ringerRecipientId = 6; - Event event = 7; + State state = 7; } message ChatItem { @@ -227,10 +223,9 @@ message ChatItem { oneof item { StandardMessage standardMessage = 13; ContactMessage contactMessage = 14; - VoiceMessage voiceMessage = 15; - StickerMessage stickerMessage = 16; - RemoteDeletedMessage remoteDeletedMessage = 17; - ChatUpdateMessage updateMessage = 18; + StickerMessage stickerMessage = 15; + RemoteDeletedMessage remoteDeletedMessage = 16; + ChatUpdateMessage updateMessage = 17; } } @@ -262,7 +257,7 @@ message Text { message StandardMessage { optional Quote quote = 1; optional Text text = 2; - repeated FilePointer attachments = 3; + repeated MessageAttachment attachments = 3; repeated LinkPreview linkPreview = 4; optional FilePointer longText = 5; repeated Reaction reactions = 6; @@ -330,15 +325,11 @@ message ContactAttachment { optional string country = 9; } - message Avatar { - FilePointer avatar = 1; - } - optional Name name = 1; repeated Phone number = 3; repeated Email email = 4; repeated PostalAddress address = 5; - optional Avatar avatar = 6; + optional string avatarUrlPath = 6; optional string organization = 7; } @@ -348,12 +339,6 @@ message DocumentMessage { repeated Reaction reactions = 3; } -message VoiceMessage { - optional Quote quote = 1; - FilePointer audio = 2; - repeated Reaction reactions = 3; -} - message StickerMessage { Sticker sticker = 1; repeated Reaction reactions = 2; @@ -367,6 +352,11 @@ message Sticker { bytes packKey = 2; uint32 stickerId = 3; optional string emoji = 4; + // Stickers are uploaded to be sent as attachments; we also + // back them up as normal attachments when they are in messages. + // DO NOT treat this as the definitive source of a sticker in + // an installed StickerPack that shares the same packId. + FilePointer data = 5; } message LinkPreview { @@ -377,23 +367,42 @@ message LinkPreview { optional uint64 date = 5; } +// A FilePointer on a message that has additional +// metadata that applies only to message attachments. +message MessageAttachment { + // Similar to SignalService.AttachmentPointer.Flags, + // but explicitly mutually exclusive. Note the different raw values + // (non-zero starting values are not supported in proto3.) + enum Flag { + NONE = 0; + VOICE_MESSAGE = 1; + BORDERLESS = 2; + GIF = 3; + } + + FilePointer pointer = 1; + Flag flag = 2; +} + message FilePointer { + // References attachments in the backup (media) storage tier. message BackupLocator { string mediaName = 1; uint32 cdnNumber = 2; } + // References attachments in the transit storage tier. + // May be downloaded or not when the backup is generated; + // primarily for free-tier users who cannot copy the + // attachments to the backup (media) storage tier. message AttachmentLocator { string cdnKey = 1; uint32 cdnNumber = 2; uint64 uploadTimestamp = 3; } - message LegacyAttachmentLocator { - fixed64 cdnId = 1; - } - - // An attachment that was backed up without being downloaded. + // An attachment that was copied from the transit storage tier + // to the backup (media) storage tier up without being downloaded. // Its MediaName should be generated as “{sender_aci}_{cdn_attachment_key}”, // but should eventually transition to a BackupLocator with mediaName // being the content hash once it is downloaded. @@ -403,17 +412,10 @@ message FilePointer { uint32 cdnNumber = 3; } - enum Flags { - VOICE_MESSAGE = 0; - BORDERLESS = 1; - GIF = 2; - } - oneof locator { BackupLocator backupLocator = 1; AttachmentLocator attachmentLocator= 2; - LegacyAttachmentLocator legacyAttachmentLocator = 3; - UndownloadedBackupLocator undownloadedBackupLocator = 4; + UndownloadedBackupLocator undownloadedBackupLocator = 3; } optional bytes key = 5; @@ -424,11 +426,10 @@ message FilePointer { optional bytes incrementalMac = 8; optional bytes incrementalMacChunkSize = 9; optional string fileName = 10; - optional uint32 flags = 11; - optional uint32 width = 12; - optional uint32 height = 13; - optional string caption = 14; - optional string blurHash = 15; + optional uint32 width = 11; + optional uint32 height = 12; + optional string caption = 13; + optional string blurHash = 14; } message Quote { @@ -441,7 +442,7 @@ message Quote { message QuotedAttachment { optional string contentType = 1; optional string fileName = 2; - optional FilePointer thumbnail = 3; + optional MessageAttachment thumbnail = 3; } optional uint64 targetSentTimestamp = 1; // null if the target message could not be found at time of quote insert @@ -509,11 +510,12 @@ message IndividualCallChatUpdate { MISSED_AUDIO_CALL = 5; MISSED_VIDEO_CALL = 6; } + Type type = 1; } message GroupCallChatUpdate { - bytes startedCallAci = 1; + optional bytes startedCallAci = 1; uint64 startedCallTimestamp = 2; repeated bytes inCallAcis = 3; } @@ -537,8 +539,10 @@ message SimpleChatUpdate { Type type = 1; } +// For 1:1 chat updates only. +// For group thread updates use GroupExpirationTimerUpdate. message ExpirationTimerChatUpdate { - uint32 expiresInMs = 1; + uint32 expiresInMs = 1; // 0 means the expiration timer was disabled } message ProfileChangeChatUpdate { @@ -591,6 +595,7 @@ message GroupChangeChatUpdate { GroupV2MigrationInvitedMembersUpdate groupV2MigrationInvitedMembersUpdate = 31; GroupV2MigrationDroppedMembersUpdate groupV2MigrationDroppedMembersUpdate = 32; GroupSequenceOfRequestsAndCancelsUpdate groupSequenceOfRequestsAndCancelsUpdate = 33; + GroupExpirationTimerUpdate groupExpirationTimerUpdate = 34; } } @@ -655,7 +660,7 @@ message GroupAdminStatusUpdate { } message GroupMemberLeftUpdate { - optional bytes aci = 1; + bytes aci = 1; } message GroupMemberRemovedUpdate { @@ -784,25 +789,31 @@ message GroupV2MigrationSelfInvitedUpdate {} // add some members and invited them instead. // (Happens if we don't have the invitee's profile key) message GroupV2MigrationInvitedMembersUpdate { - int32 invitedMembersCount = 1; + uint32 invitedMembersCount = 1; } // The local user migrated gv1->gv2 but was unable to // add or invite some members and dropped them instead. // (Happens for e164 members where we don't have an aci). message GroupV2MigrationDroppedMembersUpdate { - int32 droppedMembersCount = 1; + uint32 droppedMembersCount = 1; +} + +// For 1:1 timer updates, use ExpirationTimerChatUpdate. +message GroupExpirationTimerUpdate { + uint32 expiresInMs = 1; // 0 means the expiration timer was disabled + optional bytes updaterAci = 2; } message StickerPack { - bytes id = 1; - bytes key = 2; + bytes packId = 1; + bytes packKey = 2; string title = 3; string author = 4; repeated StickerPackSticker stickers = 5; // First one should be cover sticker. } message StickerPackSticker { - FilePointer data = 1; - string emoji = 2; -} \ No newline at end of file + string emoji = 1; + uint32 id = 2; +} diff --git a/app/src/main/protowire/Database.proto b/app/src/main/protowire/Database.proto index a80304067b..f5ffc95987 100644 --- a/app/src/main/protowire/Database.proto +++ b/app/src/main/protowire/Database.proto @@ -73,6 +73,7 @@ message ProfileChangeDetails { } StringChange profileNameChange = 1; + StringChange learnedProfileName = 2; } message BodyRangeList { @@ -376,7 +377,11 @@ message ExternalLaunchTransactionState { } message MessageExtras { - GV2UpdateDescription gv2UpdateDescription = 1; + oneof extra { + GV2UpdateDescription gv2UpdateDescription = 1; + signalservice.GroupContext gv1Context = 2; + ProfileChangeDetails profileChangeDetails = 3; + } } message GV2UpdateDescription { diff --git a/app/src/main/protowire/JobData.proto b/app/src/main/protowire/JobData.proto index 89823e7a9c..7e2f51847d 100644 --- a/app/src/main/protowire/JobData.proto +++ b/app/src/main/protowire/JobData.proto @@ -29,7 +29,13 @@ message CallLogEventSendJobData { } message CallLinkUpdateSendJobData { - string callLinkRoomId = 1; + enum Type { + UPDATE = 0; + DELETE = 1; + } + + string callLinkRoomId = 1; + optional Type type = 2; } message AttachmentUploadJobData { diff --git a/app/src/main/res/drawable/focus_indicator.xml b/app/src/main/res/drawable/focus_indicator.xml new file mode 100644 index 0000000000..19d35b64d1 --- /dev/null +++ b/app/src/main/res/drawable/focus_indicator.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_down.xml b/app/src/main/res/drawable/ic_arrow_down.xml deleted file mode 100644 index 2afc613651..0000000000 --- a/app/src/main/res/drawable/ic_arrow_down.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_arrow_down_24.xml b/app/src/main/res/drawable/ic_arrow_down_24.xml deleted file mode 100644 index 7a44a04047..0000000000 --- a/app/src/main/res/drawable/ic_arrow_down_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_arrow_down_circle_filled.xml b/app/src/main/res/drawable/ic_arrow_down_circle_filled.xml deleted file mode 100644 index be0bc5b4ac..0000000000 --- a/app/src/main/res/drawable/ic_arrow_down_circle_filled.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_arrow_down_circle_outline_24.xml b/app/src/main/res/drawable/ic_arrow_down_circle_outline_24.xml deleted file mode 100644 index 4e18168963..0000000000 --- a/app/src/main/res/drawable/ic_arrow_down_circle_outline_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_arrow_right_16.xml b/app/src/main/res/drawable/ic_arrow_right_16.xml deleted file mode 100644 index 294bff12a8..0000000000 --- a/app/src/main/res/drawable/ic_arrow_right_16.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_arrow_up_16.xml b/app/src/main/res/drawable/ic_arrow_up_16.xml deleted file mode 100644 index da393d508d..0000000000 --- a/app/src/main/res/drawable/ic_arrow_up_16.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_cancel_36.xml b/app/src/main/res/drawable/ic_cancel_36.xml deleted file mode 100644 index c926fe9027..0000000000 --- a/app/src/main/res/drawable/ic_cancel_36.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_confirm_36.xml b/app/src/main/res/drawable/ic_confirm_36.xml deleted file mode 100644 index 6685f97005..0000000000 --- a/app/src/main/res/drawable/ic_confirm_36.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_crop_lock_24.xml b/app/src/main/res/drawable/ic_crop_lock_24.xml deleted file mode 100644 index 41a5bd510c..0000000000 --- a/app/src/main/res/drawable/ic_crop_lock_24.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_crop_rotate_24.xml b/app/src/main/res/drawable/ic_crop_rotate_24.xml deleted file mode 100644 index 6d9f144873..0000000000 --- a/app/src/main/res/drawable/ic_crop_rotate_24.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_crop_unlock_24.xml b/app/src/main/res/drawable/ic_crop_unlock_24.xml deleted file mode 100644 index e874cca2b8..0000000000 --- a/app/src/main/res/drawable/ic_crop_unlock_24.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_hq_24.xml b/app/src/main/res/drawable/ic_hq_24.xml deleted file mode 100644 index 560d38f140..0000000000 --- a/app/src/main/res/drawable/ic_hq_24.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_sq_24.xml b/app/src/main/res/drawable/ic_sq_24.xml deleted file mode 100644 index 876bbc1036..0000000000 --- a/app/src/main/res/drawable/ic_sq_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_text_tool_24.xml b/app/src/main/res/drawable/ic_text_tool_24.xml deleted file mode 100644 index 994d26ae12..0000000000 --- a/app/src/main/res/drawable/ic_text_tool_24.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_view_infinite_24.xml b/app/src/main/res/drawable/ic_view_infinite_24.xml deleted file mode 100644 index f59e264d0c..0000000000 --- a/app/src/main/res/drawable/ic_view_infinite_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_view_once_24.xml b/app/src/main/res/drawable/ic_view_once_24.xml deleted file mode 100644 index cad17d0643..0000000000 --- a/app/src/main/res/drawable/ic_view_once_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_viewed_once_24.xml b/app/src/main/res/drawable/ic_viewed_once_24.xml deleted file mode 100644 index a1849f8f57..0000000000 --- a/app/src/main/res/drawable/ic_viewed_once_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/image_editor_hud_blur.xml b/app/src/main/res/drawable/image_editor_hud_blur.xml index 112c5000e7..ae273d40a2 100644 --- a/app/src/main/res/drawable/image_editor_hud_blur.xml +++ b/app/src/main/res/drawable/image_editor_hud_blur.xml @@ -4,23 +4,23 @@ - - - + + + - + - - + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_editor_hud_clear_all_background.xml b/app/src/main/res/drawable/image_editor_hud_clear_all_background.xml index 3940ebe12e..e0cbc98772 100644 --- a/app/src/main/res/drawable/image_editor_hud_clear_all_background.xml +++ b/app/src/main/res/drawable/image_editor_hud_clear_all_background.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/res/drawable/image_editor_hud_draw.xml b/app/src/main/res/drawable/image_editor_hud_draw.xml index 471eb589a8..c436e0c567 100644 --- a/app/src/main/res/drawable/image_editor_hud_draw.xml +++ b/app/src/main/res/drawable/image_editor_hud_draw.xml @@ -4,23 +4,23 @@ - - - + + + - + - - + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_editor_hud_sticker.xml b/app/src/main/res/drawable/image_editor_hud_sticker.xml index 06af3779b1..7be74b3ce6 100644 --- a/app/src/main/res/drawable/image_editor_hud_sticker.xml +++ b/app/src/main/res/drawable/image_editor_hud_sticker.xml @@ -4,23 +4,23 @@ - - - + + + - + - - + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_editor_hud_text.xml b/app/src/main/res/drawable/image_editor_hud_text.xml index 696764d4ce..4c10a2a538 100644 --- a/app/src/main/res/drawable/image_editor_hud_text.xml +++ b/app/src/main/res/drawable/image_editor_hud_text.xml @@ -4,23 +4,23 @@ - - - + + + - + - - + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/image_editor_hud_undo.xml b/app/src/main/res/drawable/image_editor_hud_undo.xml index 39fc9f7a28..7e66dc729d 100644 --- a/app/src/main/res/drawable/image_editor_hud_undo.xml +++ b/app/src/main/res/drawable/image_editor_hud_undo.xml @@ -2,10 +2,10 @@ - - - + + + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_rectangle_container_primary_32.xml b/app/src/main/res/drawable/rounded_rectangle_container_primary_32.xml new file mode 100644 index 0000000000..334c882020 --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle_container_primary_32.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_rectangle_container_surface_variant_32.xml b/app/src/main/res/drawable/rounded_rectangle_container_surface_variant_32.xml new file mode 100644 index 0000000000..334c882020 --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle_container_surface_variant_32.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rounded_rectangle_surface_variant_20.xml b/app/src/main/res/drawable/rounded_rectangle_surface_variant_20.xml new file mode 100644 index 0000000000..ff775c2d7b --- /dev/null +++ b/app/src/main/res/drawable/rounded_rectangle_surface_variant_20.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/symbol_album_24.xml b/app/src/main/res/drawable/symbol_album_24.xml new file mode 100644 index 0000000000..2b4f7b027a --- /dev/null +++ b/app/src/main/res/drawable/symbol_album_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_arrow_circle_dash_down_24.xml b/app/src/main/res/drawable/symbol_arrow_circle_dash_down_24.xml new file mode 100644 index 0000000000..dc7ce3362b --- /dev/null +++ b/app/src/main/res/drawable/symbol_arrow_circle_dash_down_24.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_arrow_circle_down_24.xml b/app/src/main/res/drawable/symbol_arrow_circle_down_24.xml new file mode 100644 index 0000000000..3814e871a6 --- /dev/null +++ b/app/src/main/res/drawable/symbol_arrow_circle_down_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_arrow_end_24.xml b/app/src/main/res/drawable/symbol_arrow_end_24.xml new file mode 100644 index 0000000000..ddd0cf63a9 --- /dev/null +++ b/app/src/main/res/drawable/symbol_arrow_end_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/symbol_arrow_right_24.xml b/app/src/main/res/drawable/symbol_arrow_right_24.xml index fd74d60b42..f6e2d9c784 100644 --- a/app/src/main/res/drawable/symbol_arrow_right_24.xml +++ b/app/src/main/res/drawable/symbol_arrow_right_24.xml @@ -2,8 +2,7 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24" - android:autoMirrored="true"> + android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/symbol_arrow_up_24.xml b/app/src/main/res/drawable/symbol_arrow_up_24.xml new file mode 100644 index 0000000000..dfa4af7c1d --- /dev/null +++ b/app/src/main/res/drawable/symbol_arrow_up_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_blur_24.xml b/app/src/main/res/drawable/symbol_blur_24.xml new file mode 100644 index 0000000000..7217c3e1c5 --- /dev/null +++ b/app/src/main/res/drawable/symbol_blur_24.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_blur_24_dark_onsurface.xml b/app/src/main/res/drawable/symbol_blur_24_dark_onsurface.xml new file mode 100644 index 0000000000..c3c44b9cca --- /dev/null +++ b/app/src/main/res/drawable/symbol_blur_24_dark_onsurface.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_brush_highlighter_24.xml b/app/src/main/res/drawable/symbol_brush_highlighter_24.xml new file mode 100644 index 0000000000..ed6cc6b298 --- /dev/null +++ b/app/src/main/res/drawable/symbol_brush_highlighter_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_brush_pen_24.xml b/app/src/main/res/drawable/symbol_brush_pen_24.xml new file mode 100644 index 0000000000..96532d25f8 --- /dev/null +++ b/app/src/main/res/drawable/symbol_brush_pen_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_check_24.xml b/app/src/main/res/drawable/symbol_check_24.xml index 1ebb78249b..9ea75d86c7 100644 --- a/app/src/main/res/drawable/symbol_check_24.xml +++ b/app/src/main/res/drawable/symbol_check_24.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - + diff --git a/app/src/main/res/drawable/symbol_check_white_24.xml b/app/src/main/res/drawable/symbol_check_white_24.xml new file mode 100644 index 0000000000..412e06a920 --- /dev/null +++ b/app/src/main/res/drawable/symbol_check_white_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_chevron_right_24_color_on_secondary_container.xml b/app/src/main/res/drawable/symbol_chevron_right_24_color_on_secondary_container.xml deleted file mode 100644 index ba3faecca6..0000000000 --- a/app/src/main/res/drawable/symbol_chevron_right_24_color_on_secondary_container.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/symbol_crop_lock_24.xml b/app/src/main/res/drawable/symbol_crop_lock_24.xml new file mode 100644 index 0000000000..02620324ce --- /dev/null +++ b/app/src/main/res/drawable/symbol_crop_lock_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_crop_rotate_24.xml b/app/src/main/res/drawable/symbol_crop_rotate_24.xml new file mode 100644 index 0000000000..0b068c3593 --- /dev/null +++ b/app/src/main/res/drawable/symbol_crop_rotate_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_crop_unlock_24.xml b/app/src/main/res/drawable/symbol_crop_unlock_24.xml new file mode 100644 index 0000000000..373318dffc --- /dev/null +++ b/app/src/main/res/drawable/symbol_crop_unlock_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_draw_24.xml b/app/src/main/res/drawable/symbol_draw_24.xml new file mode 100644 index 0000000000..92e5cd812f --- /dev/null +++ b/app/src/main/res/drawable/symbol_draw_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_draw_24_dark_onsurface.xml b/app/src/main/res/drawable/symbol_draw_24_dark_onsurface.xml new file mode 100644 index 0000000000..4c97642b07 --- /dev/null +++ b/app/src/main/res/drawable/symbol_draw_24_dark_onsurface.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_emoji_24.xml b/app/src/main/res/drawable/symbol_emoji_24.xml new file mode 100644 index 0000000000..11611ab3b0 --- /dev/null +++ b/app/src/main/res/drawable/symbol_emoji_24.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/symbol_quality_high_24.xml b/app/src/main/res/drawable/symbol_quality_high_24.xml new file mode 100644 index 0000000000..fb678fb6a8 --- /dev/null +++ b/app/src/main/res/drawable/symbol_quality_high_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_quality_high_slash_24.xml b/app/src/main/res/drawable/symbol_quality_high_slash_24.xml new file mode 100644 index 0000000000..23a244a860 --- /dev/null +++ b/app/src/main/res/drawable/symbol_quality_high_slash_24.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_reply_24.xml b/app/src/main/res/drawable/symbol_reply_24.xml index cd8ac0b55e..59d5d02871 100644 --- a/app/src/main/res/drawable/symbol_reply_24.xml +++ b/app/src/main/res/drawable/symbol_reply_24.xml @@ -2,7 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24"> + android:viewportHeight="24" + android:autoMirrored="true"> diff --git a/app/src/main/res/drawable/symbol_send_fill_24.xml b/app/src/main/res/drawable/symbol_send_fill_24.xml new file mode 100644 index 0000000000..2da721a51e --- /dev/null +++ b/app/src/main/res/drawable/symbol_send_fill_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_sticker_smiley_24.xml b/app/src/main/res/drawable/symbol_sticker_smiley_24.xml new file mode 100644 index 0000000000..ecf6321dbc --- /dev/null +++ b/app/src/main/res/drawable/symbol_sticker_smiley_24.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_sticker_smiley_24_dark_onsurface.xml b/app/src/main/res/drawable/symbol_sticker_smiley_24_dark_onsurface.xml new file mode 100644 index 0000000000..9752104aa8 --- /dev/null +++ b/app/src/main/res/drawable/symbol_sticker_smiley_24_dark_onsurface.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/symbol_text_24.xml b/app/src/main/res/drawable/symbol_text_24.xml new file mode 100644 index 0000000000..25fa0cd264 --- /dev/null +++ b/app/src/main/res/drawable/symbol_text_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_text_24_dark_onsurface.xml b/app/src/main/res/drawable/symbol_text_24_dark_onsurface.xml new file mode 100644 index 0000000000..4936cae75d --- /dev/null +++ b/app/src/main/res/drawable/symbol_text_24_dark_onsurface.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_text_square_24.xml b/app/src/main/res/drawable/symbol_text_square_24.xml new file mode 100644 index 0000000000..82cc5a51bf --- /dev/null +++ b/app/src/main/res/drawable/symbol_text_square_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_undo_24.xml b/app/src/main/res/drawable/symbol_undo_24.xml new file mode 100644 index 0000000000..b76443f9d0 --- /dev/null +++ b/app/src/main/res/drawable/symbol_undo_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/symbol_view_once_24.xml b/app/src/main/res/drawable/symbol_view_once_24.xml new file mode 100644 index 0000000000..7183279290 --- /dev/null +++ b/app/src/main/res/drawable/symbol_view_once_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_view_once_dash_24.xml b/app/src/main/res/drawable/symbol_view_once_dash_24.xml new file mode 100644 index 0000000000..25d6a02aae --- /dev/null +++ b/app/src/main/res/drawable/symbol_view_once_dash_24.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/symbol_view_once_infinite_24.xml b/app/src/main/res/drawable/symbol_view_once_infinite_24.xml new file mode 100644 index 0000000000..b614a6de57 --- /dev/null +++ b/app/src/main/res/drawable/symbol_view_once_infinite_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/symbol_x_circle_24.xml b/app/src/main/res/drawable/symbol_x_circle_24.xml index a5c8fa2d34..a055ebd880 100644 --- a/app/src/main/res/drawable/symbol_x_circle_24.xml +++ b/app/src/main/res/drawable/symbol_x_circle_24.xml @@ -3,11 +3,10 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - + + diff --git a/app/src/main/res/drawable/v2_media_add_a_message_check.xml b/app/src/main/res/drawable/v2_media_add_a_message_check.xml index 055b82a8a0..497bee20f7 100644 --- a/app/src/main/res/drawable/v2_media_add_a_message_check.xml +++ b/app/src/main/res/drawable/v2_media_add_a_message_check.xml @@ -5,7 +5,7 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/layout/call_screen_call_link_warning_card.xml b/app/src/main/res/layout/call_screen_call_link_warning_card.xml index 166ee9c675..1bff8c7dc3 100644 --- a/app/src/main/res/layout/call_screen_call_link_warning_card.xml +++ b/app/src/main/res/layout/call_screen_call_link_warning_card.xml @@ -17,9 +17,9 @@ tools:layout_marginHorizontal="24dp"> \ No newline at end of file diff --git a/app/src/main/res/layout/call_toast_popup_window.xml b/app/src/main/res/layout/call_toast_popup_window.xml index 78737fe25a..ccbe396af5 100644 --- a/app/src/main/res/layout/call_toast_popup_window.xml +++ b/app/src/main/res/layout/call_toast_popup_window.xml @@ -26,7 +26,7 @@ android:gravity="center" android:text="@string/CallToastPopupWindow__swipe_to_view_screen_share" android:textAppearance="@style/TextAppearance.Signal.Body2" - app:drawableStartCompat="@drawable/ic_arrow_down" + app:drawableStartCompat="@drawable/symbol_arrow_down_24" app:drawableTint="@color/signal_text_primary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/camerax_fragment.xml b/app/src/main/res/layout/camerax_fragment.xml index 257b161f4b..827d25aa6e 100644 --- a/app/src/main/res/layout/camerax_fragment.xml +++ b/app/src/main/res/layout/camerax_fragment.xml @@ -20,6 +20,13 @@ android:layout_height="match_parent" android:layout_gravity="top" app:implementationMode="compatible" /> + + + @@ -30,13 +38,14 @@ android:id="@+id/check_box" android:layout_width="24dp" android:layout_height="24dp" + android:layout_marginEnd="@dimen/core_ui__gutter" android:background="?contactCheckboxBackground" android:button="@null" android:clickable="false" android:focusable="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@id/contact_header" /> @@ -77,6 +87,7 @@ app:layout_constraintHorizontal_chainStyle="packed" app:layout_constraintStart_toEndOf="@id/contact_photo_image" app:layout_constraintTop_toBottomOf="@id/name" + app:layout_goneMarginEnd="@dimen/core_ui__gutter" tools:text="@sample/contacts.json/data/number" /> diff --git a/app/src/main/res/layout/contact_selection_invite_action_item.xml b/app/src/main/res/layout/contact_selection_invite_action_item.xml index 543361cce9..c5551da353 100644 --- a/app/src/main/res/layout/contact_selection_invite_action_item.xml +++ b/app/src/main/res/layout/contact_selection_invite_action_item.xml @@ -18,7 +18,7 @@ android:importantForAccessibility="no" android:scaleType="centerInside" android:src="@drawable/symbol_invite_24" - app:tint="@color/signal_colorOnSurfaceVariant" + app:tint="@color/signal_colorOnSurface" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/contact_selection_refresh_action_item.xml b/app/src/main/res/layout/contact_selection_refresh_action_item.xml index 17c832960b..b110396c6e 100644 --- a/app/src/main/res/layout/contact_selection_refresh_action_item.xml +++ b/app/src/main/res/layout/contact_selection_refresh_action_item.xml @@ -22,7 +22,7 @@ app:layout_constraintTop_toTopOf="parent" app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle" app:srcCompat="@drawable/symbol_refresh_24" - app:tint="@color/signal_colorOnSurfaceVariant" /> + app:tint="@color/signal_colorOnSurface" /> diff --git a/app/src/main/res/layout/mediasend_video_fragment.xml b/app/src/main/res/layout/mediasend_video_fragment.xml index f72eb6bdc4..6e29be3dda 100644 --- a/app/src/main/res/layout/mediasend_video_fragment.xml +++ b/app/src/main/res/layout/mediasend_video_fragment.xml @@ -10,7 +10,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" /> - + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:text="@string/MessageRequestBottomView_block" + app:autoSizeMinTextSize="13sp" + app:autoSizeTextType="uniform" /> + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:text="@string/MessageRequestBottomView_delete" + app:autoSizeMinTextSize="13sp" + app:autoSizeTextType="uniform" /> + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:text="@string/MessageRequestBottomView_report" + app:autoSizeMinTextSize="13sp" + app:autoSizeTextType="uniform" /> + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:text="@string/MessageRequestBottomView_accept" + app:autoSizeMinTextSize="13sp" + app:autoSizeTextType="uniform" /> + android:paddingStart="12dp" + android:paddingEnd="12dp" + android:text="@string/MessageRequestBottomView_unblock" + app:autoSizeMinTextSize="13sp" + app:autoSizeTextType="uniform" /> diff --git a/app/src/main/res/layout/permissions_rationale_dialog.xml b/app/src/main/res/layout/permissions_rationale_dialog.xml index e9234e0fc2..bcfe8906b9 100644 --- a/app/src/main/res/layout/permissions_rationale_dialog.xml +++ b/app/src/main/res/layout/permissions_rationale_dialog.xml @@ -1,30 +1,31 @@ + android:layout_height="wrap_content" + android:orientation="vertical" + tools:viewBindingIgnore="true"> - + android:orientation="horizontal" + android:padding="48dp"> - + android:textAppearance="@style/Signal.Text.BodyMedium" + android:textColor="@color/signal_colorOnSurfaceVariant" + tools:text="Signal needs access to your contacts and media in order to connect with friends, exchange messages, and make secure calls." /> \ No newline at end of file diff --git a/app/src/main/res/layout/quality_selector_dialog.xml b/app/src/main/res/layout/quality_selector_dialog.xml deleted file mode 100644 index 90f3213aff..0000000000 --- a/app/src/main/res/layout/quality_selector_dialog.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/revealable_message_view.xml b/app/src/main/res/layout/revealable_message_view.xml index a8999a9728..e0cf80aceb 100644 --- a/app/src/main/res/layout/revealable_message_view.xml +++ b/app/src/main/res/layout/revealable_message_view.xml @@ -21,7 +21,7 @@ android:layout_height="40dp" android:scaleType="center" tools:background="@color/transparent_white_20" - tools:src="@drawable/ic_viewed_once_24"/> + tools:src="@drawable/symbol_view_once_dash_24"/> diff --git a/app/src/main/res/layout/username_qr_image_selection_activity.xml b/app/src/main/res/layout/username_qr_image_selection_activity.xml new file mode 100644 index 0000000000..e584e495fb --- /dev/null +++ b/app/src/main/res/layout/username_qr_image_selection_activity.xml @@ -0,0 +1,8 @@ + + diff --git a/app/src/main/res/layout/v2_conversation_item_media_incoming.xml b/app/src/main/res/layout/v2_conversation_item_media_incoming.xml index dda40c9ec1..de74d26886 100644 --- a/app/src/main/res/layout/v2_conversation_item_media_incoming.xml +++ b/app/src/main/res/layout/v2_conversation_item_media_incoming.xml @@ -172,6 +172,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="4dp" + android:alpha="0.7" android:autoLink="none" android:ellipsize="end" android:linksClickable="false" @@ -189,6 +190,7 @@ android:layout_height="12dp" android:layout_marginEnd="@dimen/message_bubble_horizontal_padding" android:layout_marginBottom="@dimen/message_bubble_bottom_padding" + android:alpha="0.7" app:layout_constraintBottom_toBottomOf="@id/conversation_item_footer_date" app:layout_constraintEnd_toEndOf="@id/conversation_item_body_wrapper" app:layout_constraintTop_toTopOf="@id/conversation_item_footer_date" /> diff --git a/app/src/main/res/layout/v2_conversation_item_text_only_incoming.xml b/app/src/main/res/layout/v2_conversation_item_text_only_incoming.xml index 01af7deb45..79761b944f 100644 --- a/app/src/main/res/layout/v2_conversation_item_text_only_incoming.xml +++ b/app/src/main/res/layout/v2_conversation_item_text_only_incoming.xml @@ -132,6 +132,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="4dp" + android:alpha="0.7" android:autoLink="none" android:ellipsize="end" android:linksClickable="false" @@ -148,6 +149,7 @@ android:layout_width="12dp" android:layout_height="12dp" android:layout_marginBottom="@dimen/message_bubble_bottom_padding" + android:alpha="0.7" app:layout_constraintBottom_toBottomOf="@id/conversation_item_footer_date" app:layout_constraintEnd_toStartOf="@id/footer_end_pad" app:layout_constraintTop_toTopOf="@id/conversation_item_footer_date" /> diff --git a/app/src/main/res/layout/v2_media_add_message_dialog_fragment_content.xml b/app/src/main/res/layout/v2_media_add_message_dialog_fragment_content.xml index d36265300e..d49d947205 100644 --- a/app/src/main/res/layout/v2_media_add_message_dialog_fragment_content.xml +++ b/app/src/main/res/layout/v2_media_add_message_dialog_fragment_content.xml @@ -9,7 +9,7 @@ android:id="@+id/background_holder" android:layout_width="match_parent" android:layout_height="0dp" - android:background="@color/core_grey_95" + android:background="@color/signal_colorSurface1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="@id/input_barrier" /> @@ -23,7 +23,7 @@ + app:layout_constraintStart_toStartOf="parent" + app:tint="@color/signal_colorOnSurface" /> + tools:parentTag="android.widget.FrameLayout" + tools:viewBindingIgnore="true"> @@ -198,7 +198,7 @@ android:id="@+id/image_editor_hud_draw_color_bar" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginStart="32dp" + android:layout_marginStart="20dp" android:splitTrack="false" android:visibility="gone" app:layout_constraintBottom_toTopOf="@id/image_editor_hud_top_of_button_bar_spacing" @@ -228,6 +228,7 @@ app:layout_constraintBottom_toBottomOf="@id/image_editor_hud_draw_color_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/image_editor_hud_draw_color_bar" + app:tint="@color/signal_dark_colorOnSurface" tools:alpha="1" tools:visibility="visible" /> @@ -245,8 +246,8 @@ app:layout_constraintBottom_toBottomOf="@id/image_editor_hud_draw_color_bar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/image_editor_hud_draw_color_bar" - app:srcCompat="@drawable/ic_text_tool_24" - app:tint="@color/core_white" + app:srcCompat="@drawable/symbol_text_square_24" + app:tint="@color/signal_dark_colorOnSurface" tools:alpha="1" tools:visibility="visible" /> @@ -322,8 +323,8 @@ app:layout_constraintStart_toEndOf="@id/image_editor_hud_flip_button" app:layout_goneMarginEnd="10dp" app:layout_goneMarginStart="10dp" - app:srcCompat="@drawable/ic_crop_unlock_24" - app:tint="@color/core_white" + app:srcCompat="@drawable/symbol_crop_unlock_24" + app:tint="@color/signal_dark_colorOnSurface" tools:alpha="1" tools:translationY="0dp" tools:visibility="visible" /> @@ -394,8 +395,8 @@ android:textColor="@color/core_white" /> diff --git a/app/src/main/res/layout/v2_media_review_fragment.xml b/app/src/main/res/layout/v2_media_review_fragment.xml index e2aac7b2c7..866866d8c9 100644 --- a/app/src/main/res/layout/v2_media_review_fragment.xml +++ b/app/src/main/res/layout/v2_media_review_fragment.xml @@ -1,10 +1,10 @@ + android:layout_height="match_parent" + tools:viewBindingIgnore="true"> + android:layout_height="match_parent" + android:clipChildren="false"> + + + + @@ -107,94 +139,74 @@ android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center" - android:background="@drawable/media_gallery_button_background" android:scaleType="centerInside" - app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Signal.Circle" - app:srcCompat="@drawable/ic_view_infinite_24" - app:tint="@color/core_white" /> + app:srcCompat="@drawable/symbol_view_once_infinite_24" + app:tint="@color/signal_colorOnSurface" /> + app:srcCompat="@drawable/symbol_view_once_24" + app:tint="@color/signal_colorOnSurface" /> - - - + - - + android:layout_marginTop="4dp" + android:textAppearance="@style/Signal.Text.BodySmall" + android:textColor="@color/signal_colorOnSurfaceVariant" + app:layout_constraintEnd_toEndOf="@id/video_timeline" + app:layout_constraintTop_toBottomOf="@id/video_timeline" + tools:text="0:04 · 399 KB" /> - + android:orientation="horizontal" + app:layout_constraintGuide_end="148dp" /> + tools:visibility="visible" /> + app:srcCompat="@drawable/symbol_send_fill_24" + app:tint="@color/signal_colorOnSurface" + tools:visibility="visible"/> @@ -309,8 +315,8 @@ android:alpha="0" android:background="@color/transparent_black_60" android:visibility="gone" - tools:alpha="1" - tools:visibility="visible"> + tools:alpha="0" + tools:visibility="gone"> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/video_editor_hud.xml b/app/src/main/res/layout/video_editor_hud.xml index 5c474e3b39..623733965a 100644 --- a/app/src/main/res/layout/video_editor_hud.xml +++ b/app/src/main/res/layout/video_editor_hud.xml @@ -1,66 +1,37 @@ + tools:parentTag="android.widget.FrameLayout" + tools:viewBindingIgnore="true"> - + - - - - - - - + android:contentDescription="@string/ThumbnailView_Play_video_description" + android:scaleType="fitCenter" + app:srcCompat="@drawable/exo_icon_play" /> - + \ No newline at end of file diff --git a/app/src/main/res/raw/third_party_licenses b/app/src/main/res/raw/third_party_licenses index 0ca986823e..f604a76d85 100644 --- a/app/src/main/res/raw/third_party_licenses +++ b/app/src/main/res/raw/third_party_licenses @@ -11,18 +11,19 @@ The following dependencies are licensed under Apache License, Version 2.0: * Android Lifecycle ViewModel (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.1) * Android Lifecycle ViewModel Kotlin Extensions (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.1) * Android Lifecycle ViewModel with SavedState (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.1) -* Android Lifecycle-Common (https://developer.android.com/topic/libraries/architecture/index.html) +* Android Lifecycle-Common (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) * Android Lifecycle-Common (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.1) -* Android Support Library Annotations (http://developer.android.com/tools/extras/support-library.html) * Android Support Library Annotations (https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +* Android Support Library Annotations (http://developer.android.com/tools/extras/support-library.html) * Android Support Library Annotations (https://developer.android.com/jetpack/androidx/releases/annotation#1.6.0) * Android Support Library Custom View (http://developer.android.com/tools/extras/support-library.html) * Android Support Library View Pager (http://developer.android.com/tools/extras/support-library.html) * Android Support Library collections (http://developer.android.com/tools/extras/support-library.html) * Android Support Library compat (https://developer.android.com/jetpack/androidx/releases/core#1.8.0) -* Android Support Library fragment (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.1) +* Android Support Library fragment (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2) * Android Support Library loader (http://developer.android.com/tools/extras/support-library.html) * Android Tracing (https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +* AndroidX Futures (https://developer.android.com/topic/libraries/architecture/index.html) * AndroidX Test Library (https://developer.android.com/testing) * AssertJ fluent assertions * AutoValue Annotations (https://github.com/google/auto/tree/master/value) @@ -38,10 +39,11 @@ The following dependencies are licensed under Apache License, Version 2.0: * Dexmaker (https://github.com/linkedin/dexmaker) * Exhaustive compiler (https://github.com/cashapp/exhasutive/) * Experimental annotation (https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +* Experimental annotation (https://developer.android.com/jetpack/androidx/releases/annotation#1.3.1) * FindBugs-jsr305 (http://findbugs.sourceforge.net/) -* Fragment Kotlin Extensions (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.1) -* Fragment Test Extensions (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.1) -* Fragment Testing Manifest dependency (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.1) +* Fragment Kotlin Extensions (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2) +* Fragment Test Extensions (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2) +* Fragment Testing Manifest dependency (https://developer.android.com/jetpack/androidx/releases/fragment#1.6.2) * Guava InternalFutureFailureAccess and InternalFutures * Guava ListenableFuture only * Guava: Google Core Libraries for Java (https://github.com/google/guava) @@ -53,6 +55,7 @@ The following dependencies are licensed under Apache License, Version 2.0: * Jackson-core (https://github.com/FasterXML/jackson-core) * Java Native Access (https://github.com/java-native-access/jna) * JavaWriter (http://github.com/square/javawriter/) +* JetBrains Java Annotations (https://github.com/JetBrains/java-annotations) * Kotlin Android Extensions Runtime (https://kotlinlang.org/) * Kotlin Compiler Embeddable (https://kotlinlang.org/) * Kotlin Daemon Embeddable (https://kotlinlang.org/) @@ -71,6 +74,7 @@ The following dependencies are licensed under Apache License, Version 2.0: * LeakCanary Object Watcher for Android extension: Android X fragments support (http://github.com/square/leakcanary/) * LeakCanary Object Watcher for Android extension: Android support library fragments support (http://github.com/square/leakcanary/) * LeakCanary for Android - Core (http://github.com/square/leakcanary/) +* Lifecycle-Common (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.7.0) * LiveData Core Kotlin Extensions (https://developer.android.com/jetpack/androidx/releases/lifecycle#2.6.1) * MockK (https://mockk.io) * MockK Agent API (https://mockk.io) @@ -376,7 +380,6 @@ The following dependencies are licensed under The 3-Clause BSD License: * D8 configuration to desugar desugar_jdk_libs (http://r8.googlesource.com/r8) * Hamcrest (http://hamcrest.org/JavaHamcrest/) -* Protobuf Compiler (https://developers.google.com/protocol-buffers/) * asm (http://asm.ow2.io/) * asm-analysis (http://asm.ow2.io/) * asm-commons (http://asm.ow2.io/) @@ -491,103 +494,6 @@ You may add additional accurate notices of copyright ownership. ========================================================== ========================================================== -The following dependencies are licensed under Eclipse Public License - v 1.0: - -* JUnit (http://junit.org) -* Logback Classic Module -* Logback Core Module - -========================================================== -========================================================== -Eclipse Public License - v 1.0 -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and - -b) in the case of each subsequent Contributor: - -i) changes to the Program, and - -ii) additions to the Program; - -where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. - -"Program" means the Contributions distributed in accordance with this Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. - -b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. - -c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. - -d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and - -b) its license agreement: - -i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; - -ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; - -iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and - -iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. - -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and - -b) a copy of this Agreement must be included with each copy of the Program. - -Contributors may not remove or alter any copyright notices contained within the Program. - -Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. -========================================================== -========================================================== - The following dependencies are licensed under The GNU Lesser General Public License, Version 2.1: * Java Native Access (https://github.com/java-native-access/jna) @@ -755,6 +661,103 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ========================================================== ========================================================== +The following dependencies are licensed under Eclipse Public License - v 1.0: + +* JUnit (http://junit.org) +* Logback Classic Module +* Logback Core Module + +========================================================== +========================================================== +Eclipse Public License - v 1.0 +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + +a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and + +b) in the case of each subsequent Contributor: + +i) changes to the Program, and + +ii) additions to the Program; + +where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. + +"Program" means the Contributions distributed in accordance with this Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, including all Contributors. + +2. GRANT OF RIGHTS + +a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. + +b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. + +c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. + +d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: + +a) it complies with the terms and conditions of this Agreement; and + +b) its license agreement: + +i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; + +ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; + +iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and + +iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + +a) it must be made available under this Agreement; and + +b) a copy of this Agreement must be included with each copy of the Program. + +Contributors may not remove or alter any copyright notices contained within the Program. + +Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. +========================================================== +========================================================== + The following dependencies are licensed under The 2-Clause BSD License: * Hamcrest Core @@ -2439,3 +2442,6 @@ When using or citing the work, you should not imply endorsement by the author or ========================================================== ========================================================== +Kyber Patent License +https://csrc.nist.gov/csrc/media/Projects/post-quantum-cryptography/documents/selected-algos-2022/nist-pqc-license-summary-and-excerpts.pdf + diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 820dcfb295..59321f81a2 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -426,6 +426,8 @@ SMS-boodskappe word nie meer in Signal ondersteun nie. SMS-boodskappe word nie meer in Signal ondersteun nie. Nooi %1$s na Signal om die gesprek hier te hou. + + Hierdie persoon gebruik nie meer Molly nie. Nooi hulle na Molly om die gesprek hier te hou. Nooi na Molly @@ -536,7 +538,7 @@ Slenterpos gerapporteer - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal is verwittig dat hierdie persoon dalk besig is om slenterpos te stuur. Signal kan nie die inhoud van enige kletse sien nie. As slenterpos gerapporteer @@ -557,7 +559,7 @@ Kripto- of geldslenters - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + As iemand wat jy nie ken nie aan jou boodskappe oor kriptogeld (soos Bitcoin) of \'n finansiële geleentheid stuur, wees versigtig—dit is waarskynlik slenterpos. Vae of irrelevante boodskappe @@ -818,7 +820,7 @@ Bekyk - Permanente Signal-kommunikasiemislukking! + Permanente Molly-kommunikasiemislukking! Molly kon nie by Google Play Services registreer nie. Molly-boodskappe en oproepe is gedeaktiveer. Probeer weer om in \"Instellings > Gevorderd\" te registreer. @@ -1386,6 +1388,8 @@ %1$s het hul profielnaam verander na %2$s. %1$s het hul profielnaam van %2$s na %3$s verander. %1$s het hul profiel verander. + + Jy het hierdie klets met %1$s begin. Jy het die groep geskep. @@ -1861,8 +1865,10 @@ Ontkoppel Sein oproepskakel - - Enigiemand wat via die skakel by hierdie oproep aansluit, sal jou naam, foto en telefoonnommer sien. + + Enigiemand wat via die skakel by hierdie oproep aansluit, sal jou naam, foto en telefoonnommer sien. + + Enigiemand wat via die skakel by hierdie oproep aansluit, sal jou naam en foto sien. Wag om ingelaat te word… @@ -2296,7 +2302,7 @@ Gebruikersnaam suksesvol verwyder. Netwerkfout teëgekom. - Too many attempts made, please try again later. + Te veel pogings, probeer asseblief later weer. Hierdie gebruikersnaam is reeds in gebruik. Gebruikersname kan slegs a–Z, 0–9 en onderstrepings bevat. Gebruikersname kan nie met \'n syfer begin nie. @@ -2320,7 +2326,7 @@ Hierdie nommer kan nie 00 wees nie. Voer \'n syfer tussen 1 en 9 in - Numbers with more than 2 digits can\'t start with 0 + Getalle met meer as 2 syfers kan nie met 0 begin nie As jy jou gebruikersnaam herwin, sal dit jou bestaande QR-kode en skakel terugstel. Is jy seker? @@ -3894,6 +3900,12 @@ Niemand sal kan sien jy is op Signal nie, tensy jy vir hulle \'n boodskap stuur of \'n bestaande klets met hulle het. "Om hierdie instelling te verander, stel Wie kan my nommer sien na Niemand." + + Is jy seker? + + Deur \"Wie kan my volgens my nommer vind\" op \"Niemand\" te stel, sal dit vir mense moeiliker maak om jou op Signal te vind. + + Kanselleer Enigiemand Niemand Skermslot @@ -4391,11 +4403,16 @@ Groepbeskrywing + Standaard + Vinniger, minder data + Hoog + Stadiger, meer data - Fotokwaliteit + + Mediakwaliteit Nooi jou vriende uit @@ -4871,6 +4888,28 @@ Een of meer items was te groot Een of meer items was ongeldig Te veel items gekies + + Video gestel om dit slegs een keer te sien + + Foto gestel om dit slegs een keer te sien + + Video op hoë kwaliteit gestel + + Video op standaardkwaliteit gestel + + Foto op hoë kwaliteit gestel + + Foto op standaardkwaliteit gestel + + + %1$d item op hoë kwaliteit gestel + %1$d items op hoë kwaliteit gestel + + + + %1$d item op standaardkwaliteit gestel + %1$d items op standaardkwaliteit gestel + Kanselleer Skets @@ -4895,6 +4934,20 @@ Wys veranderinge af? Jy sal veranderinge aan hierdie foto verloor. + + %1$s gevind + + Begin klets met \"%1$s\" + + Gaan na klets + + + Koppel toestel? + + Dit lyk of jy \'n Signal-toestel probeer koppel. Tik op gaan voort en skandeer die kode weer om dit te koppel. + + Gaan voort + My wapens Vertoonwapen @@ -4993,7 +5046,7 @@ Betaling hangende - Jou bankoorplasing van %1$s is hangende. Bankoorplasings neem gewoonlik 1 werksdag om te voltooi. + Jou bankoorplasing van %1$s is hangende. Bankoorplasings neem gewoonlik 1 tot 14 werksdae om te voltooi. Vind meer uit @@ -5937,9 +5990,9 @@ Jy het \'n hangende skenking - Bankoorplasings neem gewoonlik 1 werksdag om te verwerk. Wag asseblief totdat hierdie betaling voltooi is voordat jy jou intekening opdateer. + Bankoorplasings kan 1 tot 14 werksdae neem om te verwerk. Wag asseblief totdat hierdie betaling voltooi is voordat jy jou intekening opdateer. - Bankoorplasings neem gewoonlik 1 werksdag om te verwerk. Wag asseblief totdat hierdie betaling voltooi is voordat jy nog \'n skenking maak. + Bankoorplasings kan 1 tot 14 werksdae neem om te verwerk. Wag asseblief totdat hierdie betaling voltooi is voordat jy nog \'n skenking maak. Jou skenking word nog verwerk. Dit kan \'n paar minute neem, afhangende van jou verbinding. Wag asseblief totdat hierdie betaling voltooi is voordat jy jou intekening opdateer. @@ -6091,7 +6144,7 @@ Jou eenmalige skenking is hangende. Jy sal die %1$s-wapen op jou profiel kan vertoon wanneer jou skenking ontvang is. - Bankoorplasings neem gewoonlik 1 werksdag om te verwerk. %1$s + Bankoorplasings kan 1 tot 14 werksdae neem om te verwerk. %1$s Vind meer uit @@ -6432,6 +6485,8 @@ Oproepbesonderhede + + Wysig oproepnaam Voeg oproepnaam by @@ -6499,6 +6554,10 @@ Jou QR-kode en -skakel is teruggestel en \'n nuwe QR-kode en -skakel is geskep. Skandeer hierdie QR-kode met jou foon om met my op Signal te klets. + + QR-kode nie gevind nie + + Probeer om \'n ander beeld te skandeer wat \'n Signal-QR-kode bevat. Enigeen met hierdie skakel kan jou gebruikersnaam sien en \'n gesprek met jou begin. Deel dit slegs met mense wie jy vertrou. @@ -6590,6 +6649,10 @@ %1$s is nie \'n Signal-gebruiker nie. Wil jy graag hierdie nommer uitnooi? Nooi uit + + Skandeer QR-kode + + Netwerkfout teëgekom. Probeer later weer. diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 1bec54959e..1d92f59ed2 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -438,6 +438,8 @@ لم تعُد رسائل SMS مُدعّمة من طرف سيجنال. لم تعُد رسائل SMS مُدعّمة من طرف سيجنال. قم بدعوة %1$s إلى سيجنال لإبقاء المحادثة هنا. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. ادعُ إلى سيجنال @@ -572,7 +574,7 @@ تم الإبلاغ عن رسائل غير مرغوب فيها - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + تم إشعار سيجنال بأن هذا الشخص قد يكون أرسل رسائل غير مرغوب فيها. لا يُمكن لسيجنال رؤية محتوى أي دردشات. تم الإبلاغ عنها كرسالة غير مرغوب فيها @@ -593,7 +595,7 @@ عمليات الاحتيال المالية أو من خلال العملات المشفرة - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + إذا راسلك شخص لا تعرفُه بخصوص العملات المشفرة (مثل بيتكوين) أو فرصة مالية، احذر—إنها حتمًا رسالة غير مرغوب فيها. الرسائل الغامضة أو غير ذات الصلة @@ -1574,6 +1576,8 @@ غيّر %1$s اسم حسابه الشخصي إلى %2$s. غيّر %1$s اسم حسابه الشخصي من %2$s إلى %3$s. غيّر %1$s صفحة حسابه الشخصي. + + You started this chat with %1$s. لقد أنشأتَ مجموعة. @@ -2129,8 +2133,10 @@ غير متّصل رابط مكالمة سيجنال - - سيرى أي شخص انضم إلى هذه المكالمة عبر الرابط اسمك وصورتك ورقم هاتفك. + + سيرى أي شخص انضم إلى هذه المكالمة عبر الرابط اسمك وصورتك ورقم هاتفك. + + سَيرى أي شخص انضم إلى هذه المكالمة عبر الرابط اسمك وصورتك. في انتظار السماح بالانضمام… @@ -2616,7 +2622,7 @@ تم حذف اسم المُستخدم بنجاح. حدث خطأ فى الشبكة - Too many attempts made, please try again later. + قمتَ بمحاولات كثيرة. يُرجى المحاولة لاحقاً اسم المُستخدم هذا غير متوفّر. أسماء المُستخدمين يجب أن تحتوي فقط على الحروف الأبجدية، 0-9، أو \"_\". اسم المُستخدم لا يمكن أن يبدأ برقم. @@ -2640,7 +2646,7 @@ لا يُمكن لهذا الرقم أن يكون 00. أدخل رقمًا بين 1 –9 - Numbers with more than 2 digits can\'t start with 0 + الأرقام التي تحتوي على أكثر من رقمين لا يُمكن أن تبدأ بـ 0 سيُؤدي استرداد اسم المُستخدم الخاص بك إلى إعادة تعيين رمز ورابط الاستجابة السريعة الخاصين بك. هل أنت مُتأكد؟ @@ -4318,6 +4324,12 @@ لن يتمكّن أي أحد من رؤيتك على سيجنال إلاّ إذا راسلته أو كانت لديك دردشة موجودة معه. "لتغيير هذا الإعداد، اختر لا أحد عن تحديد من يُمكنه رؤية رقمي." + + هل أنت متأكد؟ + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + إلغاء الكل لا أحد قفل الشاشة @@ -4831,11 +4843,16 @@ وصف المجموعة + قياسي + أسرع، بيانات أقل + بالغ الأهميّة + أبطأ، بيانات أكثر - جودة الصورة + + جودة الوسائط دعوة أصدقائك @@ -5339,6 +5356,36 @@ عنصر واحد أو أكثر كان كبيرًا جدًا عنصر واحد أو أكثر غير صالح تم تحديد عدد كبير جدًا من العناصر + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d items set to high quality + %1$d item set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + + + + %1$d items set to standard quality + %1$d item set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + إلغاء رسم @@ -5363,6 +5410,20 @@ تجاهل التغييرات ؟ سوف تضيع كل تغييرات قمت بها على هذه الصورة. + + Found %1$s + + Start a chat with \"%1$s\" + + توجّه للدردشة + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + مواصلة + شاراتي شارة مُميزة @@ -5461,7 +5522,7 @@ عملية الدفع مُعلقة - تحويلك المصرفي بمبلغ %1$s مُعلق. عادة ما تستغرق التحويلات المصرفية يوم عمل واحد. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. معرفة المزيد @@ -6481,9 +6542,9 @@ لديك تبرّع مُعلق - عادة ما تستغرق التحويلات المصرفية يوم عمل واحد للمعالجة. يُرجى الانتظار حتى اكتمال عملية الدفع هذه قبل تحديث اشتراكك. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - عادة ما تستغرق التحويلات المصرفية يوم عمل واحد للمعالجة. يُرجى الانتظار حتى اكتمال عملية الدفع هذه قبل التبرّع مرة أخرى. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. لا يزال تبرعك قيد المعالجة. قد يستغرق الأمر بضع دقائق حسب اتصال شبكتك. يُرجى الانتظار حتى اكتمال عملية الدفع هذه قبل تحديث اشتراكك. @@ -6639,7 +6700,7 @@ تبرّعك لمرة واحدة معلّق. ستتمكّن من عرض شارتك %1$s على حسابك الشخصي فور التوصل بتبرّعك. - عادة ما تستغرق التحويلات المصرفية يوم عمل واحد للمعالجة. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s معرفة المزيد @@ -6996,6 +7057,8 @@ تفاصيل المكالمة + + تعديل اسم المكالمة إضافة اسم المكالمة @@ -7063,6 +7126,10 @@ تمت إعادة تعيين رمز ورابط الاستجابة السريعة وتم إنشاء رمز ورابط الاستجابة السريعة جديدين. امسح رمز الاستجابة السريعة هذا باستخدام هاتفك للدردشة معي على سيجنال. + + QR code not found + + Try scanning another image containing a Signal QR code. يُمكن لأي شخص يتوفر على هذا الرابط رؤية اسم المُستخدم الخاص بك وبدء محادثة جديدة معك. شاركه مع من تثق فقط. @@ -7162,6 +7229,10 @@ لم يعُد %1$s من مستخدمي سيجنال. هل تريد دعوة هذا الرقم؟ أرسل دعوة + + تصوير الرمز المربع + + حدث خطأ في الشبكة. يُرجى المحاولة مرة أخرى لاحقا. diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index f53c0ba7b1..4f365988a1 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -426,6 +426,8 @@ SMS mesajlaşması artıq Signal-da dəstəklənmir. SMS mesajlaşması artıq Signal-da dəstəklənmir. Söhbəti burada davam etdirmək üçün %1$s Signal-a dəvət edin. + + Bu şəxs artıq Molly-dan istifadə etmir. Söhbəti burada davam etdirmək üçün onu Molly-a dəvət edin. Molly-a dəvət edin @@ -536,7 +538,7 @@ Spam şikayəti - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Bu şəxsin spam göndərmə ehtimalı haqqında Signal bildiriş alıb. Signal çatların məzmununu görə bilmir. Spam olaraq bildirildi @@ -557,7 +559,7 @@ Kriptovalyuta və ya pul ilə əlaqəli fırıldaqlar - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Tanımadığınız biri sizə kriptovalyuta (Bitcoin kimi) və ya maddi bir fürsət haqqında mesaj göndərdikdə diqqətli olun—güman ki, bu bir spamdır. Qeyri müəyyən və qeyri-müvafiq mesajlar @@ -818,7 +820,7 @@ Bax - Daimi Signal ünsiyyət xətası! + Daimi Molly ünsiyyət xətası! Molly, Google Play Xidmətləri ilə qeydiyyatdan keçə bilmədi. Molly mesajları və zəngləri sıradan çıxarıldı, zəhmət olmasa Tənzimləmələr > Qabaqcıl seçimlərində yenidən qeydiyyatdan keçməyə çalışın. @@ -1386,6 +1388,8 @@ %1$s, profil adını \"%2$s\" olaraq dəyişdirdi. %1$s, profil adını \"%2$s\" əvəzinə \"%3$s\" olaraq dəyişdirdi. %1$s, profilini dəyişdirdi. + + Bu çata %1$s ilə başladınız. Qrup yaratdınız. @@ -1861,8 +1865,10 @@ Bağlantı kəsildi Signal zəng keçidi - - Bu zəngə keçid vasitəsilə qoşulan hər kəs adınızı, şəklinizi və telefon nömrənizi görəcək. + + Bu zəngə keçid vasitəsilə qoşulan hər kəs adınızı, şəklinizi və telefon nömrənizi görəcək. + + Bu zəngə keçid vasitəsilə qoşulan hər kəs adınızı və fotonuzu görəcək. Zəngə qoşulmaq üçün icazə gözləyir… @@ -2296,7 +2302,7 @@ İstifadəçi adı uğurla çıxarıldı. Şəbəkə xətası ilə qarşılaşıldı. - Too many attempts made, please try again later. + Həddindən artıq çox cəhd olundu, az sonra yenidən cəhd edin. Bu istifadəçi adı götürülüb. İstifadəçi adları yalnız a–Z, 0–9 və altdan xətt ehtiva edə bilər. İstifadəçi adı nömrə ilə başlaya bilməz. @@ -2320,7 +2326,7 @@ Bu nömrə 00 şəklində ola bilməz. 1–9 arası bir rəqəm daxil edin - Numbers with more than 2 digits can\'t start with 0 + 2 rəqəmdən artıq nömrələr 0 ilə başlaya bilməz İstifadəçi adınızın bərpası mövcud QR kodunuzu və keçidi sıfırlayacaq. Əminsiniz? @@ -3894,6 +3900,12 @@ Mesaj göndərənə və ya ortaq çata daxil olmayana qədər heç kim Signal-da olduğunuzu görə bilməyəcək. "Bu parametri dəyişmək üçün \"Nömrəmi kim görə bilər\" seçimində \"Heç kim\" xanasını seçin." + + Əminsiniz? + + \"Məni nömrəmlə kim tapa bilər\" funksiyasını \"Heç kim\" olaraq seçsəniz insanların sizi Signal-da tapması çətinləşəcək. + + Ləğv et Hər kəs Heç kim Ekran kilidi @@ -4391,11 +4403,16 @@ Qrup açıqlaması + Standard + Sürətli, daha az verilənlər + Yüksək + Yavaş, daha çox verilənlər - Foto keyfiyyəti + + Media keyfiyyəti Dostlarınızı dəvət edin @@ -4871,6 +4888,28 @@ Bir və ya daha çox element çox böyük idi Bir və ya daha çox element etibarsız idi Həddindən çox element seçildi + + Video birdəfəlik baxış üçün təyin olunub + + Fotoşəkil birdəfəlik baxış üçün təyin olunub + + Video yüksək keyfiyyətə sazlanıb + + Video standart keyfiyyətdə sazlandı + + Fotoşəkil yüksək keyfiyyətə sazlanıb + + Fotoşəkil standart keyfiyyətə sazlanıb + + + %1$d fayl yüksək keyfiyyətə sazlanıb + %1$d fayl yüksək keyfiyyətə sazlanıb + + + + %1$d fayl standart keyfiyyətə sazlanıb + %1$d fayl standart keyfiyyətə sazlanıb + İmtina Çək @@ -4895,6 +4934,20 @@ Dəyişikliklər silinsin? Bu foto üzərində etdiyiniz bütün dəyişiklikləri itirəcəksiniz. + + %1$s tapıldı + + \"%1$s\" ilə çata başlayın + + Çata keç + + + Cihaz əlaqələndirilsin? + + Görünür? Signal cihazını əlaqələndirməyə çalışırsınız. Onu əlaqələndirmək üçün \"davam et\" üzərinə klikləyib kodu skan edin. + + Davam et + Nişanlarım Xüsusi nişan @@ -4993,7 +5046,7 @@ Ödəniş gözləmədədir - %1$s dəyərindəki pul köçürməniz gözləmədədir. Bank vasitəsilə pul köçürmələrinin tamamlanması adətən 1 iş günü çəkir. + %1$s dəyərindəki pul köçürməniz gözləmədədir. Pul köçürmələrinin tamamlanması 1 - 14 iş günü arası çəkə bilər. Daha ətraflı @@ -5937,9 +5990,9 @@ Gözləyən bir ianəniz var - Bank vasitəsilə pul köçürmələrinin tamamlanması adətən 1 iş günü çəkir. Abunəliyinizi yeniləməzdən əvvəl bu ödənişin tamamlanmasını gözləyin. + Pul köçürmələrinin emalı 1 - 14 iş günü arası çəkə bilər. Abunəliyinizi yeniləməzdən əvvəl bu ödənişin tamamlanmasını gözləyin. - Bank vasitəsilə pul köçürmələrinin tamamlanması adətən 1 iş günü çəkir. Başqa bir ianə verməzdən əvvəl bu ödənişin tamamlanmasını gözləyin. + Pul köçürmələrinin emalı 1 - 14 iş günü arası çəkə bilər. Başqa bir ianə etməzdən əvvəl bu ödənişin tamamlanmasını gözləyin. İanəniz hələ də emal edilir. Bağlantınızdan asılı olaraq bu bir neçə dəqiqə çəkə bilər. Abunəliyinizi yeniləməzdən əvvəl bu ödənişin tamamlanmasını gözləyin. @@ -6091,7 +6144,7 @@ Bir dəfəlik ianəniz gözləmədədir. İanəniz qəbul edildikdə profilinizdə %1$s nişanı görünəcək. - Bank vasitəsilə pul köçürmələrinin tamamlanması adətən 1 iş günü çəkir. %1$s + Pul köçürmələrinin emalı 1 - 14 iş günü arası çəkə bilər. %1$s Daha ətraflı @@ -6432,6 +6485,8 @@ Zəng təfərrüatları + + Zəngin adını redaktə et Zəng adı əlavə et @@ -6499,6 +6554,10 @@ QR kodunuz və keçidiniz sıfırlanaraq yeni QR kodu və keçid yaradıldı. Mənimlə Signal-da söhbət etmək üçün telefonunuzla bu QR kodunu skan edin. + + QR kodu tapılmadı + + Signal QR koduna malik digər bir rəsmi skan etməyə çalışın. Bu keçid vasitəsilə hər kəs istifadəçi adınıza baxa və sizinlə çata başlaya bilər. Bu keçidi yalnız etimad etdiyiniz insanlarla paylaşın. @@ -6590,6 +6649,10 @@ %1$s Signal istifadəçisi deyil. Bu nömrəni dəvət etmək istəyirsiniz? Dəvət et + + QR kodu skan edin + + Şəbəkə xətası ilə qarşılaşıldı. Daha sonra yenidən sınayın. diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 7fe6eea762..f00f5160ea 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -426,6 +426,8 @@ Signal вече не поддържа SMS съобщения. Signal вече не поддържа SMS съобщения. Поканете %1$s в Signal, за да продължите разговора тук. + + Този човек вече не използва Molly. Поканете го в Molly, за да продължите разговора тук. Покани в Molly @@ -536,7 +538,7 @@ Докладван спам - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal получи известие, че този човек може би изпраща спам. Signal няма как да види съдържанието на никой чат. Докладван спам @@ -557,7 +559,7 @@ Измами с крипто или пари - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ако някой, когото не познавате, ви праща съобщения за криптовалута (като например биткойн) или финансова възможност, внимавайте – това вероятно е спам. Неясни или неуместни съобщения @@ -818,7 +820,7 @@ Преглед - Перманентна Signal комуникационна грешка! + Перманентна Molly комуникационна грешка! Molly не успя да се регистрира с Google Play Services. Molly съобщения и разговори са деактивирани, моля пререгистрирайте през менюто Настройки > Допълнителни. @@ -1386,6 +1388,8 @@ %1$s промени името на профила си на %2$s. %1$s промени името на профила си от %2$s на %3$s. %1$s промени профила си. + + Вие започнахте този чат с %1$s. Вие създадохте групата. @@ -1861,8 +1865,10 @@ Изключен Линк за Signal повикване - - Всеки, който се присъедини към това повикване чрез линка, ще види вашето име, снимка и телефонен номер. + + Всеки, който се присъедини към това повикване чрез линка, ще види вашето име, снимка и телефонен номер. + + Всеки, който се присъедини към това повикване чрез линка, ще вижда името и снимката ви. В очакване да бъде пуснат… @@ -2296,7 +2302,7 @@ Успешно премахнато потребителско име. Възникна мрежова грешка. - Too many attempts made, please try again later. + Направихте прекалено много опити, опитайте пак по-късно. Това потребителско име е взето. Потребителските имена могат да включват само a–Z, 0–9 и долни черти. Потребителските имена не могат да започват с цифра. @@ -2320,7 +2326,7 @@ Този номер не може да бъде 00. Въведете цифра между 1–9 - Numbers with more than 2 digits can\'t start with 0 + Числата с повече от 2 цифри не могат да започват с 0 Възстановяването на вашето потребителско име ще нулира съществуващите ви QR код и линк. Сигурни ли сте? @@ -3894,6 +3900,12 @@ Никой няма да може да види, че сте в Signal, освен ако не му изпратите съобщение или вече нямате съществуващ чат с него. "За да промените тази настройка, задайте „Кой може да вижда номера ми“ на „Никой“." + + Сигурни ли сте? + + Задаването на „Кой може да ме намери по номер“ на „Никой“ ще затрудни хората да ви намират в Signal. + + Отказ Всички Никой Заключен екран @@ -4391,11 +4403,16 @@ Описание на група + Стандартно + По-бързо, по-малко данни + Високо + По-бавно, повече данни - Качество на снимките + + Качество на мултимедията Поканете свои приятели @@ -4871,6 +4888,28 @@ Един или повече елементи бяха твърде големи Един или повече елементи бяха невалидни Избрани са твърде много елементи + + Видеото е настроено за еднократно гледане + + Снимката е настроена за еднократно гледане + + Видеото е настроено на високо качество + + Видеото е настроено на стандартно качество + + Снимката е настроена на високо качество + + Снимката е настроена на стандартно качество + + + %1$d елемент е настроен на високо качество + %1$d елемента са настроени на високо качество + + + + %1$d елемент е настроен на стандартно качество + %1$d елемента са настроени на стандартно качество + Отказ Рисуване @@ -4895,6 +4934,20 @@ Отхвърляне на промените? Ще изгубите всички промени, които сте направили по снимката. + + Намерен е потребителят %1$s + + Започнете чат с „%1$s“ + + Към чата + + + Свързване на устройството? + + Изглежда се опитвате да свържете Signal устройство. Докоснете „продължаване“ и сканирайте кода отново, за да го свържете. + + Продължете + Моите значки Представена значка @@ -4993,7 +5046,7 @@ Плащане в изчакване - Вашият банков превод за %1$s е в изчакване. Обработката на банковите преводи обикновено отнема 1 работен ден. + Вашият банков превод за %1$s е в изчакване. Обработката на банковите преводи може да отнеме от 1 до 14 работни дни. Научете повече @@ -5937,9 +5990,9 @@ Имате изчакващо дарение - Обработката на банковите преводи обикновено отнема 1 работен ден. Моля, изчакайте плащането да приключи, преди да актуализирате абонамента си. + Обработката на банковите преводи може да отнеме от 1 до 14 работни дни. Моля, изчакайте плащането да приключи, преди да актуализирате абонамента си. - Обработката на банковите преводи обикновено отнема 1 работен ден. Моля, изчакайте плащането да приключи, преди да направите друго дарение. + Обработката на банковите преводи може да отнеме от 1 до 14 работни дни. Моля, изчакайте плащането да приключи, преди да направите друго дарение. Дарението ви все още се обработва. Това може да отнеме няколко минути в зависимост от връзката ви. Моля, изчакайте плащането да приключи, преди да актуализирате абонамента си. @@ -6091,7 +6144,7 @@ Вашето еднократно дарение е в изчакване. Ще можете да покажете значката %1$s в профила си, щом дарението ви бъде получено. - Обработката на банковите преводи обикновено отнема 1 работен ден. %1$s + Обработката на банковите преводи може да отнеме от 1 до 14 работни дни. %1$s Научете повече @@ -6432,6 +6485,8 @@ Подробности за обаждането + + Редактиране на име на обаждането Добавяне на име на обаждането @@ -6499,6 +6554,10 @@ Вашите QR код и линк са нулирани и на тяхно място са генерирани нови. Сканирай този QR код с телефона си, за да си чатим в Signal. + + Не е открит QR код + + Опитайте да сканирате друго изображение, което съдържа QR код за Signal. Всеки с този линк може да види потребителското ви име и да започне чат с вас. Споделяйте го само с хора, на които имате доверие. @@ -6590,6 +6649,10 @@ %1$s не е потребител на Signal. Искате ли да поканите този номер? Покани + + Сканирай QR Код + + Проблем по мрежата. Опитайте отново по-късно. diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 7f229304ea..9bb4ca4243 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -426,6 +426,8 @@ Signal-এ এসএমএস ম্যাসেজিং আর সমর্থন করে না। Signal-এ এসএমএস ম্যাসেজিং আর সমর্থন করে না। এখানে কথোপকথন করতে %1$s-কে Signal-এ আমন্ত্রণ জানান। + + এই ব্যক্তি আর Molly ব্যবহার করছেন না। এখানে কথোপকথন করতে তাদেরকে Molly-এ আমন্ত্রণ জানান। Molly এ আমন্ত্রন জানান @@ -536,7 +538,7 @@ স্প্যাম রিপোর্ট করা হয়েছে - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal-কে জানানো হয়েছে যে এই ব্যক্তি সম্ভবত স্প্যাম মেসেজ পাঠাচ্ছেন। Signal কোনো চ্যাটের কন্টেন্ট দেখতে পারে না। স্প্যাম হিসেবে রিপোর্ট করা হয়েছে @@ -557,7 +559,7 @@ ক্রিপ্টো বা অর্থ সংক্রান্ত স্ক্যাম - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + আপনি চেনেন না এমন কেউ যদি আপনাকে ক্রিপ্টোকারেন্সি (যেমন বিটকয়েন) বা আর্থিক সুযোগ সম্পর্কে মেসেজ করেন যাকেন, তবে সতর্ক হোন—এটি সম্ভবত স্প্যাম। অস্পষ্ট বা অপ্রাসঙ্গিক মেসেজ @@ -818,7 +820,7 @@ দেখান - Signal স্থায়ীভাবে যোগাযোগ স্থাপনে ব্যর্থ! + Molly স্থায়ীভাবে যোগাযোগ স্থাপনে ব্যর্থ! Molly গুগল প্লে পরিষেবাদিতে নিবন্ধন করতে অক্ষম ছিল। Molly বার্তা এবং কল সমূহ অক্ষম করা হয়েছে, দয়া করে পুনরায় নিবন্ধকরণ চেষ্টা করুন সেটিংস > উন্নত। @@ -1386,6 +1388,8 @@ %1$s তাদের প্রোফাইলের নাম পরিবর্তন করে %2$s করেছেন। %1$s তাদের প্রোফাইলের নাম %2$s থেকে %3$s-এ পরিবর্তন করেছেন। %1$s তাদের প্রোফাইল পরিবর্তন করেছে। + + আপনি %1$s-এর সাথে এই চ্যাটটি শুরু করেছেন। আপনি গ্রুপ তৈরি করেছেন। @@ -1861,8 +1865,10 @@ বিচ্ছিন্ন হয়েছে Signal কল লিংক - - যিনি এই লিংকের মাধ্যমে এই কলে যোগ দেবেন তিনিই আপনার নাম, ছবি ও ফোন নম্বর দেখতে পাবেন। + + যিনি এই লিংকের মাধ্যমে এই কলে যোগ দেবেন তিনিই আপনার নাম, ছবি ও ফোন নম্বর দেখতে পাবেন। + + লিংকের মাধ্যমে এই কলে যোগদানকারী যে কেউ আপনার নাম ও ছবি দেখতে পাবেন। প্রবেশ করার জন্য অপেক্ষা চলছে… @@ -2296,7 +2302,7 @@ সফলভাবে ব্যবহারকারীর নাম মুছে ফেলা হয়েছে। একটি নেটওয়ার্ক ত্রুটি সম্মুখীন। - Too many attempts made, please try again later. + অনেকবার চেষ্টা করা হয়ে গেছে, অনুগ্রহ করে পরে আবার চেষ্টা করুন। এই ব্যবহারকারীর নাম ব্যবহৃত হয়েছে। ব্যবহারকারীর নামে থাকতে পারবে শুধুমাত্র a–Z, 0–9, ও আন্ডারস্কোর। ব্যবহারকারীর নাম সংখ্যা দিয়ে শুরু করতে পারবে না। @@ -2320,7 +2326,7 @@ এই সংখ্যাটি 00 হতে পারবে না। 1–9-এর মধ্যে একটি সংখ্যা লিখুন - Numbers with more than 2 digits can\'t start with 0 + 2টির বেশি ডিজিট আছে এমন সংখ্যা 0 দিয়ে শুরু হতে পারবে না আপনার ব্যবহারকারীর নাম পুনরুদ্ধার করা হলে আপনার বিদ্যমান QR কোড এবং লিংক রিসেট করা হবে। আপনি কি নিশ্চিত? @@ -3894,6 +3900,12 @@ আপনি Signal-এ আছেন তা কেউ দেখতে পাবেন না যদি না আপনি তাদের মেসেজ পাঠান বা তাদের সাথে কোনো চ্যাট বিদ্যমান থাকে। "এই সেটিংসটি পরিবর্তন করতে, \"কে আমার নম্বর দেখতে পারবেন\" তা \"কেউই নয়\"-তে সেট করুন।" + + আপনি কি নিশ্চিত? + + \"কারা আমাকে নম্বরের মাধ্যমে খুঁজে পেতে পারেন\"-এ \"কেউ নয়\" সেট করা হলে তা আপনাকে Signal-এ খুঁজে পাওয়া অন্যদের কাছে কঠিন করে তুলবে। + + বাতিল করুন সকলে কেউ না স্ক্রীন এর লক্ @@ -4391,11 +4403,16 @@ গ্রুপের বিবরণ + স্ট্যান্ডার্ড + দ্রুততর, কম ডেটা + উচ্চ + আরও ধীরগতি, আরও ডেটা - ছবির মান + + মিডিয়ার মান আপনার বন্ধুদের আমন্ত্রণ করুন @@ -4871,6 +4888,28 @@ এক বা একাধিক আইটেম খুব বড় ছিল৷ এক বা একাধিক আইটেম বাতিল ছিল অনেকগুলি আইটেম নির্বাচন করা হয়েছে + + ভিডিও একবার দেখার জন্য সেট করা হয়েছে + + ছবি একবার দেখার জন্য সেট করা হয়েছে + + ভিডিও উচ্চ মানে সেট করা হয়েছে + + ভিডিও স্ট্যান্ডার্ড কোয়ালিটিতে সেট করা হয়েছে + + ছবি উচ্চ মানে সেট করা হয়েছে + + ছবি স্ট্যান্ডার্ড মানে সেট করা হয়েছে + + + %1$d-টি আইটেম উচ্চ মানে সেট করা হয়েছে + %1$d-টি আইটেম উচ্চ মানে সেট করা হয়েছে + + + + %1$d-টি আইটেম স্ট্যান্ডার্ড মানে সেট করা হয়েছে + %1$d-টি আইটেম স্ট্যান্ডার্ড মানে সেট করা হয়েছে + বাতিল করুন আঁকুন @@ -4895,6 +4934,20 @@ পরিবর্তনগুলি বাতিল করতে চান? আপনি এই ফটোতে করা যেকোনো পরিবর্তন হারাবেন। + + %1$s পাওয়া গেছে + + \"%1$s\"-এর সাথে একটি চ্যাট শুরু করুন + + চ্যাটে যান + + + ডিভাইস লিংক করবেন? + + মনে হচ্ছে আপনি একটি Signal ডিভাইস লিংক করার চেষ্টা করছেন। এগিয়ে যান ট্যাপ করুন এবং এটি লিংক করতে আবার কোডটি স্ক্যান করুন। + + চালিয়ে যান + আমার ব্যাজ ফিচারকৃত ব্যাজ @@ -4993,7 +5046,7 @@ পেমেন্ট অনিষ্পন্ন অবস্থায় আছে - আপনার %1$s পরিমাণ অর্থের ব্যাংক ট্রান্সফার অনিষ্পন্ন অবস্থায় আছে। ব্যাংক ট্রান্সফার সম্পন্ন হতে সাধারণত 1 কার্যদিবস প্রয়োজন হয়। + আপনার %1$s পরিমাণ অর্থের ব্যাংক ট্রান্সফার অনিষ্পন্ন অবস্থায় আছে। ব্যাংক ট্রান্সফার সম্পন্ন হতে 1 থেকে 14 কার্যদিবস সময় লাগতে পারে। আরো জানুন @@ -5937,9 +5990,9 @@ আপনার একটি জমা না হওয়া ডোনেশন রয়েছে - ব্যাংক ট্রান্সফার প্রক্রিয়া করতে সাধারণত 1 কার্যদিবস প্রয়োজন হয়। অনুগ্রহ করে আপনার সাবস্ক্রিপশন আপডেট করার আগে এই পেমেন্টটি সম্পন্ন হওয়ার আগ পর্যন্ত অপেক্ষা করুন। + ব্যাংক ট্রান্সফার প্রক্রিয়া করতে 1 থেকে 14 কার্যদিবস সময় লাগতে পারে। অনুগ্রহ করে আপনার সাবস্ক্রিপশন আপডেট করার আগে এই পেমেন্টটি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন। - ব্যাংক ট্রান্সফার প্রক্রিয়া করতে সাধারণত 1 কার্যদিবস প্রয়োজন হয়। অনুগ্রহ করে আরেকটি ডোনেশন পাঠানোর আগে এই পেমেন্টটি সম্পন্ন হওয়ার আগ পর্যন্ত অপেক্ষা করুন। + ব্যাংক ট্রান্সফার প্রক্রিয়া করতে 1 থেকে 14 কার্যদিবস সময় লাগতে পারে। অনুগ্রহ করে আরেকটি ডোনেশন পাঠানোর আগে এই পেমেন্টটি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন। আপনার ডোনেশন এখনো প্রক্রিয়া করা হচ্ছে। আপনার সংযোগের উপর ভিত্তি করে এতে কয়েক মিনিট সময় লাগতে পারে। অনুগ্রহ করে আপনার সাবস্ক্রিপশন আপডেট করার আগে এই পেমেন্টটি সম্পন্ন হওয়ার আগ পর্যন্ত অপেক্ষা করুন। @@ -6091,7 +6144,7 @@ আপনার এককালীন ডোনেশন অনিষ্পন্ন অবস্থায় আছে। আপনার ডোনেশন পাওয়া গেলে আপনি আপনার প্রোফাইলে %1$s ব্যাজ প্রদর্শন করতে সক্ষম হবেন। - ব্যাংক ট্রান্সফার প্রক্রিয়া করতে সাধারণত 1 কার্যদিবস প্রয়োজন হয়। %1$s + ব্যাংক ট্রান্সফার প্রক্রিয়া করতে 1 থেকে 14 কার্যদিবস সময় লাগতে পারে। %1$s আরো জানুন @@ -6432,6 +6485,8 @@ কলের বিস্তারিত + + কলের নাম এডিট করুন কলের নাম যোগ করুন @@ -6499,6 +6554,10 @@ আপনার QR কোড ও লিংক রিসেট করা হয়েছে এবং একটি নতুন QR কোড ও লিংক তৈরি করা হয়েছে। Signal-এ আমার সাথে চ্যাট করতে আপনার ফোন দিয়ে এই QR কোডটি স্ক্যান করুন। + + QR কোড পাওয়া যায়নি + + Signal QR কোড ধারণকারী অন্য একটি ছবি স্ক্যান করার চেষ্টা করুন। এই লিঙ্কটি রয়েছে এমন যে কেউ আপনার ব্যবহারকারীর নাম দেখতে পারবেন এবং আপনার সাথে চ্যাটিং শুরু করতে পারবেন। শুধুমাত্র আপনি আস্থা রাখতে পারেন এমন ব্যক্তিদের সাথে এটি শেযার করুন। @@ -6590,6 +6649,10 @@ %1$s Signal ব্যবহারকারী নন। আপনি কি এই নম্বরটিকে আমন্ত্রণ জানাতে চান? আমন্ত্রণ + + কিউআর কোড স্ক্যান করুন + + একটি নেটওয়ার্ক ত্রুটির সম্মুখীন হয়েছে। পরে আবার চেষ্টা করুন। diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index 4dda1eb000..aca1a51c05 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -432,6 +432,8 @@ Razmjena SMS poruka više nije podržana u Signalu. Razmjena SMS poruka više nije podržana u Signalu. Pozovite korisnika %1$s u Signal da zadržite razgovor ovdje. + + Ova osoba više ne koristi Molly. Pozovite korisnika u Molly da zadržite razgovor ovdje. Pozovite na Molly @@ -554,7 +556,7 @@ Prijavljena neželjena pošta - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal je obaviješten da ova osoba možda šalje neželjenu poštu. Signal ne može vidjeti sadržaj nijednog razgovora. Prijavljeno kao neželjena poruka @@ -575,7 +577,7 @@ Prevare koje uključuju kriptovalute ili novac - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ako neko koga ne poznajete šalje poruke o kriptovalutama (kao što je Bitcoin) ili nekoj finansijskoj prilici, budite oprezni – vjerovatno se radi o neželjenoj pošti. Nejasne ili nebitne poruke @@ -854,7 +856,7 @@ Pregled - Stalna greška u komunikaciji Signalom! + Stalna greška u komunikaciji Mollyom! Nije uspjela registracija Mollya na Google Play Services. Onemogućene su sve poruke i pozivi putem Mollya. Molimo pokušajte ponovo se registrovati kroz Postavke > Napredno. @@ -1480,6 +1482,8 @@ %1$s promijenio/la je ime na svom profilu u %2$s. %1$s promijenio/la je ime na svom profilu iz %2$s u %3$s. %1$s načinio/la je izmjene na svom profilu. + + Započeli ste ovaj chat sa %1$s. Kreirali ste grupu. @@ -1995,8 +1999,10 @@ Prekinuta veza Poveznica Signal poziva - - Svako ko se pridruži ovom pozivu putem poveznice vidjet će vaše ime, fotografiju i broj telefona. + + Svako ko se pridruži ovom pozivu putem poveznice vidjet će vaše ime, fotografiju i broj telefona. + + Svako ko se pridruži ovom pozivu putem linka vidjet će vaše ime i fotografiju. Čeka se ulazak… @@ -2456,7 +2462,7 @@ Uspješno je uklonjeno korisničko ime. Došlo je do greške u mreži. - Too many attempts made, please try again later. + Pokušali ste previše puta, pokušajte ponovo kasnije. Ovo korisničko ime već je zauzeto. Korisničko ime može sadržavati samo slova bez kvačica, brojeve i donju crtu. Korisničko ime ne može početi brojem. @@ -2480,7 +2486,7 @@ Ovaj broj ne može biti 00. Unesite brojku između 1-9 - Numbers with more than 2 digits can\'t start with 0 + Brojevi s više od 2 brojke ne mogu početi sa 0 Oporavak vašeg korisničkog imena će poništiti vaš postojeći QR kod i vezu. Jeste li sigurni? @@ -4106,6 +4112,12 @@ Niko neće moći vidjeti da ste na Signalu osim ako toj osobi ne pošaljete poruku ili ne razgovarate s njom. "Da promijenite ovu postavku, postavite opciju Ko može vidjeti moj broj na Niko." + + Jeste li sigurni? + + Ako postavite opciju \"Ko me može pronaći po broju\" na \"Niko\" će otežati ljudima da vas pronađu na Signalu. + + Otkaži Svako Niko Zaključavanje ekrana @@ -4611,11 +4623,16 @@ Opis grupe + Standardni + Brži, manji protok + Visoki + Sporiji, veći protok - Kvalitet fotografije + + Kvalitet zapisa Pozovite prijatelje @@ -5105,6 +5122,32 @@ Jedna ili više datoteka su prevelike Jedna ili više datoteka nisu validne Označeno je previše datoteka + + Video je postavljen za jednokratno gledanje + + Fotografija je postavljena za jednokratni pregled + + Video je postavljen na visoku kvalitetu + + Video je postavljen na standardni kvalitet + + Fotografija je postavljena na visoku kvalitetu + + Fotografija je postavljena na standardni kvalitet + + + %1$d stavka je postavljena na visok kvalitet + %1$d stavke su postavljene na visok kvalitet + %1$d stavki je postavljeno na visok kvalitet + %1$d stavki je postavljeno na visok kvalitet + + + + %1$d stavka je postavljena na standardni kvalitet + %1$d stavke su postavljene na standardni kvalitet + %1$d stavki je postavljeno na standardni kvalitet + %1$d stavki je postavljeno na standardni kvalitet + Prekini Crtaj @@ -5129,6 +5172,20 @@ Poništiti promjene? Poništit ćete svaku izmjenu koju ste načinili na ovoj slici. + + Pronađeno: %1$s + + Započnite razgovor sa \"%1$s\" + + Idi u chat + + + Povezati uređaj? + + Izgleda da pokušavate povezati Signal uređaj. Dodirnite Nastavi i ponovo skenirajte kod da ga povežete. + + Nastavi + Moje značke Odabrana značka @@ -5227,7 +5284,7 @@ Plaćanje je na čekanju - Vaš bankovni transfer od %1$s je na čekanju. Za bankovne transfere je obično potreban jedan radni dan. + Vaš bankovni transfer od %1$s je na čekanju. Bankovni transferi mogu potrajati od 1 do 14 dana. Saznaj više @@ -6209,9 +6266,9 @@ Imate donaciju na čekanju - Obrada bankovnih transfera obično traje 1 radni dan. Pričekajte da se ovo plaćanje završi prije nego što ažurirate svoju pretplatu. + Obrada bankovnih transfera može potrajati od 1 do 14 dana. Pričekajte da se ovo plaćanje završi prije nego što ažurirate svoju pretplatu. - Obrada bankovnih transfera obično traje 1 radni dan. Pričekajte da se ova uplata završi prije nego što date drugu donaciju. + Obrada bankovnih transfera može potrajati od 1 do 14 dana. Pričekajte da se ova uplata završi prije nego što pošaljete drugu donaciju. Vaša donacija se još uvijek obrađuje. Ovo može potrajati nekoliko minuta ovisno o vašoj vezi. Pričekajte da se ovo plaćanje završi prije nego što ažurirate svoju pretplatu. @@ -6365,7 +6422,7 @@ Vaša jednokratna donacija je na čekanju. Moći ćete prikazati značku %1$s na svom profilu kada primimo vašu donaciju. - Obrada bankovnih transfera obično traje 1 radni dan. %1$s + Obrada bankovnih transfera može potrajati od 1 do 14 dana. %1$s Saznaj više @@ -6714,6 +6771,8 @@ Detalji poziva + + Uređivanje naziva poziva Dodajte ime poziva @@ -6781,6 +6840,10 @@ Vaš QR kod i link su poništeni i novi QR kod i link su kreirani. Skenirajte ovaj QR kod telefonom da razgovarate sa mnom na Signalu. + + QR kod nije pronađen + + Pokušajte skenirati drugu sliku koja sadrži QR kod Signala. Svako s ovom poveznicom može vidjeti vaše korisničko ime i započeti chat s vama. Podijelite ga samo sa ljudima kojima vjerujete. @@ -6876,6 +6939,10 @@ %1$s nije korisnik/ca Signala. Želite li pozvati ovaj broj? Pozovi + + Skeniraj QR kôd + + Došlo je do greške u mreži. Pokušajte ponovo kasnije. diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index adc3116262..e55f073ca8 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -426,6 +426,8 @@ Els missatges SMS ja no són compatibles amb Signal. Els missatges SMS ja no són compatibles amb Signal. Convida %1$s a Signal per mantenir la conversa aquí. + + Aquesta persona ja no utilitza Molly. Convida-la a Molly per continuar parlant per aquí. Convida al Molly @@ -536,7 +538,7 @@ Se n\'ha informat com a spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ha rebut una notificació que la persona pot estar enviant spam. Signal no pot veure el contingut de cap xat. Reportat com a spam @@ -557,7 +559,7 @@ Estafes de criptomoneda o diners - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Si algú que no coneixes t\'envia missatges sobre criptomonedes (com Bitcoin) o sobre una oportunitat financera, ves amb compte: és probable que sigui spam. Missatges imprecisos o irrellevants @@ -818,7 +820,7 @@ Mostra - La comunicació del Signal falla contínuament! + La comunicació del Molly falla contínuament! El Molly no s\'ha pogut registrar al Google Play Services. Els missatges i les trucades del Molly s\'han desactivat, registreu-vos de nou a Configuració > Avançada. @@ -1386,6 +1388,8 @@ %1$s ha canviat el nom del perfil a %2$s. %1$s ha canviat el nom del perfil de %2$s a %3$s. %1$s ha canviat el perfil. + + Has iniciat un xat amb %1$s. Heu creat el grup. @@ -1861,8 +1865,10 @@ Desconnectat Enllaç de trucada de Signal - - Qualsevol persona que s\'uneixi a aquesta trucada mitjançant l\'enllaç veurà el teu nom, foto i número de telèfon. + + Qualsevol persona que s\'uneixi a aquesta trucada mitjançant l\'enllaç veurà el teu nom, foto i número de telèfon. + + Qualsevol persona que s\'uneixi a aquesta trucada mitjançant l\'enllaç veurà el teu nom i la teva foto. Esperant per a entrar… @@ -2296,7 +2302,7 @@ L\'àlies s\'ha eliminat correctament. Hi ha hagut un error de xarxa. - Too many attempts made, please try again later. + S\'han fet massa intents. Si us plau, torna-ho a provar més tard. Aquest àlies ja està agafat. Els àlies només poden incloure a-z, 0-9 i _. Els àlies no poden començar amb un número. @@ -2320,7 +2326,7 @@ El número no pot ser 00. Introdueix un dígit entre 1 i 9 - Numbers with more than 2 digits can\'t start with 0 + Els números amb més de 2 dígits no poden començar per 0 Recuperar el teu àlies restablirà el teu codi QR i enllaç actuals. Segur que vols fer això? @@ -3894,6 +3900,12 @@ Ningú podrà veure que ets a Signal tret que els enviïs un missatge o tinguis un xat obert amb ells. "Per canviar això, configura Qui pot veure el meu número seleccionant Ningú." + + Segur que vols fer això? + + Al configurar \"Qui pot trobar-me a través del meu número\" a \"Ningú,\" serà més difícil que la gent pugui trobar-te a Signal. + + Cancel·lar Tothom Ningú Bloqueig de pantalla @@ -4391,11 +4403,16 @@ Descripció del grup + Estàndard + Més ràpid, menys dades + Alta + Més lent, més dades - Qualitat de la fotografia + + Qualitat dels mitjans Convideu-hi amistats @@ -4871,6 +4888,28 @@ Un o més elements eren massa grossos. Un o més elements no eren vàlids. Massa elements seleccionats + + Vídeo configurat amb una sola visualització + + Foto configurada amb una sola visualització + + Vídeo configurat en alta qualitat + + Vídeo configurat en qualitat estàndard + + Foto configurada en alta qualitat + + Foto configurada en qualitat estàndard + + + %1$d element configurat en alta qualitat + %1$d elements configurats en alta qualitat + + + + %1$d element configurat en qualitat estàndard + %1$d elements configurats en qualitat estàndard + Cancel·la Dibuix @@ -4895,6 +4934,20 @@ Voleu descartar-ne els canvis? Perdreu qualsevol canvi que hàgiu fet en aquesta fotografia. + + %1$s trobat + + Iniciar un xat amb \"%1$s\" + + Ves al xat + + + Enllaçar un dispositiu? + + Sembla que estàs intentant enllaçar un dispositiu Signal. Toca Continuar i torna a escanejar el codi per enllaçar-lo. + + Continuar + Les meves insígnies Insígnia inclosa @@ -4993,7 +5046,7 @@ Pagament pendent - La teva transferència bancària de %1$s està pendent. Les transferències bancàries solen trigar 1 dia laborable a completar-se. + La teva transferència bancària de %1$s està pendent. Les transferències bancàries poden trigar entre 1 i 14 dies laborables a completar-se. Més informació @@ -5937,9 +5990,9 @@ Tens una donació pendent - Les transferències bancàries solen trigar 1 dia laborable a processar-se. Espera fins que es completi el pagament abans d\'actualitzar la teva subscripció. + Les transferències bancàries poden trigar entre 1 i 14 dies laborables a completar-se. Espera fins que es completi el pagament abans d\'actualitzar la teva subscripció. - Les transferències bancàries solen trigar 1 dia laborable a processar-se. Espera fins que es completi aquest pagament abans de fer una altra donació. + Les transferències bancàries poden trigar entre 1 i 14 dies laborables a completar-se. Espera fins que es completi aquest pagament abans de fer una altra donació. La teva donació encara s\'està processant. Això pot trigar uns quants minuts segons la teva connexió. Espera fins que es completi el pagament abans d\'actualitzar la teva subscripció. @@ -6091,7 +6144,7 @@ La teva donació única està pendent. Podràs mostrar la insígnia %1$s al teu perfil quan rebem la teva donació. - Les transferències bancàries solen trigar 1 dia laborable a processar-se. %1$s + Les transferències bancàries poden trigar entre 1 i 14 dies laborables a completar-se. %1$s Més informació @@ -6432,6 +6485,8 @@ Detalls de la trucada + + Editar nom de trucada Afegir nom de trucada @@ -6499,6 +6554,10 @@ El teu codi QR i l\'enllaç s\'han restablert, i s\'ha creat un nou codi QR i enllaç. Escaneja aquest codi QR amb el teu telèfon per xatejar amb mi a Signal. + + No s\'ha trobat el codi QR + + Prova d\'escanejar una altra imatge que contingui un codi QR de Signal. Qualsevol persona amb aquest enllaç pot veure el teu àlies i començar un xat amb tu. Comparteix-lo només amb persones de confiança. @@ -6590,6 +6649,10 @@ %1$s no fa servir Signal. Vols convidar aquest número? Convida + + Escaneja el codi QR + + S\'ha trobat un error de xarxa. Torneu-ho a provar més tard. diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index f6e1d3ee5e..3a508d3889 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -432,6 +432,8 @@ Zasílání SMS zpráv již není aplikací Signal podporováno. Zasílání SMS zpráv již není aplikací Signal podporováno. Pozvěte kontakt %1$s do aplikace Signal a pokračujte v konverzaci zde. + + Tato osoba již Molly nepoužívá. Pozvěte ji do aplikace Molly a pokračujte v konverzaci zde. Pozvat do Molly @@ -554,7 +556,7 @@ Nahlášený spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal byl upozorněn, že tato osoba možná rozesílá spam. Signal nevidí obsah chatů. Nahlášeno jako spam @@ -575,7 +577,7 @@ Podvody s kryptoměnami nebo penězi - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Když vám někdo, koho neznáte, posílá zprávy o kryptoměnách (třeba bitcoinech) nebo o finanční příležitosti, mějte se na pozoru – nejspíš jde o spam. Neurčité nebo bezpředmětné zprávy @@ -854,7 +856,7 @@ Zobrazit - Trvalá chyba komunikace Signal! + Trvalá chyba komunikace Molly! Molly se nemůže registrovat k službě Google Play. Zprávy a volání jsou proto zakázány: Prosím zkuste se znovu registrovat v menu Nastavení > Rozšířené. @@ -1480,6 +1482,8 @@ %1$s změnil/a jméno svého profilu na %2$s. %1$s změnil/a jméno svého profilu z %2$s na %3$s. %1$s upravil svůj profil. + + Zahájili jste tento chat s uživatelem %1$s. Vytvořili jste skupinu. @@ -1995,8 +1999,10 @@ Odpojen Odkaz na hovor Signal - - Každý, kdo se k tomuto hovoru připojí prostřednictvím odkazu, uvidí vaše jméno, fotografii a telefonní číslo. + + Každý, kdo se k tomuto hovoru připojí prostřednictvím odkazu, uvidí vaše jméno, fotografii a telefonní číslo. + + Každý, kdo se k tomuto hovoru připojí prostřednictvím odkazu, uvidí vaše jméno a fotografii. Čeká se na vpuštění… @@ -2456,7 +2462,7 @@ Uživatelské jméno bylo úspěšně odstraněno. Došlo k chybě v síti. - Too many attempts made, please try again later. + Uskutečnili jste příliš mnoho pokusů. Zkuste to prosím znovu později. Toto uživatelské jméno je obsazené. Uživatelská jména mohou obsahovat pouze a–Z, 0–9 a podtržítka. Uživatelská jména nesmí začínat číslicí. @@ -2480,7 +2486,7 @@ Toto číslo nesmí být 00. Zadejte číslici od 1 do 9 - Numbers with more than 2 digits can\'t start with 0 + Čísla s více než dvěma číslicemi nemohou začínat 0 Obnovením uživatelského jména resetujete svůj stávající QR kód a odkaz. Jste si jisti? @@ -4106,6 +4112,12 @@ Nikdo neuvidí, že používáte Signal, dokud mu nenapíšete nebo pokud s ním už nejste v existujícím chatu. "Pokud toto nastavení chcete změnit, nastavte možnost Kdo uvidí moje číslo na Nikdo." + + Jste si jisti? + + Nastavením položky „Kdo mě může najít podle čísla“ na „Nikdo“ ztížíte lidem, aby vás ve službě Signal našli. + + Zrušit Všichni Nikdo Zámek obrazovky @@ -4611,11 +4623,16 @@ Popisek skupiny + Standard + Rychlejší, méně dat + Vysoká + Pomalejší, více dat - Kvalita fotografie + + Kvalita médií Pozvěte své přátele @@ -5105,6 +5122,32 @@ Jeden nebo více souborů je moc velkých Jeden nebo více souborů je neplatných Příliš mnoho vybraných položek + + Video nastaveno na jednorázové zobrazení + + Fotografie nastavena na jednorázové zobrazení + + Video nastaveno na vysokou kvalitu + + Video nastaveno na standardní kvalitu + + Fotografie nastavena na vysokou kvalitu + + Fotografie nastavena na standardní kvalitu + + + %1$d položka nastavena na vysokou kvalitu + %1$d položky nastaveny na vysokou kvalitu + %1$d položek nastaveno na vysokou kvalitu + %1$d položek nastaveno na vysokou kvalitu + + + + %1$d položka nastavena na standardní kvalitu + %1$d položky nastaveny na standardní kvalitu + %1$d položek nastaveno na standardní kvalitu + %1$d položek nastaveno na standardní kvalitu + Zrušit Kreslit @@ -5129,6 +5172,20 @@ Zrušit změny? Ztratíte všechny změny, které jste na této fotografii provedli. + + Nalezen uživatel %1$s + + Začít chatovat s uživatelem %1$s + + Přejít na chat + + + Propojit zařízení? + + Zdá se, že se snažíte propojit zařízení Signal. Pro propojení klepněte na možnost pokračovat a znovu naskenujte kód. + + Pokračovat + Moje odznaky Doporučený odznak @@ -5227,7 +5284,7 @@ Platba se zpracovává - Váš bankovní převod ve výši %1$s se zpracovává. Dokončení bankovního převodu obvykle trvá 1 pracovní den. + Váš bankovní převod ve výši %1$s se zpracovává. Dokončení bankovního převodu může trvat 1 až 14 pracovních dní. Více informací @@ -6209,9 +6266,9 @@ Máte nezpracovaný příspěvek - Zpracování bankovního převodu obvykle trvá 1 pracovní den. S aktualizací předplatného prosím počkejte, dokud nebude tato platba dokončena. + Zpracování bankovního převodu může trvat 1 až 14 pracovních dní. S aktualizací předplatného prosím počkejte, dokud nebude tato platba dokončena. - Zpracování bankovního převodu obvykle trvá 1 pracovní den. S dalším příspěvkem prosím počkejte, dokud nebude tato platba dokončena. + Zpracování bankovního převodu může trvat 1 až 14 pracovních dní. S dalším příspěvkem prosím počkejte, dokud nebude tato platba dokončena. Váš příspěvek se stále ještě zpracovává. V závislosti na vašem připojení to může trvat několik minut. S aktualizací předplatného prosím počkejte, dokud nebude tato platba dokončena. @@ -6365,7 +6422,7 @@ Váš jednorázový příspěvek se zpracovává. Jakmile váš příspěvek obdržíme, budete si moci na svém profilu zobrazit odznak %1$s. - Zpracování bankovního převodu obvykle trvá 1 pracovní den. %1$s + Zpracování bankovního převodu může trvat 1 až 14 pracovních dní. %1$s Více informací @@ -6714,6 +6771,8 @@ Podrobnosti o hovoru + + Upravit název hovoru Přidat název hovoru @@ -6781,6 +6840,10 @@ Váš QR kód a odkaz byly resetovány a byl vytvořen nový QR kód a odkaz. Naskenuj tento QR kód svým telefonem a chatuj se mnou přes Signal. + + QR kód nebyl nalezen + + Zkuste naskenovat jiný obrázek s QR kódem Signal. Kdokoli, kdo má tento odkaz, může vidět vaše uživatelské jméno a začít s vámi chatovat. Sdílejte jej pouze s lidmi, kterým důvěřujete. @@ -6876,6 +6939,10 @@ %1$s není uživatelem služby Signal. Chcete toto číslo pozvat do služby? Pozvánka + + Naskenování QR kódu + + Došlo k síťové chybě. Zkuste to znovu později. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4113d0290d..b8677ff71c 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -426,6 +426,8 @@ Sms-beskeder understøttes ikke længere i Signal. Sms-beskeder understøttes ikke længere i Signal. Invitér %1$s til Signal for at holde samtalen her. + + Denne person bruger ikke længere Molly. Invitér dem til Molly for at fortsætte samtalen her. Inviter til Molly @@ -536,7 +538,7 @@ Rapporteret spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal har fået besked om at denne person muligvis sender spam. Signal kan ikke se indholdet af chats. Rapporteret som spam @@ -557,7 +559,7 @@ Krypto- eller pengesvindel - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Pas på, hvis en person, du ikke kender, kontakter dig vedrørende kryptovaluta (såsom Bitcoin) eller en økonomisk mulighed – det er sandsynligvis spam. Uklare eller irrelevante beskeder @@ -818,7 +820,7 @@ Vis - Permanent fejl ved Signal-kommunikationen! + Permanent fejl ved Molly-kommunikationen! Molly var ude af stand til at registrere med Google Play-tjenester. Molly-beskeder og opkald blev deaktiveret. Prøv venligst at registrere igen i Indstillinger -> Avanceret @@ -1386,6 +1388,8 @@ %1$s ændrede sit profilnavn til %2$s. %1$s ændrede sit profilnavn fra %2$s til %3$s. %1$s ændrede sin profil. + + Du startede denne chat med %1$s. Du oprettede gruppen. @@ -1861,8 +1865,10 @@ Afbrudt Signal-opkaldslink - - Alle, der deltager i dette opkald via linket, vil se dit navn, billede og telefonnummer. + + Alle, der deltager i dette opkald via linket, vil se dit navn, billede og telefonnummer. + + Alle, der deltager i dette opkald via linket, vil se dit navn og billede. Venter på at blive lukket ind… @@ -2296,7 +2302,7 @@ Brugernavn slettet. Registreret en netværksfejl - Too many attempts made, please try again later. + For mange forsøg – prøv igen senere Brugernavnet er optaget. Brugernavne må kun indeholde a-Z, 0-9 og underscores. Brugernavne kan ikke starte med et tal. @@ -2320,7 +2326,7 @@ Dette nummer må ikke være 00. Angiv et tal mellem 1-9 - Numbers with more than 2 digits can\'t start with 0 + Tal med mere end to cifre må ikke starte med 0 Hvis du gendanner dit brugernavn, nulstilles din eksisterende QR-kode og dit link. Er du sikker? @@ -3894,6 +3900,12 @@ Ingen vil kunne se, at du er på Signal, medmindre du sender dem en besked eller har en eksisterende chat med dem. "For at ændre denne indstilling skal du indstille \"Personer, der kan se mit nummer\" til \"Ingen\"." + + Er du sikker? + + Ved at indstille \"Hvem kan finde mig med mit nummer\" til \"Ingen\" bliver det sværere for folk at finde dig på Signal. + + Annuller Alle Ingen Skærmlås @@ -4391,11 +4403,16 @@ Gruppebeskrivelse + Standard + Hurtigere, færre data + Høj + Langsommere, mere data - Billedkvalitet + + Mediekvalitet Inviter dine venner @@ -4871,6 +4888,28 @@ Et eller flere emner var for store Et eller flere emner var ugyldige Der er valgt for mange emner + + Video indstillet til vis én gang + + Photo set to view once + + Video indstillet til høj kvalitet + + Video indstillet til standardkvalitet + + Billede indstillet til høj kvalitet + + Billede indstillet til standardkvalitet + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Annullér Tegn @@ -4895,6 +4934,20 @@ Kassér ændringer? Du mister alle ændringer, du har lavet for dette billede. + + Fandt %1$s + + Start en chat med \"%1$s\" + + Gå til chat + + + Forbind enhed? + + Det ser ud som om, at du forsøger at tilknytte en Signal-enhed. Tryk på fortsæt, og scan koden igen for at oprette forbindelsen. + + Fortsæt + Mine badges Fremhævet badge @@ -4993,7 +5046,7 @@ Betalingen afventer - Din bankoverførsel på %1$s afventer. Bankoverførsler tager som regel én arbejdsdag at gennemføre. + Din bankoverførsel på %1$s afventer. Det kan tage 1-14 arbejdsdage at gennemføre en bankoverførsel. Få mere at vide @@ -5937,9 +5990,9 @@ Du har en afventende donation - Bankoverførsler tager som regel én arbejdsdag at behandle. Vent på at betalingen bliver gennemført, inden du opdaterer dit abonnement. + Det kan tage 1-14 arbejdsdage at behandle en bankoverførsel. Vent på at betalingen bliver gennemført, inden du opdaterer dit abonnement. - Bankoverførsler tager som regel én arbejdsdag at behandle. Vent på at betalingen bliver gennemført, inden du foretager en anden donation. + Det kan tage 1-14 arbejdsdage at behandle en bankoverførsel. Vent på at betalingen bliver gennemført, inden du foretager en anden donation. Din donation er stadig under behandling. Det kan tage et par minutter afhængigt af din forbindelse. Vent på at betalingen bliver gennemført, inden du opdaterer dit abonnement. @@ -6091,7 +6144,7 @@ Din engangsdonation er afventende. Du vil kunne vise %1$s-badget på din profil, når din donation er modtaget. - Bankoverførsler tager som regel én arbejdsdag at behandle. %1$s + Det kan tage 1-14 arbejdsdage at behandle en bankoverførsel. %1$s Få mere at vide @@ -6432,6 +6485,8 @@ Opkaldsoplysninger + + Rediger opkaldsnavn Tilføj opkaldsnavn @@ -6499,6 +6554,10 @@ Din QR-kode og dit link er blevet nulstillet, og der er oprettet en ny QR-kode og et nyt link. Scan QR-koden med din mobil for at snakke med mig på Signal. + + QR-koden blev ikke fundet + + Prøv at scanne et andet billede, der indeholder en Signal QR-kode. Alle med dette link kan se dit brugernavn og starte en chat med dig. Del det kun med personer, du stoler på. @@ -6590,6 +6649,10 @@ %1$s bruger ikke Signal. Vil du invitere dette nummer? Inviter + + Scan QR-kode + + Netværksfejl registreret. Prøv igen senere. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6ef585d331..b4048462f4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -46,7 +46,7 @@ Dies entsperrt Molly und Benachrichtigungen über Nachrichten dauerhaft. Deaktivieren Molly-Nachrichten und ‑Anrufe deaktivieren? - Molly-Nachrichten und ‑Anrufe durch Löschen deiner Registrierung vom Server deaktivieren. Du musst deine Telefonnummer erneut registrieren um in Zukunft wieder mit Molly zu kommunizieren. + Deaktiviere Molly-Nachrichten und ​-​Anrufe, indem du deine Registrierung vom Server löschst. Du musst deine Telefonnummer erneut registrieren, um Molly in Zukunft wieder zu nutzen. Fehler beim Verbinden mit dem Server! PINs sind für die Registrierungssperre erforderlich. Zum Deaktivieren deiner PIN musst du daher zuerst auch die Registrierungssperre deaktivieren. PIN erstellt. @@ -167,7 +167,7 @@ Gruppenmitglieder werden dich nicht wieder zu dieser Gruppe hinzufügen können. Gruppenmitglieder werden dich wieder zu dieser Gruppe hinzufügen können. - Ihr werdet einander schreiben und euch anrufen können, und dein Name und Foto werden mit diesem Nutzer geteilt. + Ihr werdet einander schreiben und euch anrufen können, und dein Name und Foto werden mit diesem Signal-Kontakt geteilt. Ihr werdet einander schreiben können. Blockierte Personen werden dich nicht anrufen oder dir Nachrichten senden können. @@ -231,7 +231,7 @@ Zensurumgehung ausschalten? - Für eine besseres Erlebnis kannst du dich nun direkt mit dem Signal-Dienst verbinden. + Für eine bessere Qualität kannst du dich nun direkt mit dem Signal-Dienst verbinden. Ausschalten @@ -367,10 +367,10 @@ Zum Startbildschirm hinzugefügt Anrufe nicht unterstützt Dieses Gerät scheint keine Wahlvorgänge zu unterstützen. - Unverschlüsselte SMS + Ungesicherte SMS - Unsichere SMS (%1$s) - Unverschlüsselte MMS + Ungesicherte SMS (%1$s) + Ungesicherte MMS Signal-Nachricht @@ -426,6 +426,8 @@ Die SMS-Nachrichtübermittlung wird in Signal nicht länger unterstützt. Die SMS-Nachrichtübermittlung wird in Signal nicht länger unterstützt. Lade %1$s zu Signal ein, damit die Unterhaltung hier weitergeht. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Zu Molly einladen @@ -472,7 +474,7 @@ %1$d Anhänge werden im Gerätespeicher gespeichert … Ausstehend … - Internet (Signal- Protokoll) + Internet (Signal-Protokoll) MMS SMS Löschen @@ -536,7 +538,7 @@ Spam gemeldet - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal wurde benachrichtigt, dass diese Person möglicherweise Spam versendet. Signal kann den Inhalt von Chats nicht sehen. Als Spam gemeldet @@ -557,7 +559,7 @@ Krypto- oder Geldbetrug - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Wenn jemand, den du nicht kennst, Nachrichten über Kryptowährungen (wie Bitcoin) oder eine finanzielle Gelegenheit sendet, sei vorsichtig – es handelt sich wahrscheinlich um Spam. Vage oder irrelevante Nachrichten @@ -655,8 +657,8 @@ Profil - Fehler beim Festlegen des Profilbildes - Problem beim Festlegen des Profils + Fehler beim Einrichten des Profilbildes + Problem beim Einrichten des Profils Richte dein Profil ein Dein Profil und Änderungen daran sind für Personen, an die du Nachrichten verschickst, Kontakte und Gruppen sichtbar. Avatar festlegen @@ -696,7 +698,7 @@ Datensicherung besitzt eine falsche Dateiendung. - Chat sichern + Chat-Sicherungen Datensicherungen sind mit einer Passphrase verschlüsselt und auf deinem Gerät gespeichert. Sicherung erstellen Letzte Sicherung: %1$s @@ -818,7 +820,7 @@ Anzeigen - Dauerhafter Signal-Kommunikationsfehler! + Dauerhafter Molly-Kommunikationsfehler! Molly konnte nicht für die Google-Play-Dienste registriert werden. Molly-Nachrichten und ‑Anrufe wurden daher deaktiviert. Bitte registriere Molly erneut in Molly → Einstellungen → Datenschutz → Erweiterte Einstellungen. @@ -1049,7 +1051,7 @@ Dies ist eine Gruppe alten Typs. Für neue Funktionen wie @Erwähnungen und Admins, Diese Gruppe alten Typs kann nicht zu einer Gruppe neuen Typs aktualisiert werden. Die maximale Gruppengröße von %1$d Mitgliedern ist überschritten. aktualisiere diese Gruppe. - Dies ist eine unverschlüsselte MMS-Gruppe. Lade deine Kontakte zu Signal ein, um dich vertraulich zu unterhalten. + Dies ist eine ungesicherte MMS-Gruppe. Lade deine Kontakte zu Signal ein, um dich vertraulich zu unterhalten. Jetzt einladen mehr Gruppenbeschreibung hinzufügen … @@ -1349,11 +1351,11 @@ Eingehender Videoanruf - Entgangener Sprachanruf + Verpasster Sprachanruf - Entgangener Videoanruf + Verpasster Videoanruf - Entgangener Sprachanruf bei aktiviertem Benachrichtigungsprofil + Verpasster Sprachanruf bei aktiviertem Benachrichtigungsprofil Verpasster Videoanruf bei aktiviertem Benachrichtigungsprofil @@ -1386,6 +1388,8 @@ %1$s hat den Profilnamen zu %2$s geändert. %1$s hat den Profilnamen von %2$s zu %3$s geändert. %1$s hat das Profil geändert. + + You started this chat with %1$s. Du hast die Gruppe erstellt. @@ -1778,7 +1782,7 @@ Anruf wird angenommen … Anruf wird beendet … - Klingeln … + klingelt… Besetzt Empfänger nicht erreichbar Netzwerkfehler! @@ -1861,8 +1865,10 @@ Verbindung getrennt Signal-Anruflink - - Alle, die diesem Anruf über den Link beitreten, sehen deinen Namen, dein Foto und deine Telefonnummer. + + Alle, die diesem Anruf über den Link beitreten, sehen deinen Namen, dein Foto und deine Telefonnummer. + + Alle, die diesem Anruf über den Link beitreten, sehen deinen Namen und dein Foto. Warten auf Einlass… @@ -2296,7 +2302,7 @@ Nutzername erfolgreich entfernt. Ein Netzfehler ist aufgetreten. - Too many attempts made, please try again later. + Zu viele Versuche. Bitte versuche es später erneut. Dieser Nutzername ist vergeben. Nutzernamen dürfen nur a–Z, 0–9 und Unterstriche beinhalten. Nutzernamen dürfen nicht mit einer Ziffer beginnen. @@ -2320,7 +2326,7 @@ Diese Nummer darf nicht 00 sein. Verwende eine andere Zahl von 1 bis 9 - Numbers with more than 2 digits can\'t start with 0 + Nummern mit mehr als 2 Ziffern dürfen nicht mit 0 beginnen Wenn du deinen Nutzernamen wiederherstellst, werden dein bestehender QR-Code und dein Link ersetzt und neu erstellt. Bist du dir sicher? @@ -2440,7 +2446,7 @@ Hat mit %1$s auf dein Bild reagiert. Hat mit %1$s auf dein GIF reagiert. Hat mit %1$s auf deine Datei reagiert. - Hat mit %1$s auf dein Audio reagiert. + Hat mit %1$s auf deine Sprachnachricht reagiert. Hat mit %1$s auf deine einmalig anzeigbaren Medieninhalte reagiert. Hat mit %1$s auf deine Zahlung reagiert. @@ -3156,25 +3162,25 @@ Design Chat-Farbe und Hintergrund - App-Icon + App-Symbol OK Abbrechen - Ändere App-Icon und Name zu »%1$s« + Ändere App-Symbol und Name zu »%1$s« - Molly muss beendet werden, um das App-Icon und den Namen zu ändern. Bei Benachrichtigungen werden immer das Standard-Icon von Molly und der Name angezeigt. + Molly muss beendet werden, um das App-Symbol und den Namen zu ändern. Bei Benachrichtigungen werden immer das Standardsymbol von Molly und der Name angezeigt. - Wähle ein App-Icon und einen Namen aus, die dann auf dem Startbildschirm und im App-Drawer deines Mobiltelefons angezeigt werden. Bei Benachrichtigungen werden immer das Standard-Icon von Molly und der Name angezeigt. Mehr erfahren + Wähle ein App-Symbol und einen Namen aus, die dann auf dem Startbildschirm und im App-Drawer deines Mobiltelefons angezeigt werden. Bei Benachrichtigungen werden immer das Standard-Icon von Molly und der Name angezeigt. Mehr erfahren - App-Icons und Namen werden auf dem Startbildschirm und im App-Drawer deines Mobiltelefons angezeigt. + App-Symbole und Namen werden auf dem Startbildschirm und im App-Drawer deines Mobiltelefons angezeigt. Bei Benachrichtigungen werden immer das Standard-Icon von Molly und der Name angezeigt. Mehr erfahren - Grafik, die zeigt, wo das neue App-Icon zu sehen sein wird. + Grafik, die zeigt, wo das neue App-Symbol zu sehen sein wird. PIN deaktivieren PIN aktivieren Falls du deine PIN deaktivierst, wirst du bei erneutem Registrieren von Signal alle Daten verlieren, sofern du sie nicht manuell per Datensicherung sicherst und wiederherstellst. Bei deaktivierter PIN kannst du die Registrierungssperre nicht einschalten. @@ -3229,7 +3235,7 @@ %1$s Nachrichten - Personalisiert + Benutzerdefiniert System-Emojis verwenden Alle Anrufe über den Signal-Server leiten, um die eigene IP-Adresse gegenüber Kontakten nicht offenzulegen. Dies verringert die Anrufqualität. Anrufe immer indirekt @@ -3271,7 +3277,7 @@ Aus Ein Proxyadresse - Verwende einen Proxy nur, falls trotz bestehender Internetverbindung die App sich nicht mit dem Signal-Server verbinden kann. + Verwende einen Proxy nur, falls die App sich trotz bestehender Internetverbindung nicht mit dem Signal-Server verbinden kann. Teilen Speichern Verbindung mit Proxy wird hergestellt … @@ -3614,7 +3620,7 @@ Gruppeneinstellungen Gruppe verlassen Medienübersicht - Chateinstellungen + Chat-Einstellungen Zum Startbildschirm hinzufügen Bubble erstellen @@ -3816,14 +3822,14 @@ Signal-Datenbank wird migriert … Sicherungspassphrase Datensicherungen werden im Gerätespeicher gespeichert und mit der unten genannten Passphrase verschlüsselt. Die Passphrase ist notwendig, um die Sicherung später wiederherzustellen. - Du musst über diese Passphrase verfügen, um eine Sicherung wiederherzustellen. + Du brauchst diese Passphrase, um eine Sicherung wiederherzustellen. Ordner Ich habe mir diese Passphrase notiert. Ohne sie können keine Sicherungen wiederhergestellt werden. Sicherung wiederherstellen Konto übertragen oder wiederherstellen Konto übertragen Überspringen - Chat sichern + Chat-Sicherungen Konto übertragen Konto auf ein neues Android-Gerät übertragen Sicherungspassphrase eingeben @@ -3894,6 +3900,12 @@ Niemand kann sehen, dass du auf Signal bist, es sei denn, du schreibst eine Nachricht oder hast mit der Person einen bereits bestehenden Chat. "Um diese Einstellung zu ändern, setze »Wer kann meine Nummer sehen« auf »Niemand«." + + Bist du dir sicher? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Abbrechen Jeder Niemand Bildschirmsperre @@ -4391,11 +4403,16 @@ Gruppenbeschreibung + Standard + Schneller, weniger Daten + Hoch + Langsamer, mehr Daten - Fotoqualität + + Medienqualität Freunde einladen @@ -4536,7 +4553,7 @@ Verschwindende Nachrichten App-Sicherheit Bildschirmfotos in der Anwendung und der Liste der letzten Anwendungen blockieren - Signal-Nachrichten und -Anrufe, »Anrufe immer indirekt« und »Vertraulicher Absender« + Signal-Nachrichten und -Anrufe, Anrufe immer indirekt und Vertraulicher Absender Standardablaufzeit für neue Chats Lege eine Standardablaufzeit für verschwindende Nachrichten fest. Diese gilt für alle von dir begonnenen neuen Chats. @@ -4871,6 +4888,28 @@ Mindestens ein Element war zu groß Mindestens ein Element war ungültig Zu viele Elemente ausgewählt + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Abbrechen Zeichnen @@ -4895,6 +4934,20 @@ Änderungen verwerfen? Du wirst alle an diesem Foto vorgenommenen Änderungen verlieren. + + Found %1$s + + Start a chat with \"%1$s\" + + Zu Chat + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Fortfahren + Meine Abzeichen Ausgewähltes Abzeichen @@ -4993,7 +5046,7 @@ Zahlung ausstehend - Deine Überweisung in Höhe von %1$s wird bearbeitet. Banküberweisungen werden in der Regel innerhalb von einem Werktag ausgeführt. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Mehr erfahren @@ -5513,11 +5566,11 @@ Signal-Verbindungen sind Menschen, denen du vertraust, entweder durch: - Einen Chat starten + Starten eines Chats Annehmen einer Unterhaltungsanfrage - Speicherung in den Telefonkontakten + Speichern in den Telefonkontakten "Deine Verbindungen können deinen Namen und dein Foto sowie Beiträge unter »Meine Story« sehen, es sei denn, du verbirgst sie vor ihnen." @@ -5748,7 +5801,7 @@ %1$s · %2$d ausgenommen - Hier antippen, um deine Zuschauer auszuwählen + Hier antippen, um deine Betrachter auszuwählen Story-Einstellungen @@ -5876,7 +5929,7 @@ Storys ausschalten? - Du wirst keine Storys mehr teilen oder betrachten können. Story-Updates, die du kürzlich geteilt hast, werden ebenfalls gelöscht. + Du wirst keine Storys mehr teilen oder sehen können. Story-Updates, die du kürzlich geteilt hast, werden ebenfalls gelöscht. Story-Datenschutz @@ -5885,7 +5938,7 @@ Lesebestätigungen ansehen - Sehen und teilen, wann Storys angesehen wurden. Falls diese Funktion deaktiviert ist, wird nicht angezeigt, wenn andere deine Story sehen. + Sehen und teilen, wenn Storys angesehen wurden. Falls diese Funktion deaktiviert ist, wirst du nicht sehen, wenn andere deine Story sehen. Neue Story @@ -5937,9 +5990,9 @@ Eine Spende ist noch ausstehend - Die Verarbeitung von Banküberweisungen dauert in der Regel einen Werktag. Bitte warte, bis diese Zahlung abgeschlossen ist, bevor du deine regelmäßige Spende aktualisierst. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Die Verarbeitung von Banküberweisungen dauert in der Regel einen Werktag. Bitte warte, bis diese Zahlung abgeschlossen ist, bevor du eine weitere Spende vornimmst. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Deine Spende wird immer noch bearbeitet. Das kann abhängig von deiner Verbindung ein paar Minuten dauern. Bitte warte, bis diese Zahlung abgeschlossen ist, bevor du deine regelmäßige Spende aktualisierst. @@ -6091,7 +6144,7 @@ Deine einmalige Spende steht noch aus. Sobald deine Spende eingegangen ist, kannst du das %1$s-Abzeichen in deinem Profil anzeigen. - Die Verarbeitung von Banküberweisungen dauert in der Regel einen Werktag. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Mehr erfahren @@ -6204,7 +6257,7 @@ Durchgestrichen - Nichtproportionale Schriftart + Monospace Spoiler @@ -6236,7 +6289,7 @@ Verpasst - Entgangen bei aktiviertem Benachrichtigungsprofil + Verpasst bei aktiviertem Benachrichtigungsprofil Beitreten @@ -6283,7 +6336,7 @@ Anrufverlauf leeren - Entgangene Anrufe filtern + Verpasste Anrufe filtern Filter entfernen @@ -6293,7 +6346,7 @@ Neuen Anruf starten - Gefiltert nach Entgangen + Verpasste Anrufe gefiltert Alle auswählen @@ -6310,9 +6363,9 @@ Keine Anrufe. - Leg los und rufe eine Freundin oder einen Freund an. + Leg los und rufe einen Kontakt an. - Die von dir erstellten Anruf-Links werden für alle, die sie erhalten haben, nicht mehr funktionieren. + Die von dir erstellten Anruflinks werden für alle, die sie erhalten haben, nicht mehr funktionieren. @@ -6343,9 +6396,9 @@ Gruppenanruf - Entgangener Gruppenanruf + Verpasster Gruppenanruf - Entgangener Gruppenanruf bei aktiviertem Benachrichtigungsprofil + Verpasster Gruppenanruf bei aktiviertem Benachrichtigungsprofil Eingehender Gruppenanruf @@ -6432,6 +6485,8 @@ Anruf-Details + + Anrufnamen bearbeiten Anrufnamen hinzufügen @@ -6439,7 +6494,7 @@ Link teilen - Anruf-Link löschen + Anruflink löschen Die Änderungen konnten nicht gespeichert werden. Überprüfe deine Netzverbindung und versuche es erneut. @@ -6499,6 +6554,10 @@ Dein QR-Code und dein Link wurden zurückgesetzt. Ein neuer QR-Code und ein neuer Link wurden erstellt. Scanne diesen QR-Code mit deinem Smartphone, um mit mir auf Signal zu chatten. + + QR code not found + + Try scanning another image containing a Signal QR code. Mit diesem Link können andere deinen Nutzernamen sehen und einen Chat mit dir beginnen. Teile den Link nur mit Leuten, denen du vertraust. @@ -6590,6 +6649,10 @@ %1$s ist kein Signal-Nutzer. Möchtest du diese Nummer einladen? Einladen + + QR-Code einscannen + + Ein Netzfehler ist aufgetreten. Bitte versuche es später erneut. diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 13f8b0fc7b..f485f6f2bc 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -426,6 +426,8 @@ Η ανταλλαγή μηνυμάτων SMS δεν υποστηρίζεται πλέον στο Signal. Η ανταλλαγή μηνυμάτων SMS δεν υποστηρίζεται πλέον στο Signal. Προσκάλεσε τον χρήστη %1$s στο Signal για να κρατήσεις εδώ τη συνομιλία. + + Αυτό το άτομο δεν χρησιμοποιεί πλέον το Molly. Προσκάλεσέ το στο Molly για να κρατήσεις εδώ τη συνομιλία. Πρόσκληση στο Molly @@ -536,7 +538,7 @@ Έγινε αναφορά ως ανεπιθύμητο - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Το Signal έχει ειδοποιηθεί ότι αυτό το άτομο ενδέχεται να στέλνει spam. Το Signal δεν μπορεί να δει το περιεχόμενο οποιασδήποτε συνομιλίας. Έγινε αναφορά ως ανεπιθύμητο @@ -557,7 +559,7 @@ Απάτες κρυπτονομισμάτων ή χρημάτων - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Αν κάποιος που δεν γνωρίζεις στείλει μηνύματα σχετικά με κρυπτονόμισμα (όπως Bitcoin) ή μια οικονομική ευκαιρία, πρόσεξε—είναι πιθανό να πρόκειται για spam. Ασαφή ή άσχετα μηνύματα @@ -818,7 +820,7 @@ Εμφάνιση - Μόνιμη αποτυχία επικοινωνίας του Signal! + Μόνιμη αποτυχία επικοινωνίας του Molly! Το Molly δεν μπόρεσε να εγγραφτεί στις Υπηρεσίες Google Play. Τα μηνύματα και οι κλήσεις του Molly έχουν απενεργοποιηθεί. Παρακαλώ προσπάθησε να επανεγγραφτείς στις Ρυθμίσεις > Προχωρημένες Ρυθμίσεις. @@ -1386,6 +1388,8 @@ Ο/Η %1$s άλλαξε το όνομα προφίλ του/της σε %2$s. Ο/Η %1$s άλλαξε το όνομα προφίλ του/της από %2$s σε %3$s. Ο/Η %1$s άλλαξε το προφίλ του/της. + + Ξεκίνησες αυτή τη συνομιλία με τον χρήστη %1$s. Δημιούργησες την ομάδα. @@ -1861,8 +1865,10 @@ Αποσυνδέθηκε Σύνδεσμος κλήσης Signal - - Όποιος συμμετέχει στην κλήση μέσω του συνδέσμου θα μπορεί να δει το όνομα, τη φωτογραφία και τον αριθμό τηλεφώνου σου. + + Όποιος συμμετέχει στην κλήση μέσω του συνδέσμου θα μπορεί να δει το όνομα, τη φωτογραφία και τον αριθμό τηλεφώνου σου. + + Όποιος συμμετέχει στην κλήση μέσω του συνδέσμου θα μπορεί να δει το όνομα και τη φωτογραφία σου. Σε αναμονή για προσθήκη… @@ -2296,7 +2302,7 @@ Το όνομα χρήστη αφαιρέθηκε με επιτυχία. Υπήρξε σφάλμα δικτύου. - Too many attempts made, please try again later. + Προσπάθησες πάρα πολλές φορές. Δοκίμασε ξανά αργότερα. Αυτό το όνομα χρήστη χρησιμοποιείται ήδη. Τα ονόματα χρήστη μπορούν να περιέχουν μόνο λατινικούς χαρακτήρες a-Z, αριθμούς 0-9 και κάτω παύλες. Τα ονόματα χρήστη δεν μπορούν να αρχίζουν με αριθμό @@ -2320,7 +2326,7 @@ Αυτός ο αριθμός δεν μπορεί να είναι 00. Γράψε ένα ψηφίο μεταξύ 1–9 - Numbers with more than 2 digits can\'t start with 0 + Οι αριθμοί με περισσότερα από 2 ψηφία δεν μπορούν να αρχίζουν με 0 Η ανάκτηση του ονόματος χρήστη θα επαναφέρει τον υπάρχοντα κωδικό QR και τον σύνδεσμό σου. Σίγουρα; @@ -3894,6 +3900,12 @@ Κανείς δεν θα μπορεί να δει ότι είσαι στο Signal εκτός και αν στείλεις μήνυμα ή δεν έχεις ήδη μια συνομιλία μαζί του. "Για να αλλάξεις αυτή τη ρύθμιση, όρισε την επιλογή \"Ποιος μπορεί να δει τον αριθμό μου\" σε \"Κανείς\"." + + Σίγουρα; + + Η ρύθμιση «Ποιοι μπορούν να με βρουν με τον αριθμό μου» σε «Κανείς» θα καταστήσει δυσκολότερο για τους χρήστες να σε βρουν στο Signal. + + Ακύρωση Όλοι Κανένας Κλείδωμα οθόνης @@ -4391,11 +4403,16 @@ Περιγραφή ομάδας + Κανονική + Γρηγορότερα, λιγότερα δεδομένα + Υψηλή + Πιο αργά, περισσότερα δεδομένα - Ποιότητα φωτογραφίας + + Ποιότητα πολυμέσων Προσκάλεσε τους φίλους σου @@ -4871,6 +4888,28 @@ Ένα ή περισσότερα αντικείμενα ήταν πολύ μεγάλα Ένα ή περισσότερα αντικείμενα δεν ήταν έγκυρα Επιλέχθηκαν πάρα πολλά αντικείμενα + + Ρύθμιση βίντεο σε μια μόνο προβολή + + Ρύθμιση φωτογραφίας σε μια μόνο προβολή + + Ρύθμιση βίντεο σε υψηλή ποιότητα + + Ρύθμιση βίντεο σε τυπική ποιότητα + + Ρύθμιση φωτογραφίας σε υψηλή ποιότητα + + Ρύθμιση φωτογραφίας σε τυπική ποιότητα + + + Ρύθμιση %1$d αντικειμένου σε υψηλή ποιότητα + Ρύθμιση %1$d αντικειμένων σε υψηλή ποιότητα + + + + Ρύθμιση %1$d αντικειμένου σε τυπική ποιότητα + Ρύθμιση %1$d αντικειμένων σε τυπική ποιότητα + Ακύρωση Σχεδίαση @@ -4895,6 +4934,20 @@ Απόρριψη αλλαγών; Θα χάσεις όλες τις αλλαγές που έχεις κάνει σε αυτή τη φωτογραφία. + + Βρέθηκε ο χρήστης %1$s + + Ξεκίνα μια συνομιλία με τον χρήστη «%1$s» + + Μετάβαση στη συνομιλία + + + Σύνδεση συσκευής; + + Φαίνεται πως προσπαθείς να συνδέσεις μια συσκευή Signal. Πάτησε «Συνέχεια» και σκάναρε ξανά τον κωδικό για να την συνδέσεις. + + Συνέχεια + Τα σήματά μου Βασικό σήμα @@ -4993,7 +5046,7 @@ Η πληρωμή εκκρεμεί - Η τραπεζική μεταφορά %1$s εκκρεμεί. Οι τραπεζικές μεταφορές συνήθως χρειάζονται 1 εργάσιμη ημέρα για να ολοκληρωθούν. + Η τραπεζική μεταφορά %1$s εκκρεμεί. Οι τραπεζικές μεταφορές χρειάζονται 1 με 14 εργάσιμες ημέρες για να ολοκληρωθούν. Μάθε περισσότερα @@ -5937,9 +5990,9 @@ Μια δωρεά σου εκκρεμεί - Οι τραπεζικές μεταφορές συνήθως χρειάζονται 1 εργάσιμη ημέρα για να διεκπεραιωθούν. Περίμενε μέχρι να ολοκληρωθεί αυτή η πληρωμή προτού ενημερώσεις τη συνδρομή σου. + Οι τραπεζικές μεταφορές χρειάζονται 1 με 14 εργάσιμες ημέρες για να διεκπεραιωθούν. Περίμενε μέχρι να ολοκληρωθεί αυτή η πληρωμή προτού ενημερώσεις τη συνδρομή σου. - Οι τραπεζικές μεταφορές συνήθως χρειάζονται 1 εργάσιμη ημέρα για να διεκπεραιωθούν. Περίμενε μέχρι να ολοκληρωθεί αυτή η πληρωμή προτού κάνεις άλλη δωρεά. + Οι τραπεζικές μεταφορές χρειάζονται 1 με 14 εργάσιμες ημέρες για να διεκπεραιωθούν. Περίμενε μέχρι να ολοκληρωθεί αυτή η πληρωμή προτού κάνεις άλλη δωρεά. Η δωρεά σου είναι ακόμη σε επεξεργασία. Μπορεί να διαρκέσει μερικά λεπτά, ανάλογα με τη σύνδεσή σου. Περίμενε μέχρι να ολοκληρωθεί αυτή η πληρωμή προτού ενημερώσεις τη συνδρομή σου. @@ -6091,7 +6144,7 @@ Η μεμονωμένη δωρεά σου εκκρεμεί. Θα μπορείς να εμφανίσεις το σήμα %1$s στο προφίλ σου όταν λάβουμε τη δωρεά σου. - Οι τραπεζικές μεταφορές συνήθως χρειάζονται 1 εργάσιμη ημέρα για να διεκπεραιωθούν. %1$s + Οι τραπεζικές μεταφορές χρειάζονται 1 με 14 εργάσιμες ημέρες για να διεκπεραιωθούν. %1$s Μάθε περισσότερα @@ -6432,6 +6485,8 @@ Λεπτομέρειες κλήσης + + Επεξεργασία ονόματος κλήσης Προσθήκη ονόματος κλήσης @@ -6499,6 +6554,10 @@ Έχει γίνει επαναφορά του κωδικού QR και του συνδέσμου σου και έχει δημιουργηθεί ένας νέος κωδικός QR και ένας νέος σύνδεσμος. Σάρωσε αυτόν τον κωδικό QR με το τηλέφωνό σου για να συνομιλήσεις μαζί μου στο Signal. + + Ο κωδικός QR δεν βρέθηκε + + Δοκίμασε να σαρώσεις μια άλλη εικόνα που περιέχει έναν κωδικό QR Signal. Με αυτόν τον σύνδεσμο, οποιοδήποτε άτομο μπορεί να δει το όνομα χρήστη σου και να ξεκινήσει μια συνομιλία μαζί σου. Μοιράσου τον μόνο με άτομα που εμπιστεύεσαι. @@ -6590,6 +6649,10 @@ Το άτομο %1$s δεν χρησιμοποιεί το Signal. Θέλεις να καλέσεις αυτόν τον αριθμό; Πρόσκληση + + Σκανάρισμα κωδικού QR + + Υπήρξε σφάλμα δικτύου. Δοκίμασε ξανά αργότερα. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 578e596ebe..b98ee393a5 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -426,6 +426,8 @@ Los mensajes SMS ya no son compatibles con Signal. Los mensajes SMS ya no son compatibles con Signal. Invita a %1$s a Signal para mantener aquí tu conversación. + + Esta persona ya no usa Molly. Invítala a Molly para seguir charlando aquí. Invitar a Molly @@ -536,7 +538,7 @@ Spam denunciado - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ha sido notificado de que esta persona puede estar enviando spam. Signal no puede ver el contenido de ningún chat. Denunciado como spam @@ -557,7 +559,7 @@ Estafas de criptomonedas o dinero - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Si alguien a quién no conoces te envía mensajes sobre criptomonedas (como Bitcoin) o con una oportunidad financiera: ten cuidado, es probable que se trate de spam. Mensajes confusos o irrelevantes @@ -818,7 +820,7 @@ Ver - ¡Fallo permanente de comunicación de Signal! + ¡Fallo permanente de comunicación de Molly! Molly fué incapaz de registrarse con Google Play Services. Los mensajes y llamadas de Molly han sido desactivados, por favor, intenta registrarte otra vez en Configuración > Avanzado. @@ -1386,6 +1388,8 @@ %1$s ha cambiado su nombre de perfil a %2$s. %1$s ha cambiado su nombre de perfil de %2$s a %3$s. %1$s ha cambiado su nombre. + + Iniciaste este chat con %1$s. Has creado el grupo. @@ -1861,8 +1865,10 @@ Desconectada Enlace de llamada de Signal - - Cualquier persona que se una a esta llamada a través del enlace podrá ver tu nombre, foto y número de teléfono. + + Cualquier persona que se una a esta llamada a través del enlace podrá ver tu nombre, foto y número de teléfono. + + Cualquier persona que se una a esta llamada a través del enlace podrá ver tu nombre y tu foto. Esperando para entrar… @@ -2296,7 +2302,7 @@ Alias eliminado con éxito. Fallo en la conexión de red. - Too many attempts made, please try again later. + Se han realizado demasiados intentos; inténtalo de nuevo más tarde. Alias en uso por otra persona. Tu alias solo puede contener a–Z, 0–9 y _. El alias no puede comenzar por un número. @@ -2320,7 +2326,7 @@ Este número no puede ser 00. Introduce un dígito del 1 al 9 - Numbers with more than 2 digits can\'t start with 0 + Los números con más de 2 dígitos no pueden comenzar con 0 Recuperar tu alias restablecerá tu código QR y tu enlace. ¿Seguro que quieres hacer esto? ¿Seguro que quieres hacer esto? @@ -3894,6 +3900,12 @@ Nadie podrá ver que estás en Signal a menos que les envíes un mensaje o tengas un chat abierto con ellxs. "Para cambiar esto, selecciona Nadie en el ajuste Quién puede ver mi número." + + ¿Seguro que quieres hacer esto? + + Si configuras el ajuste \"¿Quién puede encontrarme a través de mi número?\" a \"Nadie\" será más difícil que la gente pueda encontrarte en Signal. + + Cancelar Cualquiera Nadie Bloqueo de pantalla @@ -4391,11 +4403,16 @@ Descripción del grupo + Normal + Rápida, menos datos + Alta + Lenta, más datos - Calidad de la foto + + Calidad de fotos y vídeos ¡Invita a tus amistades! @@ -4871,6 +4888,28 @@ Uno o más elementos son demasiado grandes Uno o más elementos no son válidos Demasiados elementos seleccionados + + Vídeo configurado para ver solo una vez + + Foto configurada para ver solo una vez + + Vídeo configurado en alta calidad + + Vídeo configurado en calidad estándar + + Foto configurada en alta calidad + + Foto configurada en calidad estándar + + + %1$d artículo configurado en alta calidad + %1$d artículos configurados en alta calidad + + + + %1$d artículo configurado en calidad estándar + %1$d artículos configurados en calidad estándar + Cancelar Dibujar @@ -4895,6 +4934,20 @@ ¿Deshacer cambios? Perderás todos los cambios que has hecho a esta imagen. + + Encontramos a %1$s + + Iniciar un chat con \"%1$s\" + + Ir al chat + + + ¿Enlazar dispositivo? + + Parece que estás intentando enlazar un dispositivo Signal. Pulsa continuar y vuelve a escanear el código para enlazarlo. + + Continuar + Mis insignias Insignia a mostrar @@ -4993,7 +5046,7 @@ Pago pendiente - Tu transferencia bancaria de %1$s está pendiente. Las transferencias bancarias suelen tardar 1 día hábil en completarse. + Tu transferencia bancaria de %1$s está pendiente. Las transferencias bancarias pueden tardar 14 días hábiles en completarse. Saber más @@ -5937,9 +5990,9 @@ Tienes una donación pendiente - Las transferencias bancarias suelen tardar 1 día hábil en procesarse. Por favor, espera hasta que se complete este pago antes de actualizar tu suscripción. + Las transferencias bancarias pueden tardar 14 días hábiles en completarse. Por favor, espera hasta que se complete este pago antes de actualizar tu suscripción. - Las transferencias bancarias suelen tardar 1 día hábil en procesarse. Por favor, espera hasta que se complete este pago antes de realizar otra donación. + Las transferencias bancarias pueden tardar 14 días hábiles en completarse. Por favor, espera hasta que se complete este pago antes de realizar otra donación. Todavía se está procesando tu donación. Puede tomar unos minutos dependiendo de tu conexión. Por favor, espera hasta que se complete este pago antes de actualizar tu suscripción. @@ -6091,7 +6144,7 @@ Tu donación única está pendiente. Podrás mostrar la insignia %1$s en tu perfil cuando recibamos tu donación. - Las transferencias bancarias suelen tardar 1 día hábil en procesarse. %1$s + Las transferencias bancarias pueden tardar 14 días hábiles en completarse. %1$s Saber más @@ -6432,6 +6485,8 @@ Detalles de la llamada + + Editar nombre de llamada Añadir nombre de llamada @@ -6499,6 +6554,10 @@ Tu código QR y tu enlace se han restablecido, y se han creado un código QR y enlace nuevos. Escanea este código QR con tu teléfono para chatear conmigo en Signal. + + Código QR no encontrado + + Intenta escanear otra imagen que contenga un código QR de Signal. Cualquiera que tenga este enlace puede ver tu alias y empezar un chat contigo. Compártelo solo con personas de confianza. @@ -6590,6 +6649,10 @@ %1$s no usa Signal. ¿Deseas invitar este número a usar Signal? Invitar + + Escanear código QR + + Fallo en la conexión de red. Inténtalo más tarde. diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index 58bfd53f7a..051ae2064b 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -426,6 +426,8 @@ Signal ei toeta enam SMS-sõnumeid. Signal ei toeta enam SMS-sõnumeid. Kutsu %1$s Signalisse ja jätkake vestlust siin. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Kutsu Mollyisse @@ -536,7 +538,7 @@ Rämpspostist teatatud - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signalit on teavitatud, et see isik võib olla rämpsposti edastaja. Signal ei näe ühegi vestluse sisu. Rämpspostist teatatud @@ -557,7 +559,7 @@ Krüpto- või rahapettused - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Kui keegi, keda sa ei tunne, kirjutab sulle krüptoraha (nt Bitcoini) kohta või pakub võimalust raha teenimiseks, ole ettevaatlik – tõenäoliselt on tegemist rämpspostiga. Ebamäärased või juhuslikud sõnumid @@ -818,7 +820,7 @@ Näita - Püsiv Signali ühendusviga! + Püsiv Mollyi ühendusviga! Molly ei saanud registreerida teenusega Google Play Services. Mollyi sõnumid ja kõned on keelatud, palun proovi taas-registreerida menüüs Seaded > Täpsem. @@ -1386,6 +1388,8 @@ %1$s muutis enda profiilinimeks %2$s. %1$s muutis enda profiilinime %2$s -> %3$s. %1$s muutis enda profiili. + + You started this chat with %1$s. Sa lõid uue grupi. @@ -1861,8 +1865,10 @@ Ühendus katkestatud Signali kõne link - - Kõik, kes selle kõnega lingi kaudu liituvad, näevad sinu nime, fotot ja telefoninumbrit. + + Kõik, kes selle kõnega lingi kaudu liituvad, näevad sinu nime, fotot ja telefoninumbrit. + + Kõik, kes selle kõnega lingi kaudu liituvad, näevad sinu nime ja fotot. Sisselaskmise ootel … @@ -2296,7 +2302,7 @@ Kasutajanimi edukalt eemaldatud. Esines võrgutõrge. - Too many attempts made, please try again later. + Liiga palju katseid, palun proovi hiljem uuesti. See kasutajanimi on võetud. Kasutajanimed võivad sisaldada ainult a–Z, 0–9 ja alakriipse. Kasutajanimed ei tohi alata numbriga. @@ -2320,7 +2326,7 @@ See number ei saa olla 00. Sisesta number vahemikus 1–9 - Numbers with more than 2 digits can\'t start with 0 + Rohkem kui kaht numbrit sisaldavad kombinatsioonid ei saa alata 0-ga Kasutajanime taastades lähtestad olemasoleva QR-koodi ja lingi. Kas oled kindel? @@ -3894,6 +3900,12 @@ Mitte keegi ei näe, et sa oled Signalis, kui sa neile sõnumit ei saada või sul nendega juba vestlust pooleli ei ole. "Selle sätte muutmiseks vali „Kes mu numbrit näevad“ alt „Mitte keegi“." + + Kas oled kindel? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Loobu Igaüks Mitte keegi Ekraanilukk @@ -4391,11 +4403,16 @@ Grupi kirjeldus + Standardne + Kiirem, vähem andmeid + Kõrge + Aeglasem, rohkem andmeid - Foto kvaliteet + + Meedia kvaliteet Kutsu enda sõbrad @@ -4871,6 +4888,28 @@ Üks või mitu üksust olid liiga suured Üks või mitu üksust olid kehtetud Liiga palju elemente valitud + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Loobu Joonista @@ -4895,6 +4934,20 @@ Kas loobuda muudatustest? Sa kaotad kõik sellele fotole tehtud muudatused + + Found %1$s + + Start a chat with \"%1$s\" + + Mine vestlusse + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Jätka + Minu märgid Esiletõstetud märk @@ -4993,7 +5046,7 @@ Makse on ootel - Sinu pangaülekanne summas %1$s on ootel. Pangaülekannete töötlemiseks kulub enamasti 1 tööpäev. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Rohkem teavet @@ -5937,9 +5990,9 @@ Sul on annetus ootel - Pangaülekannete töötlemiseks kulub enamasti 1 tööpäev. Enne kui tellimust uuendad, oota palun, et see makse lõpuni jõuaks. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Pangaülekannete töötlemiseks kulub enamasti 1 tööpäev. Enne kui teed uue annetuse, oota palun, et see makse lõpuni jõuaks. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Sinu annetus on endiselt töötlemisel. Selleks võib olenevalt sinu ühendusest kuluda mõni minut. Enne kui tellimust uuendad, oota palun, et see makse lõpuni jõuaks. @@ -6091,7 +6144,7 @@ Sinu ühekordne annetus on ootel. Kui su annetus kohale jõuab, saad oma profiilil kuvada järgmist märki: %1$s. - Pangaülekannete töötlemiseks kulub enamasti 1 tööpäev. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Rohkem teavet @@ -6432,6 +6485,8 @@ Kõne andmed + + Muuda kõne nime Lisa kõne nimi @@ -6499,6 +6554,10 @@ Sinu QR-kood ja link on lähtestatud ja uus QR-kood ja link on loodud. Skanni oma telefoniga see QR-kood, et minuga Signalis vestelda. + + QR code not found + + Try scanning another image containing a Signal QR code. Igaüks, kellel on see link, saab vaadata sinu kasutajanime ja saab sinuga vestlust alustada. Jaga seda ainult inimestega, keda usaldad. @@ -6590,6 +6649,10 @@ %1$s ei ole Signali kasutaja. Kas tahaksid seda numbrit liituma kutsuda? Kutsu + + Skanni QR-kood + + Esines võrgutõrge. Proovi hiljem uuesti. diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 25bfec9778..b85152534c 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -426,6 +426,8 @@ Signal-en jada ez dira onartzen SMS mezuak. Signal-en jada ez dira onartzen SMS mezuak. %1$s(r)ekin duzun elkarrizketa mantentzeko, gonbida ezazu Signal-era. + + Pertsona honek jada ez du Molly erabiltzen. Harekin duzun elkarrizketa mantentzeko, gonbida ezazu Molly-era. Gonbidatu Molly erabiltzera @@ -536,7 +538,7 @@ Spama dela salatu da - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Pertsona hau spama bidaltzen ari omen dela jakinarazi zaio Signal-i. Signal-ek ezin du ikusi txatetako edukia. Spama dela salatu da @@ -557,7 +559,7 @@ Kriptodiru- edo diru-iruzurrak - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ezagutzen ez duzun norbaitek kriptodiruari buruzko mezuak bidaltzen badizkizu (adibidez, Bitcoin-i buruzkoak), edo finantza-aukera bat duzula esaten badizu, erne ibili, seguruenik spama baita. Mezu lauso edo hutsalak @@ -818,7 +820,7 @@ Ikusi - Signal behin betiko komunikazio hutsegitea! + Molly behin betiko komunikazio hutsegitea! Molly ez da gai izan Google Play Zerbitzuekin erregistratzeko. Molly mezu eta deiak desgaitu egin dira; mesedez, saiatu bererregistratzen Ezarpenak > Aurreratua menuan. @@ -1386,6 +1388,8 @@ %1$s erabiltzaileak bere profileko izena aldatu du. Orain %2$s da. %1$s erabiltzaileak bere profileko izena aldatu du. Lehen %2$s zen eta orain %3$s da. %1$s erabiltzaileak bere profila aldatu du. + + %1$s erabiltzailearekiko txat hau hasi duzu. Taldea sortu duzu. @@ -1861,8 +1865,10 @@ Deskonektatuta Signal deiaren esteka - - Esteka bidez dei honetan sartzen den edonork zure izena, argazkia eta telefono-zenbakia ikusiko ditu. + + Esteka bidez dei honetan sartzen den edonork zure izena, argazkia eta telefono-zenbakia ikusiko ditu. + + Estekaren bidez sartzen direnek zure izena eta argazkia ikusi ahalko dituzte. Sartzen uzteko zain… @@ -2296,7 +2302,7 @@ Kendu da erabiltzaile-izena. Sare errore bat izan da. - Too many attempts made, please try again later. + Saiakera gehiegi egin dira; saiatu berriro geroago. Erabiltzaile-izen hau hartuta dago. Erabiltzaile-izenetan bakarrik ondokoak daude onartuta: a-Z, 0-9 eta azpimarrak. Erabiltzaile-izenak ezin dira zenbaki batez hasi. @@ -2320,7 +2326,7 @@ Zenbaki hau ezin da 00 izan. Idatzi 1 eta 9 arteko digitu bat - Numbers with more than 2 digits can\'t start with 0 + 2 digitu baino gehiagoko zenbakiak ezin dira hasi 0rekin Erabiltzaile-izena berreskuratzen baduzu, lehendik dauden QR kodea eta esteka berrezarri egingo dira. Ziur zaude? @@ -3894,6 +3900,12 @@ Ezingo du inork ikusi Signal-en zaudela, salbu eta mezuak bidaltzen badituzu edo lehendik txaten bat baduzu norbaitekin. "Ezarpen hori aldatzeko, joan \"Nork ikus dezake nire zenbakia?\" atalera eta aukeratu \"Inork ez\"." + + Ziur zaude? + + \"Nork aurki nazake zenbakia erabiliz?\" ezarpenean \"Inork ez\" aukeratuz gero, jendearentzat zailagoa izango da zu Signal-en aurkitzea. + + Utzi Guztiak Inor ez Blokeo-pantaila @@ -4391,11 +4403,16 @@ Taldearen deskribapena + Estandarra + Azkarrago, datu gutxiago + Altua + Mantsoago, datu gehiago - Argazki kalitatea + + Media kalitatea Gonbidatu zure lagunak @@ -4871,6 +4888,28 @@ Elementu bat edo gehiago handiegiak dira Elementu bat edo gehiago handiegiak dira Elementu gehiegi hautatu dira + + Bideoa behin bakarrik ikus daitekeela ezarri da + + Argazkia behin bakarrik ikus daitekeela ezarri da + + Bideoaren kalitatea handi gisa ezarri da + + Bideoaren kalitatea estandar gisa ezarri da + + Argazkiaren kalitatea handi gisa ezarri da + + Argazkiaren kalitatea estandar gisa ezarri da + + + %1$d elementuren kalitatea handi gisa ezarri da + %1$d elementuren kalitatea handi gisa ezarri da + + + + %1$d elementuren kalitatea estandar gisa ezarri da + %1$d elementuren kalitatea estandar gisa ezarri da + Utzi Marraztu @@ -4895,6 +4934,20 @@ Aldaketak baztertu? Argazki honetan egin dituzun aldaketak galduko dituzu. + + %1$s aurkitu da + + Hasi txateatzen \"%1$s\" erabiltzailearekin + + Joan txatera + + + Gailua lotu nahi duzu? + + Signal-eko gailu bat lotu nahian zabiltzala dirudi. Horretarako, sakatu aurrera egiteko botoia eta eskaneatu kodea berriro. + + Jarraitu + Nire bereizgarriak Nabarmendutako bereizgarria @@ -4993,7 +5046,7 @@ Ordainketa zain - Zure %1$s banku-transferentzia zain dago. Banku-transferentziak burutzeko lanegun bat behar izaten da. + Zure banku-transferentzia (%1$s) zain dago. Banku-transferentziek 1-14 lanegun behar izaten dituzte osatzeko. Informazio gehiago @@ -5937,9 +5990,9 @@ Dohaintza bat zain duzu - Banku-transferentziak prozesatzeko lanegun bat behar izaten da. Harpidetza eguneratu aurretik, itxaron ordainketa hau osatu arte. + Banku-transferentziek 1-14 egun behar izaten dituzte prozesatzeko. Harpidetza eguneratu aurretik, itxaron ordainketa hau osatu arte. - Banku-transferentziak prozesatzeko lanegun bat behar izaten da. Beste dohaintza bat egin aurretik, itxaron ordainketa hau osatu arte. + Banku-transferentziek 1-14 egun behar izaten dituzte prozesatzeko. Beste dohaintza bat egin aurretik, itxaron ordainketa hau osatu arte. Dohaintza prozesatzen ari da oraindik. Zure konexioaren arabera, baliteke minutu batzuk behar izatea. Harpidetza eguneratu aurretik, itxaron ordainketa hau osatu arte. @@ -6091,7 +6144,7 @@ Zure behin-behineko dohaintza zain dago. Dohaintza jasotzen duzunean %1$s bereizgarria erakutsi ahal izango duzu zure profilean. - Banku-transferentziak prozesatzeko lanegun bat behar izaten da. %1$s + Banku-transferentziek 1-14 egun behar izaten dituzte prozesatzeko. %1$s Informazio gehiago @@ -6432,6 +6485,8 @@ Deiaren xehetasunak + + Editatu deiaren izena Gehitu deiaren izena @@ -6499,6 +6554,10 @@ QR kodea eta esteka berrezarri egin dira, eta QR kode eta esteka berriak sortu. Signal-en nirekin txateatzeko, eskaneatu QR kode hau telefonoarekin. + + Ez da aurkitu QR kodea + + Saiatu Signal-eko QR kode bat duen beste irudi bat eskaneatzen. Esteka hau duen edonork ikusi ahalko du zure erabiltzaile-izena, eta zurekin txateatzen hasi ahalko da. Parteka ezazu jende fidagarriarekin bakarrik. @@ -6590,6 +6649,10 @@ %1$s ez da Signal-en erabiltzailea. Zenbaki hori gonbidatu nahi duzu? Gonbidatu + + QR kodea eskaneatu + + Sare errore bat izan da. Saia zaitez beranduago. diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 2e08374a7b..b200ede56f 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -426,6 +426,8 @@ پیامک دیگر در سیگنال پشتیبانی نمی‌شود. پیامک دیگر در سیگنال پشتیبانی نمی‌شود. برای ادامه مکالمه در اینجا، %1$s را به سیگنال دعوت کنید. + + این شخص دیگر از سیگنال استفاده نمی‌کند. برای ادامۀ مکالمه در اینجا، او را به سیگنال دعوت کنید. دعوت به سیگنال @@ -536,7 +538,7 @@ به‌عنوان هرزنامه گزارش شد - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + سیگنال مطلع شده است که این فرد ممکن است در حال ارسال هرزنامه باشد. سیگنال نمی‌تواند محتوای هیچ گفتگویی را ببیند. به‌عنوان هرزنامه گزارش شد @@ -557,7 +559,7 @@ کلاه‌برداری‌های پولی یا رمزارز - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + اگر فرد ناشناسی دربارۀ رمزارز (مثل بیت‌کوین) یا فرصتی مالی به شما پیام داد، مراقب باشید—احتمالاً هرزنامه است. پیام‌های مبهم یا نامرتبط @@ -1386,6 +1388,8 @@ %1$s نام نمایه خود را به %2$s تغییر داد. %1$s نام نمایه خود را از %2$s به %3$s تغییر داد. %1$s پروفایل خود را تغییر داد. + + این گفتگو را با %1$s شروع کردید. شما گروه را ایجاد کردید. @@ -1861,8 +1865,10 @@ ارتباط قطع شد پیوند تماس سیگنال - - هر کسی که از طریق پیوند به این تماس بپیوندد، قادر به دیدن نام، عکس و شماره تلفن شما خواهد بود. + + هر کسی که از طریق پیوند به این تماس بپیوندد، قادر به دیدن نام، عکس و شماره تلفن شما خواهد بود. + + هر کسی که از طریق لینک به این تماس بپیوندد، قادر به دیدن نام و عکس شما خواهد بود. در انتظار اجازه ورود… @@ -2296,7 +2302,7 @@ نام کاربری با موفقیت حذف شد. خطای شبکه رخ داد. - Too many attempts made, please try again later. + تعداد تلاش‌های ناموفق بیش از حد مجاز بود؛ لطفاً بعداً دوباره امتحان کنید. این نام کاربری گرفته شده است. نام‌های کاربری فقط می‌توانند حاوی حروف A تا Z، اعداد ۰ تا ۹ و _ باشند. نام‌های کاربری نمی‌توانند با عدد آغاز شوند. @@ -2320,7 +2326,7 @@ این عدد نمی‌تواند ۰۰ باشد. رقمی بین ۱ تا ۹ انتخاب کنید - Numbers with more than 2 digits can\'t start with 0 + اعداد دارای بیش از ۲ رقم نمی‌توانند با ۰ شروع شوند بازیابی نام کاربری‌تان موجب بازنشانی پیوند و کد QR فعلی شما می‌شود. مطمئن هستید؟ @@ -3894,6 +3900,12 @@ هیچ‌کسی قادر به مشاهدۀ آنلاین بودن شما در سیگنال نیست، مگر اینکه به کسی پیام دهید یا گفتگویی فعلی با او داشته باشید. "برای تغییر این تنظیمات، «چه‌کسی می‌تواند شمارۀ من را ببیند» را روی «هیچ‌کس» تنظیم کنید." + + مطمئن هستید؟ + + تنظیم «چه‌کسی می‌تواند من را با شماره تلفنم پیدا کند» روی «هیچ‌کس»، پیدا کردن شما در سیگنال را برای دیگران دشوارتر می‌کند. + + لغو همه هیچ‌کس قفل صفحه @@ -4391,11 +4403,16 @@ توضیحات گروه + استاندارد + سریع‌تر، دادهٔ کمتر + عالی + آهسته‌تر، دادهٔ بیشتر - کیفیت عکس + + کیفیت رسانه دوستان خود را دعوت کنید @@ -4871,6 +4888,28 @@ یک یا چند مورد بسیار بزرگ بودند یک یا چند مورد نامعتبر بودند موارد بسیار زیادی انتخاب شده است + + ویدیو روی یک بار مصرف تنظیم شد + + عکس روی یک بار مصرف تنظیم شد + + ویدیو روی کیفیت بالا تنظیم شد + + ویدیو روی کیفیت استاندارد تنظیم شد + + عکس روی کیفیت بالا تنظیم شد + + عکس روی کیفیت استاندارد تنظیم شد + + + ‏%1$d مورد روی کیفیت بالا تنظیم شد + ‏%1$d مورد روی کیفیت بالا تنظیم شدند + + + + ‏%1$d مورد روی کیفیت استاندارد تنظیم شد + ‏%1$d مورد روی کیفیت استاندارد تنظیم شدند + لغو کشیدن @@ -4895,6 +4934,20 @@ نادیده گرفتن تغییرات شما هر تغییری که روی این عکس انجام داده‌اید را از دست خواهید داد. + + ‏%1$s پیدا شد + + شروع یک گفتگو با «%1$s» + + به گفتگو بروید + + + دستگاه متصل شود؟ + + به نظر می‌رسد می‌خواهید یک دستگاه سیگنال را متصل کنید. برای اتصال، روی ادامه ضربه بزنید و دوباره کد را اسکن کنید. + + ادامه + نشان‌های من نشان ویژه @@ -4993,7 +5046,7 @@ پرداخت در انتظار تأیید - انتقال بانکی شما به مبلغ %1$s در انتظار تأیید است. تکمیل پردازش انتقال‌های بانکی معمولاً ۱ روز کاری طول می‌کشد. + انتقال بانکی شما به مبلغ %1$s در انتظار تأیید است. تکمیل انتقال‌های بانکی ممکن است ۱ تا ۱۴ روز کاری طول بکشد. اطلاعات بیشتر @@ -5937,9 +5990,9 @@ یک کمک مالی در انتظار تأیید دارید - پردازش انتقال‌های بانکی معمولاً ۱ روز کاری طول می‌کشد. لطفاً قبل از به‌روزرسانی اشتراک خود، صبر کنید تا این پرداخت تکمیل شود. + پردازش انتقال‌های بانکی ممکن است ۱ تا ۱۴ روز کاری طول بکشد. لطفاً قبل از به‌روزرسانی اشتراک خود، صبر کنید تا این پرداخت تکمیل شود. - پردازش انتقال‌های بانکی معمولاً ۱ روز کاری طول می‌کشد. لطفاً قبل از اهدای کمک مالی دیگر، صبر کنید تا این پرداخت تکمیل شود. + پردازش انتقال‌های بانکی ممکن است ۱ تا ۱۴ روز کاری طول بکشد. لطفاً قبل از اهدای کمک مالی دیگر، صبر کنید تا این پرداخت تکمیل شود. اهدای مالی شما هنوز در حال پردازش است. بسته به اتصال اینترنت شما، این پردازش ممکن است چند دقیقه طول بکشد. لطفاً قبل از به‌روزرسانی اشتراک خود، صبر کنید تا این پرداخت تکمیل شود. @@ -6091,7 +6144,7 @@ کمک مالی یکباره شما در انتظار تأیید است. وقتی کمک مالی دریافت شود، می‌توانید نشان %1$s را در نمایه‌تان نمایش دهید. - پردازش انتقال‌های بانکی معمولاً ۱ روز کاری طول می‌کشد. %1$s + پردازش انتقال‌های بانکی ممکن است ۱ تا ۱۴ روز کاری طول بکشد. %1$s اطلاعات بیشتر @@ -6432,6 +6485,8 @@ جزئیات تماس + + ویرایش نام تماس افزودن نام تماس @@ -6499,6 +6554,10 @@ پیوند و کد QR شما بازنشانی شده و پیوند و کد QR جدیدتان ایجاد شده است. برای گفتگو با من در سیگنال، این کد QR را با تلفن خود اسکن کنید. + + کد QR پیدا نشد + + تصویر دیگری حاوی یک کد QR سیگنال را اسکن کنید. هر کسی که این لینک را داشته باشند می‌تواند نام کاربری شما را مشاهده کند و گفتگویی را با شما آغاز کند. آن را فقط با کسانی به اشتراک بگذارید که به آن‌ها اعتماد دارید. @@ -6590,6 +6649,10 @@ %1$s کاربر سیگنال نیست. آیا می خواهید این شماره را دعوت کنید؟ دعوت + + کد QR را اسکن کنید + + خطای شبکه رخ داد. بعداً دوباره امتحان کنید. diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 9917422e4e..b3d707aa6c 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -426,6 +426,8 @@ Signal ei enää tue tekstiviestejä. Signal ei enää tue tekstiviestejä. Kutsu %1$s Signaliin, niin voit jatkaa keskustelua täällä. + + Tämä henkilö ei enää käytä Mollyia. Kutsu hänet mukaan Mollyiin, niin voit jatkaa keskustelua täällä. Kutsu Mollyiin @@ -536,7 +538,7 @@ Ilmoitettu roskapostista - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal on saanut ilmoituksen, että tämä henkilö saattaa lähettää roskapostia. Signal ei näe keskustelujen sisältöä. Ilmoitettu roskapostista @@ -557,7 +559,7 @@ Kryptovaluutta- tai muut rahahuijaukset - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Jos sinulle tuntematon viestittää kryptovaluutoista (esim. Bitcoinista) tai taloudellisesta mahdollisuudesta, ole varovainen – viesti on todennäköisesti roskapostia. Epämääräisiä tai merkityksettömiä viestejä @@ -818,7 +820,7 @@ Näytä - Pysyvä Signal-yhteysvirhe! + Pysyvä Molly-yhteysvirhe! Molly ei voinut rekisteröityä Google Play Services -palveluun. Tästä syystä Molly-viestit ja puhelut ovat pois käytöstä. Yritä rekisteröityä uudelleen Mollyin lisäasetuksista. @@ -1386,6 +1388,8 @@ %1$s muutti profiilinsa nimeksi %2$s. %1$s muutti profiilinsa nimen %2$s nimeksi %3$s. %1$s muutti profiiliaan. + + Aloitit keskustelun henkilön %1$s kanssa. Loit ryhmän. @@ -1861,8 +1865,10 @@ Ei yhteyttä Signal-puhelun linkki - - Kuka tahansa, joka liittyy tähän puheluun linkin kautta, näkee nimesi, kuvasi ja puhelinnumerosi. + + Kuka tahansa, joka liittyy tähän puheluun linkin kautta, näkee nimesi, kuvasi ja puhelinnumerosi. + + Kuka tahansa, joka liittyy tähän puheluun linkin kautta, näkee nimesi ja kuvasi. Odotetaan sisäänpääsyä… @@ -2296,7 +2302,7 @@ Käyttäjänimen poisto onnistui. Verkkovirhe. - Too many attempts made, please try again later. + Liian monta yritystä, yritä myöhemmin uudelleen. Tämä käyttäjänimi on varattu. Käyttäjänimet voivat sisältää vain merkkejä a–z, 0–9 ja alaviivoja. Käyttäjänimi ei voi alkaa numerolla. @@ -2320,7 +2326,7 @@ Numero ei voi olla 00. Anna numero väliltä 1–9 - Numbers with more than 2 digits can\'t start with 0 + Luvut, joissa on yli 2 numeroa, eivät voi alkaa nollalla Käyttäjänimen palauttaminen palauttaa nykyisen QR-koodisi ja linkkisi oletusasetukseen. Oletko varma? @@ -3894,6 +3900,12 @@ Kukaan ei näe, että olet Signalissa, ellet lähetä heille viestiä tai keskustele heidän kanssaan. "Jos haluat muuttaa tätä asetusta, määritä Kuka näkee numeroni -asetukseksi Ei kukaan." + + Oletko varma? + + Jos määrität asetuksen ”Kuka voi löytää minut puhelinnumerolla” tilaan ”Ei kukaan”, sinua on vaikea löytää Signalissa. + + Peruuta Kaikki Ei kukaan Näytön lukitus @@ -4391,11 +4403,16 @@ Ryhmän kuvaus + Vakio + Nopeampi, vähemmän dataa + Korkea + Hitaampi, enemmän dataa - Kuvan laatu + + Median laatu Kutsu ystäviäsi @@ -4871,6 +4888,28 @@ Yksi tai useampi valinnoista olivat liian suuria Yksi tai useampi valinnoista olivat virheellisiä Liikaa valintoja + + Video asetettu katsottavaksi kerran + + Kuva asetettu katsottavaksi kerran + + Video asetettu korkealaatuiseksi + + Video asetettu vakiolaatuiseksi + + Kuva asetettu korkealaatuiseksi + + Kuva asetettu vakiolaatuiseksi + + + %1$d kohde asetettu korkealaatuiseksi + %1$d kohdetta asetettu korkealaatuiseksi + + + + %1$d kohde asetettu vakiolaatuiseksi + %1$d kohdetta asetettu vakiolaatuiseksi + Peruuta Piirrä @@ -4895,6 +4934,20 @@ Hylätäänkö muutokset? Kaikki tähän kuvaan tekemäsi muutokset katoavat. + + Löytyi käyttäjä %1$s + + Aloita keskustelu käyttäjän %1$s kanssa + + Siirry keskusteluun + + + Yhdistä laite? + + Vaikuttaa siltä, että yrität yhdistää laitetta Signaliin. Napauta Jatka ja skannaa koodi uudelleen yhdistääksesi sen. + + Jatka + Omat merkkini Esitelty merkki @@ -4993,7 +5046,7 @@ Maksu on pankin käsittelyssä - Pankkisiirto summalle %1$s on pankin käsittelyssä. Pankkisiirtojen käsittely kestää yleensä yhden arkipäivän. + Pankkisiirto summalle %1$s on pankin käsittelyssä. Pankkisiirrot voivat kestää 1–14 arkipäivää. Lue lisää @@ -5937,9 +5990,9 @@ Sinulla on käsittelyssä oleva lahjoitus - Pankkisiirtojen käsittely kestää yleensä yhden arkipäivän. Odota, kunnes maksu on suoritettu, ennen kuin päivität tilauksesi. + Pankkisiirtojen käsittely voi kestää 1–14 arkipäivää. Odota, kunnes maksu on suoritettu, ennen kuin päivität tilauksesi. - Pankkisiirtojen käsittely kestää yleensä yhden arkipäivän. Odota, kunnes maksu on suoritettu, ennen kuin teet uuden lahjoituksen. + Pankkisiirtojen käsittely voi kestää 1–14 arkipäivää. Odota, kunnes maksu on suoritettu, ennen kuin teet uuden lahjoituksen. Lahjoitusta käsitellään vielä. Tämä voi kestää muutamia minuutteja yhteydestäsi riippuen. Odota, kunnes maksu on suoritettu, ennen kuin päivität tilauksesi. @@ -6091,7 +6144,7 @@ Kertalahjoituksesi on pankin käsittelyssä. Voit näyttää %1$s -merkin profiilissasi, kun lahjoituksesi on saapunut perille. - Pankkisiirtojen käsittely kestää yleensä yhden arkipäivän. %1$s + Pankkisiirtojen käsittely voi kestää 1–14 arkipäivää. %1$s Lue lisää @@ -6432,6 +6485,8 @@ Puhelun tiedot + + Muokkaa puhelun nimeä Lisää puhelun nimi @@ -6499,6 +6554,10 @@ QR-koodisi ja linkkisi on palautettu oletusasetukseen ja uusi QR-koodi ja linkki on luotu. Skannaa tämä QR-koodi puhelimellasi, niin voit keskustella kanssani Signalissa. + + QR-koodia ei löydy + + Yritä skannata toinen Signal QR-koodin sisältävä kuva. Kuka tahansa, jolla on tämä linkki, voi nähdä käyttäjänimesi ja aloittaa keskustelun kanssasi. Jaa se vain henkilöille, joihin luotat. @@ -6590,6 +6649,10 @@ %1$s ei ole Signalin käyttäjä. Haluatko kutsua tämän numeron? Kutsu + + Skannaa QR-koodi + + Tapahtui verkkovirhe. Yritä myöhemmin uudelleen. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0190533423..e2c9bc4dde 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -88,7 +88,7 @@ Impossible de trouver une appli pour sélectionner le média. - Pour joindre des photos, des vidéos ou de l’audio, Molly doit accéder au stockage de l’appareil, mais vous ne lui avez pas accordé l’accès. Pour l’autoriser à y accéder, ouvrez l’application « Paramètres » de votre appareil, appuyez sur « Applications », puis sélectionnez « Autorisations » et activez « Stockage ». + Pour joindre des photos, des vidéos ou de l’audio, Molly doit accéder au stockage de l’appareil, mais vous lui en avez interdit l’accès. Pour l’autoriser à y accéder, ouvrez l’application « Paramètres » de votre appareil, appuyez sur « Applications », puis sélectionnez « Autorisations » et activez « Stockage ». Molly exige l’autorisation Contacts afin de joindre des coordonnées de contact, mais elle a été refusée définitivement. Veuillez accéder au menu des paramètres des applis, sélectionner « Autorisations » et activer « Contacts ». Molly exige l’autorisation Position afin de joindre une position géographique, mais elle a été refusée définitivement. Veuillez accéder au menu des paramètres des applis, sélectionner « Autorisations » et activer « Position ». @@ -249,7 +249,7 @@ Aucun navigateur Web n’a été trouvé. Envoyer un courriel Un appel cellulaire est déjà en cours. - Lancer un appel audio ? + Passer un appel vocal ? Annuler Appeler Appel non sécurisé @@ -378,7 +378,7 @@ Passons à Molly %1$s Veuillez choisir un contact Le fichier joint dépasse la limite de taille pour le type de message que vous envoyez. - Impossible d’enregistrer le son. + Enregistrement audio impossible. Vous ne pouvez pas envoyer de messages à ce groupe, car vous n’en faites plus partie. Seuls les %1$s peuvent envoyer des messages. administrateurs @@ -390,7 +390,7 @@ Annuler la demande Pour envoyer des messages audio, autorisez l’accès de Molly à votre microphone. - Molly exige l’autorisation Microphone afin d’envoyer des messages audio, mais elle a été refusée définitivement. Veuillez accéder au menu des paramètres des applis, sélectionner Autorisations et activer Microphone. + Pour envoyer des messages audio, Molly doit être autorisé à accéder à l’application Microphone, mais vous lui en avez interdit l’accès. Pour l’autoriser à y accéder, ouvrez l’application « Paramètres » de votre appareil, appuyez sur « Applications », puis sélectionnez « Autorisations » et activez « Microphone ». Molly a besoin des autorisations Microphone et Appareil photo pour appeler %1$s, mais elles ont été refusées définitivement. Veuillez accéder aux paramètres de l’appli, sélectionner Autorisations et activer Microphone et Appareil photo. Pour prendre des photos et des vidéos, autorisez l’accès de Molly à l’appareil photo. Molly a besoin de l’autorisation Appareil photo afin de prendre des photos ou des vidéos, mais elle a été refusée définitivement. Veuillez accéder aux paramètres de l’appli, sélectionner Autorisations et activer Appareil photo. @@ -426,6 +426,8 @@ La messagerie SMS n’est plus prise en charge dans Signal. La messagerie SMS n’est plus prise en charge par Signal. Invitez %1$s à rejoindre Signal pour continuer cette conversation. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Inviter à Molly @@ -536,7 +538,7 @@ Signalé comme spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal a été informé que cet utilisateur envoie peut-être des spams. Nous n’avons cependant jamais accès au contenu des conversations. Signalé comme spam @@ -557,7 +559,7 @@ Escroqueries financières ou liées aux crypto-monnaies - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Si un utilisateur que vous ne connaissez pas vous envoie des messages à propos de crypto-monnaies (comme Bitcoin) ou d’une opportunité financière à saisir, soyez vigilant : il s’agit probablement d’un spam. Messages au contenu vague ou insignifiant @@ -818,7 +820,7 @@ Afficher - Échec permanent de communication de Signal. + Échec permanent de communication de Molly. Molly n’a pas réussi à s’inscrire auprès des services Google Play. Les appels et messages Molly ont été désactivés. Veuillez essayer de vous réinscrire dans Paramètres > Avancé. @@ -1241,7 +1243,7 @@ Médias Fichiers - Son + Audio Tout Supprimer l\'élément sélectionné ? @@ -1277,7 +1279,7 @@ %1$d sélectionnées (%2$s) Fichier - Son + Audio Vidéo Image @@ -1386,6 +1388,8 @@ %1$s a changé son nom de profil en %2$s. %1$s a changé son nom de profil de %2$s à %3$s. %1$s a changé son profil. + + You started this chat with %1$s. Vous avez créé le groupe. @@ -1861,8 +1865,10 @@ L’application est déconnectée Lien de l’appel Signal - - Toute personne rejoignant cet appel via le lien verra votre nom, photo et numéro de téléphone. + + Toute personne rejoignant cet appel via le lien verra votre nom, photo et numéro de téléphone. + + Toutes les personnes qui participent à cet appel via le lien auront accès à votre nom et votre photo. En attente d’admission… @@ -1921,7 +1927,7 @@ Erreur d’interface utilisateur. Veuillez signaler cette erreur aux développeurs. - Aucun audio éligible I/O n’a été détecté. + Aucune E/S audio éligible n’a été détectée. L’icône d’un appareil Bluetooth. @@ -2005,9 +2011,9 @@ %1$s est bloqué Plus de précisions - Vous ne recevrez ni leur son ni leur vidéo et ils ne recevront pas les vôtres. - Impossible de recevoir ni le son ni la vidéo de %1$s - Impossible de recevoir ni le son ni la vidéo de %1$s + Vous ne recevrez ni l’audio, ni la vidéo de cet utilisateur, et il ne recevra pas les vôtres. + Impossible de recevoir l’audio et la vidéo de %1$s + Impossible de recevoir l’audio et la vidéo de %1$s Cette personne n’a peut-être pas confirmé le changement de votre numéro de sécurité, il y a peut-être un problème avec son appareil ou elle vous a bloqué. @@ -2155,7 +2161,7 @@ Image Sticker - Son + Audio Vidéo @@ -2296,7 +2302,7 @@ Le nom d’utilisateur a été effacé avec succès. Une erreur réseau est survenue. - Too many attempts made, please try again later. + Vous avez dépassé le nombre de tentatives autorisées. Veuillez réessayer ultérieurement. Ce nom d’utilisateur existe déjà. Les noms d’utilisateur ne peuvent inclure que des caractères de A à Z, 0 à 9 et des tirets bas. Un nom d’utilisateur ne peut pas commencer par un chiffre. @@ -2320,7 +2326,7 @@ Ce chiffre ne peut pas être 00. Il doit être compris entre 1 et 9. - Numbers with more than 2 digits can\'t start with 0 + Les séries comportant plus de 2 chiffres ne peuvent pas commencer par un 0. Récupérer votre nom d’utilisateur entraîne la réinitialisation de votre lien et code QR existants. Êtes-vous sûr de vouloir continuer ? @@ -2440,7 +2446,7 @@ A réagi par %1$s à votre image. A réagi par %1$s à votre GIF. A réagi par %1$s à votre fichier. - A réagi par %1$s à votre message vocal. + a réagi par %1$s à votre message audio. A réagi par %1$s à votre média éphémère. A réagi par %1$s à votre paiement. @@ -2679,7 +2685,7 @@ Afficher/masquer le clavier des émojis Imagette de fichiers joints Afficher/masquer le tiroir de l’appareil photo à basse résolution - Enregistrer et envoyer un message vocal en pièce jointe + Enregistrer et envoyer un message audio en pièce jointe Verrouiller l’enregistrement de pièces jointes au format audio Le message n’a pas pu être envoyé. Veuillez vérifier votre connexion et réessayer. @@ -2731,7 +2737,7 @@ Télécharger - Son + Audio Vidéo Photo GIF @@ -3059,7 +3065,7 @@ Ni nom ni message Images - Son + Audio Vidéo Documents @@ -3084,9 +3090,9 @@ Utiliser les photos du carnet d’adresses Si présentes, afficher les photos des contacts du carnet d’adresses - Garder les conversations en mode silencieux archivées + Ne pas désarchiver les conversations mises en sourdine - Les conversations en mode silencieux sont archivées, y compris après réception d’un nouveau message. + Les conversations mises en sourdine restent archivées, même lorsque vous recevez un nouveau message. Générer des aperçus de lien Pour les messages que vous envoyez, récupérez des aperçus de lien directement des sites Web. Changer la phrase de passe @@ -3156,7 +3162,7 @@ Thème Couleur et fond d’écran des conversations - Icône de l’appli + Icône de l’application OK @@ -3205,7 +3211,7 @@ Photos Vidéos Fichiers - Son + Audio État de l\'espace de stockage Supprimer les anciens messages ? Effacer l’historique des messages ? @@ -3894,6 +3900,12 @@ Personne ne saura que vous utilisez Signal, hormis les utilisateurs à qui vous envoyez un message ou avec qui vous avez déjà démarré une conversation. "Pour changer ce paramètre, réglez l’option « Qui peut voir mon numéro » sur « Personne »." + + Êtes-vous sûr de vouloir continuer ? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Annuler Tout le monde Personne Verrou d’écran @@ -4391,11 +4403,16 @@ Description du groupe + Standard + Plus rapide, moins de données + Élevée + Lent, plus lourd - Qualité d’image + + Qualité des médias Invitez vos amis @@ -4758,7 +4775,7 @@ Message - Appel audio + Appel vocal Appel vidéo @@ -4871,6 +4888,28 @@ Un élément ou plus étaient trop grands Un élément ou plus étaient invalides Trop d’éléments sélectionnés + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Annuler Dessiner @@ -4895,6 +4934,20 @@ Abandonner les changements ? Vous perdrez toutes les modifications apportées à cette photo. + + Found %1$s + + Start a chat with \"%1$s\" + + Accéder à la conversation + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Poursuivre + Mes macarons Macarons mis en avant @@ -4993,7 +5046,7 @@ Paiement en attente - Votre virement de %1$s est en attente. Le traitement des virements prend généralement 1 jour ouvré. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. En savoir plus @@ -5937,9 +5990,9 @@ Un don en attente - Le traitement des virements bancaires prend généralement 1 jour ouvré. Veuillez attendre que ce paiement soit finalisé avant de mettre votre don à jour. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Le traitement des virements bancaires prend généralement 1 jour ouvré. Veuillez attendre que ce paiement soit finalisé avant d’effectuer un autre don. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Votre don est en cours de traitement. Cela peut prendre quelques minutes en fonction de votre connexion. Veuillez attendre que ce paiement soit finalisé avant de mettre votre don à jour. @@ -6091,7 +6144,7 @@ Votre don ponctuel est en attente. Une fois votre don reçu, vous pourrez afficher le macaron %1$s dans votre profil. - Le traitement des virements bancaires prend généralement 1 jour ouvré. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s En savoir plus @@ -6254,7 +6307,7 @@ Appel vidéo - Appel audio + Appel vocal Accéder à la conversation @@ -6432,6 +6485,8 @@ Détails de l’appel + + Modifier le libellé de l’appel Ajouter un libellé d’appel @@ -6499,6 +6554,10 @@ Nous avons réinitialisé votre lien et votre code QR, et en avons généré de nouveaux. Et si on discutait sur Signal ? Scannez ce code QR pour me contacter. + + QR code not found + + Try scanning another image containing a Signal QR code. Toute personne disposant de ce lien peut voir votre nom d\'utilisateur et démarrer une conversation avec vous. À ne partager qu\'avec des personnes de confiance. @@ -6590,6 +6649,10 @@ %1$s n’utilise pas Signal. Voulez-vous inviter ce numéro ? Inviter + + Lire le code QR + + Une erreur réseau est survenue. Veuillez réessayer ultérieurement plus tard. diff --git a/app/src/main/res/values-ga/strings.xml b/app/src/main/res/values-ga/strings.xml index 9d50be9d90..b3ed16c2d8 100644 --- a/app/src/main/res/values-ga/strings.xml +++ b/app/src/main/res/values-ga/strings.xml @@ -435,6 +435,8 @@ Ní thacaítear le cur teachtaireachtaí SMS in Signal a thuilleadh. Ní thacaítear le cur teachtaireachtaí SMS in Signal a thuilleadh. Tabhair cuireadh do %1$s teacht isteach in Signal leis an gcomhrá a choinneáil anseo. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Tabhair cuireadh chuig Molly @@ -563,7 +565,7 @@ Tuairiscigh turscar - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Cuireadh in iúl do Signal go bhféadfadh go bhfuil an duine seo ag seoladh turscair. Ní féidir le Signal inneachar comhráite a fheiceáil. Tuairiscithe mar thurscar @@ -584,7 +586,7 @@ Camscéimeanna criptea-airgeadra nó airgid - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Má fhaigheann tú teachtaireacht faoi chriptea-airgeadra (amhail Bitcoin) nó faoi dheis airgeadais ó dhuine éigin nach bhfuil aithne agat air nó uirthi, bí cúramach — seans maith gur turscar atá ann. Teachtaireachtaí doiléire nó nach mbaineann le hábhar @@ -872,7 +874,7 @@ Amharc - Fadhb cumarsáid Signal buan! + Fadhb cumarsáid Molly buan! Níorbh fhéidir le Molly clárú le Google Play Services. Díchumasaíodh teachtaireachtaí agus glaonna Molly, triail clárú arís i Socruithe > Ardsocruithe. @@ -1527,6 +1529,8 @@ D\'athraigh %1$s an t-ainm próifíle go %2$s. D\'athraigh %1$s an t-ainm próifíle ó %2$s go %3$s. D\'athraigh %1$s an phróifíl aige/aici. + + You started this chat with %1$s. Chruthaigh tú an grúpa. @@ -2062,8 +2066,10 @@ Dícheangailte Nasc glao Signal - - Aon duine a théann isteach sa ghlao seo tríd an nasc, feicfidh an duine sin d\'ainm, do ghrianghraf agus d\'uimhir ghutháin. + + Aon duine a théann isteach sa ghlao seo tríd an nasc, feicfidh an duine sin d\'ainm, do ghrianghraf agus d\'uimhir ghutháin. + + Aon duine a théann isteach sa ghlao seo tríd an nasc, feicfidh an duine sin d\'ainm agus do ghrianghraf. Ag fanacht le go ligfear isteach… @@ -2536,7 +2542,7 @@ D\'éirigh le hainm úsáideora a bhaint. Tharla earráid líonra - Too many attempts made, please try again later. + An iomarca iarrachtaí déanta, triail arís ar ball é. Tá an t-ainm úsáideora sin gafa cheana. Ní cheadaítear ach a-Z, 0-9, agus fostríoca in ainmneacha úsáideora. Ní cheadaítear uimhir ag tús ainm úsáideora. @@ -2560,7 +2566,7 @@ Ní féidir 00 a bheith san uimhir seo. Cuir isteach digit idir 1 agus 9 - Numbers with more than 2 digits can\'t start with 0 + Ní féidir le huimhreacha a bhfuil níos mó ná 2 dhigit iontu tosú le 0 Athshocrófar do chód QR agus nasc reatha le hathshlánú d\'ainm úsáideora. An bhfuil tú cinnte? @@ -4212,6 +4218,12 @@ Beidh tú dofheicthe ar Signal ag daoine ach amháin má sheolann tú teachtaireacht chucu nó má tá comhrá ar siúl agat leo. "Leis an socrú sin a athrú, socraigh Daoine atá in ann m\'uimhir a fheiceáil go Duine ar bith." + + An bhfuil tú cinnte? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Cuir ar ceal Gach duine Duine ar bith Glas an scáileáin @@ -4721,11 +4733,16 @@ Group Description + Caighdeánach + Níos tapúla, níos lú sonraí + Ard + Níos moille, níos mó sonraí - Cáilíocht an ghrianghraif + + Media Quality Tabhair Cuireadh do Chairde @@ -5222,6 +5239,34 @@ Bhí mír amháin nó níos mó rómhór Bhí mír amháin nó níos mó neamhbhailí Roghnaíodh an iomarca nithe + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + Cealaigh Tarraing @@ -5246,6 +5291,20 @@ Cuileáil Athruithe? Caillfidh tú aon athruithe a rinne tú ar an ngrianghraf seo. + + Found %1$s + + Start a chat with \"%1$s\" + + Go to Chat + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Ar aghaidh + Mo shuaitheantais Suaitheantas faoi thrácht @@ -5344,7 +5403,7 @@ Íocaíocht ar feitheamh - Tá d\'aistriú bainc %1$s ar feitheamh. Is gnách go gcríochnaítear aistrithe bainc laistigh de 1 lá gnó amháin. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Tuilleadh faisnéise @@ -6345,9 +6404,9 @@ Tá tabhartas ar feitheamh agat - Is gnách go bpróiseáiltear aistrithe bainc laistigh de 1 lá gnó amháin. Fan go gcríochnófar an íocaíocht seo roimh do shíntiús a nuashonrú. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Is gnách go bpróiseáiltear aistrithe bainc laistigh de 1 lá gnó amháin. Fan go gcríochnófar an íocaíocht seo roimh thabhartas eile a thabhairt. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Tá do thabhartas á phróiseáil fós. D\'fheadfaí go mbeadh cúpla nóiméad i gceist leis sin ag brath ar do nasc. Fan go gcríochnófar an íocaíocht seo roimh do shíntiús a nuashonrú. @@ -6502,7 +6561,7 @@ Tá do thabhartas aonuaire ar feitheamh. Beidh tú in ann an suaitheantas %1$s a thaispeáint ar do phróifíl nuair a fhaightear do thabhartas. - Is gnách go bpróiseáiltear aistrithe bainc laistigh de 1 lá gnó amháin. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Tuilleadh faisnéise @@ -6855,6 +6914,8 @@ Sonraí an ghlao + + Cuir ainm an ghlao in eagar Cuir ainm an ghlao leis @@ -6922,6 +6983,10 @@ Athshocraíodh do chód QR agus nasc agus cruthaíodh cód QR agus nasc nua. Scan an cód QR seo le do ghuthán chun comhrá a dhéanamh liom ar Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Aon duine a bhfuil an nasc sin acu, beidh siad in ann féachaint ar d\'ainm úsáideora agus tús a chur le comhrá leat. Ná comhroinn é ach le daoine a bhfuil muinín agat iontu. @@ -7019,6 +7084,10 @@ Ní úsáideoir Signal é/í %1$s. Ar mhaith leat cuireadh a thabhairt don uimhir seo? Tabhair cuireadh + + Scan Cód QR + + Tharla earráid líonra Déan arís é ar ball. diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 758ebb4734..60f86f9cda 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -426,6 +426,8 @@ Xa non se poden mandar mensaxes SMS en Signal. Xa non se poden mandar mensaxes SMS en Signal. Convida a %1$s a Signal para seguir falando. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Convidar a Molly @@ -536,7 +538,7 @@ Denunciada como correo lixo - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Enviouse un aviso a Signal no que se informou de que esta persoa pode estar a enviar correo lixo. Signal non pode ler o contido de ningunha conversa. Denunciada como correo lixo @@ -557,7 +559,7 @@ Estafas de criptodivisa ou de diñeiro - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Se alguén que non coñeces che envía mensaxes sobre criptodivisas (coma Bitcoin) ou che ofrece algunha oportunidade financeira, ten moito coidado. Seguramente sexa correo lixo. Mensaxes xerais ou non relevantes @@ -1386,6 +1388,8 @@ %1$s cambiou o seu nome de perfil a %2$s. %1$s cambiaron o seu nome de perfil de %2$s a %3$s. %1$s cambiaron o seu perfil. + + You started this chat with %1$s. Creaches o grupo. @@ -1861,8 +1865,10 @@ Desconectado Ligazón de chamada de Signal - - Calquera que se una á chamada pola ligazón poderá ver o teu nome, foto e número de teléfono. + + Calquera que se una á chamada pola ligazón poderá ver o teu nome, foto e número de teléfono. + + Calquera que se una á chamada pola ligazón poderá ver o teu nome e foto. Agardando o acceso… @@ -2296,7 +2302,7 @@ Nome de usuario eliminado satisfactoriamente. Houbo un fallo na rede. - Too many attempts made, please try again later. + Levas demasiados intentos, téntao máis tarde. Este nome de usuario xa está en uso. Os nomes de usuario só poden incluír a-Z, 0-9 e guións baixos. Os nomes de usuario non poden comezar por un número. @@ -2320,7 +2326,7 @@ Este número non pode ser 00. Insire un número entre 1 e 9 - Numbers with more than 2 digits can\'t start with 0 + Os números con máis de 2 díxitos non poden comezar por 0 Para recuperar o teu nome de usuario restableceranse o teu código QR e ligazón actuais. Queres continuar? @@ -3894,6 +3900,12 @@ Ninguén poderá ver que estás en Signal a menos que lles envíes unha mensaxe ou xa teñas unha conversa con eles. "Para cambiar esta configuración, elixe «Ninguén» en «Quen pode ver o meu número»." + + Queres continuar? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Cancelar Todos Ninguén Bloqueo da pantalla @@ -4391,11 +4403,16 @@ Descrición do grupo + Estándar + Máis rápido pero menos datos + Alta + Máis lento pero máis datos - Calidade das fotos + + Calidade multimedia Convida ás túas amizades @@ -4871,6 +4888,28 @@ Un ou máis elementos son demasiado grandes Un ou máis elementos son incorrectos Demasiados elementos seleccionados + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Cancelar Debuxar @@ -4895,6 +4934,20 @@ Eliminar cambios? Perderás todos os cambios que fixeches nesta foto. + + Found %1$s + + Start a chat with \"%1$s\" + + Ir á conversa + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Continuar + As miñas insignias Insignia actual @@ -4993,7 +5046,7 @@ Pagamento pendente - A túa transferencia bancaria de %1$s está pendente. As transferencias bancarias tardan 1 día laborable en completarse. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Máis información @@ -5937,9 +5990,9 @@ Tes unha doazón pendente - As transferencias bancarias tardan 1 día laborable en procesarse. Espera ata que o pagamento se complete antes de actualizar a túa subscrición. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - As transferencias bancarias tardan 1 día laborable en procesarse. Espera ata que o pagamento se complete antes de facer outra doazón. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. A túa doazón segue procesándose. Dependendo da túa conexión, pode tardar uns minutos. Espera ata que o pagamento se complete antes de actualizar a túa subscrición. @@ -6091,7 +6144,7 @@ A túa doazón puntual está pendente. Poderás mostrar a insignia %1$s no teu perfil cando recibamos a túa doazón. - As transferencias bancarias tardan 1 día laborable en procesarse. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Máis información @@ -6432,6 +6485,8 @@ Detalles da chamada + + Editar nome de chamada Engadir un nome de chamada @@ -6499,6 +6554,10 @@ Restablecéronse o teu código QR e a ligazón, e creáronse uns novos. Escanea este código QR co teu teléfono para conversar comigo en Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Con esta ligazón calquera persoa poderá ver o teu nome de usuario e comezar a conversar contigo. Compártea só coas persoas nas que confíes. @@ -6590,6 +6649,10 @@ %1$s non é un usuario de Signal. Queres enviar unha invitación a este número? Convidar + + Escanear código QR + + Atopamos un erro na rede. Inténtao máis tarde. diff --git a/app/src/main/res/values-gu/strings.xml b/app/src/main/res/values-gu/strings.xml index 9cef17e3fa..a75b7ada5e 100644 --- a/app/src/main/res/values-gu/strings.xml +++ b/app/src/main/res/values-gu/strings.xml @@ -426,6 +426,8 @@ Signalમાં હવે SMS મેસેજિંગ સમર્થિત નથી. Signalમાં હવે SMS મેસેજિંગ સમર્થિત નથી. વાતચીત અહીં રાખવા માટે %1$s ને Signal પર આમંત્રિત કરો. + + આ વ્યક્તિ હવે Mollyનો ઉપયોગ કરી રહી નથી. વાતચીત અહીં રાખવા માટે તેમને Molly પર આમંત્રિત કરો. Molly માટે આમંત્રણ આપો @@ -536,7 +538,7 @@ સ્પામ તરીકે જાણ કરી - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signalને જાણ કરવામાં આવી છે કે આ વ્યક્તિ સ્પામ મોકલતા હોઈ શકે છે. Signal કોઈ પણ ચેટની કન્ટેન્ટ જોઈ શકતું નથી. સ્પામ તરીકે જાણ કરી @@ -557,7 +559,7 @@ ક્રિપ્ટો અથવા પૈસાને લગતા સ્કેમ - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + જો તમે જાણતા ન હો તેવા કોઈ વ્યક્તિ તમને ક્રિપ્ટોકરન્સી (જેમ કે Bitcoin) અથવા નાણાકીય તક વિશેના મેસેજ કરે, તો સાવચેત રહો—તે સ્પામ હોવાની સંભાવના છે. અસ્પષ્ટ અથવા નકામા મેસેજ @@ -818,7 +820,7 @@ વ્યૂ - કાયમી Signal ની વાતચીત નિષ્ફળ! + કાયમી Molly ની વાતચીત નિષ્ફળ! Molly Google Play Services સાથે રજીસ્ટર કરવામાં અસમર્થ હતું. Molly મેસેજ અને કૉલ્સ અક્ષમ કરવામાં આવ્યુ છે, કૃપા કરીને સેટિંગ્સ > માં ફરીથી રજીસ્ટર કરવાનો પ્રયાસ કરો; વધુ. @@ -1386,6 +1388,8 @@ %1$s એ તેમનું પ્રોફાઇલ નામ %2$s માં બદલ્યું. %1$s એ તેમનું પ્રોફાઇલ નામ %2$sમાંથી %3$s માં બદલ્યું. %1$s એ તેમની પ્રોફાઇલ બદલી. + + તમે આ ચેટ %1$s સાથે શરૂ કરી. તમે ગ્રુપ બનાવ્યું છે. @@ -1861,8 +1865,10 @@ ડિસ્કનેક્ટ Signal કૉલ લિંક - - લિંક દ્વારા આ કૉલમાં જોડાનાર કોઈ પણ તમારું નામ, ફોટો અને ફોન નંબર જોઈ શકશે. + + લિંક દ્વારા આ કૉલમાં જોડાનાર કોઈ પણ તમારું નામ, ફોટો અને ફોન નંબર જોઈ શકશે. + + લિંક દ્વારા આ કૉલમાં જોડાયેલા કોઈ પણ વ્યક્તિ તમારું નામ અને ફોટો જોઈ શકશે. એડમિન મંજૂરી આપે તેની રાહ જોઈએ છીએ… @@ -2296,7 +2302,7 @@ યુઝરનેમ સફળતાપૂર્વક દૂર કર્યું. નેટવર્ક ભૂલ મળી. - Too many attempts made, please try again later. + ઘણા બધા પ્રયત્નો થઈ ગયા છે, કૃપા કરીને પછીથી ફરી પ્રયત્ન કરો. આ યુઝરનેમ લેવાઈ ગયું છે. યુઝરનેમમાં માત્ર a–Z, 0–9 અને અન્ડરસ્કોર શામેલ હોઈ શકે છે. યુઝરનેમ સંખ્યા સાથે શરૂ થઈ શકતા નથી. @@ -2320,7 +2326,7 @@ આ નંબર 00 ન હોઈ શકે. 1-9ની વચ્ચેનો અંક દાખલ કરો - Numbers with more than 2 digits can\'t start with 0 + 2 થી વધુ અંકો ધરાવતી સંખ્યા 0 થી શરૂ થઈ શકે નહીં તમારું યુઝરનેમ નામ રિકવર કરવાથી તમારો હાલનો QR કોડ અને લિંક ફરીથી સેટ થશે. તમને ખાતરી છે? @@ -3894,6 +3900,12 @@ તમે Signal પર છો તે કોઈ જોઈ શકશે નહીં, જ્યાં સુધી તમે તેમને મેસેજ ન કરો અથવા તેમની સાથે તમારી કોઈ ચેટ અસ્તિત્વમાં હોય. "આ સેટિંગ બદલવા માટે, \"મારો નંબર કોણ જોઈ શકે છે\" ને \"કોઈ નહીં\" પર સેટ કરો." + + તમને ખાતરી છે? + + \"મને નંબર દ્વારા કોણ શોધી શકે\" ને \"કોઈ નહીં\" પર સેટ કરવાથી લોકો માટે તમને Signal પર શોધવાનું મુશ્કેલ બનશે. + + રદ કરો બધા કોઈ નથી સ્ક્રીન લૉક @@ -4391,11 +4403,16 @@ ગ્રુપ ડિસ્ક્રિપ્શન + સ્ટાન્ડર્ડ + ઝડપી, ઓછો ડેટા + ઉચ્ચ + ધીમો, વધુ ડેટા - ફોટો ગુણવત્તા + + મીડિયા ગુણવત્તા તમારા મિત્રોને આમંત્રણ આપો @@ -4871,6 +4888,28 @@ એક અથવા વધુ વસ્તુઓ બહુ મોટી હતી એક અથવા વધુ વસ્તુઓ અમાન્ય હતી બહુ બધી વસ્તુઓ પસંદ કરી + + વીડિયોને વ્યૂ વન્સ પર સેટ કરવામાં આવ્યો + + ફોટાને વ્યૂ વન્સ પર સેટ કર્યો + + વીડિયોને હાઇ ક્વોલિટી પર સેટ કરવામાં આવ્યો + + વીડિયોને સ્ટાન્ડર્ડ ક્વોલિટી પર સેટ કરવામાં આવ્યો + + ફોટોને હાઇ ક્વોલિટી પર સેટ કરવામાં આવ્યો + + ફોટાને સ્ટાન્ડર્ડ ક્વોલિટી પર સેટ કરવામાં આવ્યો + + + %1$d આઇટમને હાઇ ક્વોલિટી પર સેટ કરવામાં આવી + %1$d આઇટમને હાઇ ક્વોલિટી પર સેટ કરવામાં આવી + + + + %1$d આઇટમને સ્ટાન્ડર્ડ ક્વોલિટી પર સેટ કરવામાં આવી + %1$d આઇટમને સ્ટાન્ડર્ડ ક્વોલિટી પર સેટ કરવામાં આવી + રદ કરો દોરો @@ -4895,6 +4934,20 @@ ફેરફારો જવા દેવા છે? તમે આ ફોટો પર કરેલા કોઈ પણ ફેરફારો ગુમાવશો. + + %1$s મળ્યા + + \"%1$s\" સાથે ચેટ શરૂ કરો + + ચેટ પર જાઓ + + + ડિવાઇસ લિંક કરવું છે? + + એવું લાગે છે કે તમે Signal ડિવાઇસને લિંક કરવાનો પ્રયાસ કરી રહ્યાં છો. ચાલુ રાખો પર ટેપ કરો અને કોડને લિંક કરવા માટે તેને ફરીથી સ્કેન કરો. + + ચાલુ રાખો + મારા બૅજ ફીચર્ડ બૅજ @@ -4993,7 +5046,7 @@ ચુકવણી બાકી છે - તમારું %1$s નું બેંક ટ્રાન્સફર બાકી છે. બેંક ટ્રાન્સફર પૂર્ણ થવામાં સામાન્ય રીતે 1 કામકાજી દિવસ લાગે છે. + તમારું %1$sનું બેંક ટ્રાન્સફર બાકી છે. બેંક ટ્રાન્સફર પૂર્ણ થવામાં 1 થી 14 કામકાજી દિવસ લાગી શકે છે. વધુ જાણો @@ -5937,9 +5990,9 @@ તમારું દાન બાકી છે - બેંક ટ્રાન્સફરની પ્રક્રિયામાં સામાન્ય રીતે 1 કામકાજી દિવસ લાગે છે. તમારું સબ્સ્ક્રિપ્શન અપડેટ કરતાં પહેલાં કૃપા કરીને આ ચુકવણી પૂર્ણ થાય ત્યાં સુધી રાહ જુઓ. + બેંક ટ્રાન્સફરની પ્રક્રિયા થવામાં 1 થી 14 કામકાજી દિવસ લાગી શકે છે. તમારું સબ્સ્ક્રિપ્શન અપડેટ કરતાં પહેલાં કૃપા કરીને આ ચુકવણી પૂર્ણ થાય ત્યાં સુધી રાહ જુઓ. - બેંક ટ્રાન્સફરની પ્રક્રિયામાં સામાન્ય રીતે 1 કામકાજી દિવસ લાગે છે. અન્ય દાન આપતાં પહેલાં કૃપા કરીને આ ચુકવણી પૂર્ણ થાય ત્યાં સુધી રાહ જુઓ. + બેંક ટ્રાન્સફરની પ્રક્રિયા થવામાં 1 થી 14 કામકાજી દિવસ લાગી શકે છે. અન્ય દાન આપતાં પહેલાં કૃપા કરીને આ ચુકવણી પૂર્ણ થાય ત્યાં સુધી રાહ જુઓ. તમારા દાનની પ્રક્રિયા હજી ચાલુ છે. આમાં તમારા કનેક્શનને આધારે થોડી મિનિટો લાગી શકે છે. તમારું સબ્સ્ક્રિપ્શન અપડેટ કરતાં પહેલાં કૃપા કરીને આ ચુકવણી પૂર્ણ થાય ત્યાં સુધી રાહ જુઓ. @@ -6091,7 +6144,7 @@ તમારું એક-વખતનું દાન બાકી છે. જ્યારે તમારું દાન પ્રાપ્ત થશે ત્યારે તમે તમારી પ્રોફાઇલ પર %1$s બૅજ પ્રદર્શિત કરી શકશો. - બેંક ટ્રાન્સફરની પ્રક્રિયામાં સામાન્ય રીતે 1 કામકાજી દિવસ લાગે છે. %1$s + બેંક ટ્રાન્સફરની પ્રક્રિયા થવામાં 1 થી 14 કામકાજી દિવસ લાગી શકે છે. %1$s વધુ જાણો @@ -6432,6 +6485,8 @@ કૉલની વિગતો + + કૉલના નામમાં ફેરફાર કરો કૉલ નામ ઉમેરો @@ -6499,6 +6554,10 @@ તમારો QR કોડ અને લિંક ફરીથી સેટ કરવામાં આવી છે અને એક નવો QR કોડ અને લિંક બનાવવામાં આવી છે. Signal પર મારી સાથે ચેટ કરવા માટે આ QR કોડને તમારા ફોનથી સ્કેન કરો. + + QR કોડ મળ્યો નથી + + Signal QR કોડ ધરાવતી બીજી ઇમેજને સ્કેન કરવાનો પ્રયાસ કરો. આ લિંક ધરાવતી કોઈ પણ વ્યક્તિ તમારું યુઝરનેમ જોઈ શકે છે અને તમારી સાથે ચેટ શરૂ કરી શકે છે. તમને ભરોસો હોય તેવા લોકો સાથે જ તેને શેર કરો. @@ -6590,6 +6649,10 @@ %1$s એ Signal ઉપયોગકર્તા નથી. શું તમે આ નંબરને આમંત્રિત કરવા માંગો છો? આમંત્રિત + + QR કોડ સ્કેન કરો + + નેટવર્ક ભૂલ મળી. પછી ફરી પ્રયાસ કરો. diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 86dade4035..e951d94eec 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -426,6 +426,8 @@ SMS संदेश सेवा अब Signal में समर्थित नहीं है। SMS संदेश सेवा अब Signal में समर्थित नहीं है। %1$s को Signal पर आमंत्रित करें और बातचीत यहीं पर रखें। + + यह व्यक्ति अब Molly का उपयोग नहीं कर रहा है। बातचीत को यहीं रखने के लिए उन्हें Molly पर आमंत्रित करें। Molly का उपयोग करने के लिए आमंत्रित करें @@ -818,7 +820,7 @@ देखना - स्थायी Signal संचार विफलता + स्थायी Molly संचार विफलता Molly Google Play सेवाओं के साथ पंजीकरण करने में असमर्थ था। Molly मेसेज और कॉल अक्षम कर दिए गए हैं, कृपया सेटिंग्स > उन्नत में पुनः पंजीकरण करने का प्रयास करें। @@ -1386,6 +1388,8 @@ %1$s ने अपना प्रोफ़ाइल नाम बदल कर %2$s रख दिया है। %1$s ने अपना प्रोफ़ाइल नाम %2$s से बदल कर %3$s रख लिया। %1$s ने अपनी प्रोफाइल को बदल लिया। + + आपने %1$s के साथ इस चैट को शुरू किया। यह ग्रूप आपने बनाया है। @@ -1861,8 +1865,10 @@ डिस्कनेक्ट किया गया Signal कॉल लिंक - - लिंक के माध्यम से इस कॉल से जुड़ने वाले किसी भी व्यक्ति को आपका नाम, फोटो और फोन नंबर दिखाई देगा। + + लिंक के माध्यम से इस कॉल से जुड़ने वाले किसी भी व्यक्ति को आपका नाम, फोटो और फोन नंबर दिखाई देगा। + + लिंक के माध्यम से इस कॉल में शामिल होने वाले किसी भी व्यक्ति को आपका नाम और फोटो दिखाई देगा। अंदर जाने देने की प्रतीक्षा में… @@ -2296,7 +2302,7 @@ सफलतापूर्वक यूज़रनेम हटा दिया गया। एक नेटवर्क त्रुटि का सामना करना पड़ा| - Too many attempts made, please try again later. + बहुत अधिक प्रयास किए गए, कृपया बाद में पुनः प्रयास करें। यह यूज़रनेम ले लिया गया है। यूज़रनेम में केवल a–Z, 0–9, और अंडरस्कोर शामिल हो सकते हैं। यूज़रनेम एक संख्या से शुरू नहीं हो सकते हैं। @@ -3894,6 +3900,12 @@ कोई भी यह नहीं देख पाएगा कि आप Signal पर हैं, जब तक कि आप उन्हें संदेश न भेजें या उनके साथ चैट न करें। "इस सेटिंग को बदलने के लिए, ‘मेरा नंबर कौन देख सकता है’ को ‘कोई नहीं’ पर सेट करें।" + + क्या आपको यकीन है? + + \"कौन मुझे नंबर से ढूंढ सकता है\" से लेकर \"कोई नहीं\" की सेटिंग लोगों के लिए आपको Signal पर ढूंढना मुश्किल करेगी। + + रद्द करें सभी कोई नहीं स्क्रीन लॉक @@ -4391,11 +4403,16 @@ अच्छा विवरण + मानक + तेज़, कम डेटा + उच्च + धीमा, अधिक डेटा - फ़ोटो की गुणवत्ता + + मीडिया क्वालिटी अपने मित्रों को आमंत्रित करें @@ -4871,6 +4888,28 @@ एक या उससे ज़्यादा आइटम बहुत बड़े थे एक या अधिक आइटम अमान्य थे बहुत ज़्यादा आइटम चुने गए + + एक बार देखने के लिए वीडियो सेट किया गया + + एक बार देखने के लिए फ़ोटो सेट किया गया + + उच्च गुणवत्ता के लिए वीडियो सेट किया गया + + मानक गुणवत्ता के लिए वीडियो सेट किया गया + + उच्च गुणवत्ता के लिए फोटो सेट किया गया + + मानक गुणवत्ता के लिए फोटो सेट किया गया + + + उच्च गुणवत्ता के लिए %1$d आइटम सेट किया गया + उच्च गुणवत्ता के लिए %1$d आइटम सेट किए गए + + + + मानक गुणवत्ता के लिए %1$d आइटम सेट किया गया + मानक गुणवत्ता के लिए %1$d आइटम सेट किए गए + रद्द करें ड्रॉ करें @@ -4895,6 +4934,20 @@ बदलाव को नामंज़ूर करें? इस फ़ोटो में आपने जो भी बदलाव किए हैं वह खो देंगे. + + %1$s मिला + + \"%1$s\" के साथ चैट शुरू करें + + चैट पर जाएँ + + + डिवाइस को लिंक करें? + + ऐसा लगता है कि आप Signal डिवाइस को लिंक करने का प्रयास कर रहे हैं। जारी रखें पर टैप करें और इसे लिंक करने के लिए कोड को फिर से स्कैन करें। + + जारी रखें + मेरे बैज फ़ीचर किया गया बैज @@ -4993,7 +5046,7 @@ भुगतान लंबित - आपका %1$s का बैंक हस्तांतरण लंबित है। बैंक हस्तांतरण को पूरा होने में आमतौर पर 1 कार्यदिवस लगता है। + आपका %1$s का बैंक हस्तांतरण लंबित है। बैंक ट्रांसफर को पूरा करने में 1 से 14 कारोबारी दिन लग सकते हैं। अधिक जानें @@ -5937,9 +5990,9 @@ आपका दान लंबित है - बैंक हस्तांतरण प्रक्रिया में आमतौर पर 1 कार्यदिवस लगता है। कृपया अपना सब्सक्रिप्शन अपडेट करने से पहले इस भुगतान के पूरा होने तक इंतजार करें। + बैंक ट्रांसफर को प्रोसेस करने में 1 से 14 कारोबारी दिन लग सकते हैं। कृपया अपना सब्सक्रिप्शन अपडेट करने से पहले इस भुगतान के पूरा होने तक इंतजार करें। - बैंक हस्तांतरण प्रक्रिया में आमतौर पर 1 कार्यदिवस लगता है। कृपया, दूसरा दान करने से पहले इस भुगतान के पूरा होने तक इंतजार करें। + बैंक ट्रांसफर को प्रोसेस करने में 1 से 14 कारोबारी दिन लग सकते हैं। कृपया, दूसरा दान करने से पहले इस भुगतान के पूरा होने तक इंतजार करें। आपका दान अभी भी संसाधित किया जा रहा है। आपके कनेक्शन के आधार पर इसमें कुछ समय लग सकता है। कृपया अपना सब्सक्रिप्शन अपडेट करने से पहले इस भुगतान के पूरा होने तक इंतजार करें। @@ -6091,7 +6144,7 @@ आपका एकमुश्त दान लंबित है। आपका दान प्राप्त होने पर आप अपने प्रोफाइल पर %1$s बैज प्रदर्शित कर सकेंगे। - बैंक हस्तांतरण प्रक्रिया में आमतौर पर 1 कार्यदिवस लगता है। %1$s + बैंक ट्रांसफर को प्रोसेस करने में 1 से 14 कारोबारी दिन लग सकते हैं। %1$s अधिक जानें @@ -6432,6 +6485,8 @@ कॉल विवरण + + कॉल नाम संपादित करें कॉल नाम जोड़ें @@ -6499,6 +6554,10 @@ आपका QR कोड और लिंक फिर से स्थापित कर दिया गया है और एक नया QR कोड और लिंक बनाया गया है। Signal पर मुझसे चैट करने के लिए इस QR कोड को अपने फोन से स्कैन करें। + + QR कोड नहीं मिला + + Signal QR कोड वाली अन्य इमेज को स्कैन करने की कोशिश करें। इस लिंक वाला कोई भी व्यक्ति आपका यूज़रनेम देख सकता है और आपसे चैट शुरू कर सकता है। इसे केवल उन लोगों के साथ साझा करें, जिन पर आपको भरोसा है। @@ -6590,6 +6649,10 @@ %1$s एक Signal यूज़र नहीं है। क्या आप इस नंबर को आमंत्रित करना चाहेंगे? आमंत्रण + + QR कोड स्कैन करें + + एक नेटवर्क त्रुटि हो गई। बाद में दोबरा प्रयास करें। diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 2278904507..df08c9e693 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -432,6 +432,8 @@ Signal više ne podržava slanje SMS poruka. Signal više ne podržava slanje SMS poruka. Pozovite korisnika %1$s u Signal da bi vaš razgovor ostao ovdje. + + Ova osoba više ne koristi Molly. Pozovite ju da se vrati u Molly kako bi vaš razgovor ostao ovdje. Pozovi u Molly @@ -554,7 +556,7 @@ Prijavljeno kao neželjeni sadržaj - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Obavijestili ste Signal da ova osoba možda šalje neželjene poruke. Signal ne može vidjeti sadržaj nijednog razgovora. Prijavljeno kao neželjeni sadržaj @@ -575,7 +577,7 @@ Prijevare s kriptovalutama ili novčane prijevare - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ako vam osoba koju ne poznajete pošalje poruku o kriptovaluti (kao što je Bitcoin) ili nekoj financijskoj prilici, budite oprezni – vjerojatno je riječ o prijevari. Nejasne ili nevažne poruke @@ -854,7 +856,7 @@ Pregledaj - Trajna pogreška u komunikaciji Signala! + Trajna pogreška u komunikaciji Mollya! Molly se nije uspješno registrirao na Google Play Services. Molly poruke i pozivi su onemogućeni. Pokušajte se ponovno registrirati kroz Postavke > Napredno. @@ -1480,6 +1482,8 @@ %1$s je promijenio/la svoje ime profila u %2$s. %1$s je promijenio/la svoje ime profila iz %2$s u %3$s. %1$s je promijenio/la svoj profil. + + Započeli ste razgovor s korisnikom %1$s. Stvorili ste grupu. @@ -1995,8 +1999,10 @@ Odspojeno Pozivnica na Signal poziv - - Svatko tko se pridruži ovom pozivu putem poveznice vidjet će vaše ime, fotografiju i broj telefona. + + Svatko tko se pridruži ovom pozivu putem poveznice vidjet će vaše ime, fotografiju i broj telefona. + + Svatko tko se pridruži ovom pozivu putem poveznice vidjet će vaše ime i fotografiju. Čekanje potvrde za pridruživanje… @@ -2456,7 +2462,7 @@ Korisničko ime uspješno je uklonjeno. Došlo je do mrežne pogreške. - Too many attempts made, please try again later. + Previše neuspjelih pokušaja. Pokušajte ponovno kasnije. Korisničko ime je zauzeto. Korisnička imena smiju sadržavati samo a-Z, 0-9 i podvlake. Korisnička imena ne mogu započinjati s brojem. @@ -2480,7 +2486,7 @@ Broj ne može biti 00. Unesite znamenku od 1 do 9 - Numbers with more than 2 digits can\'t start with 0 + Brojevi s više od 2 znamenke ne mogu počinjati s 0 Oporavak vašeg korisničkog imena poništit će vaš trenutni QR kôd i poveznicu. Sigurno želite nastaviti? @@ -4106,6 +4112,12 @@ Nitko neće moći vidjeti da ste na Signalu, osim ako nekome ne pošaljete poruku ili ako već imate postojeći razgovor s nekime. "Za promjenu ove postavke, postavite opciju \"Tko može vidjeti moj broj\" na \"Nitko\"." + + Sigurno želite nastaviti? + + Ako za postavku \"Tko me može pronaći po broju telefona\" odaberete opciju \"Nitko\", drugi će vas korisnici teže pronaći na Signalu. + + Poništi Svi Nitko Zaključavanje zaslona @@ -4611,11 +4623,16 @@ Opis grupe + Standardno + Brže, manje podataka + Visoko + Sporije, više podataka - Kvaliteta slike + + Kvaliteta medija Pozovite svoje prijatelje @@ -5105,6 +5122,32 @@ Jedna ili više stavki bile su prevelike Jedna ili više stavki bile su nevažeće Odabrano je previše stavki + + Ovaj videozapis može se prikazati samo jednom + + Ova fotografija može se prikazati samo jednom + + Videozapis postavljen na visoku kvalitetu + + Videozapis postavljen na standardnu kvalitetu + + Fotografija postavljena na visoku kvalitetu + + Fotografija postavljena na standardnu kvalitetu + + + %1$d stavka postavljena na visoku kvalitetu + %1$d stavke postavljene na visoku kvalitetu + %1$d stavki postavljeno na visoku kvalitetu + %1$d stavki postavljeno na visoku kvalitetu + + + + %1$d stavka postavljena na standardnu kvalitetu + %1$d stavke postavljene na standardnu kvalitetu + %1$d stavki postavljeno na standardnu kvalitetu + %1$d stavki postavljeno na standardnu kvalitetu + Poništi Crtaj @@ -5129,6 +5172,20 @@ Odbaciti promjene? Izgubit ćete sve promjene koje ste napravili na ovoj fotografiji. + + Pronađeno: %1$s + + Započnite razgovor s korisnikom \"%1$s\" + + Idi na razgovor + + + Povezati uređaj? + + Čini se da pokušavate povezati uređaj sa Signalom. Dodirnite \"Nastavi\" i ponovo skenirajte kôd da biste ga povezali. + + Nastavi + Moje značke Istaknuta značka @@ -5227,7 +5284,7 @@ Potvrda plaćanja u tijeku - Čekamo potvrdu vaše uplate putem bankovnog transfera od %1$s. Obrada transakcije putem bankovnog transfera u prosjeku traje 1 radni dan. + Čekamo potvrdu vaše uplate putem bankovnog transfera od %1$s. Obrada transakcije putem bankovnog transfera može potrajati od 1 do 14 radnih dana. Saznajte više @@ -6209,9 +6266,9 @@ Vaša donacija je na čekanju - Obrada transakcije putem bankovnog transfera u prosjeku traje 1 radni dan. Prije ažuriranja pretplate pričekajte završetak transakcije. + Obrada transakcije putem bankovnog transfera može potrajati od 1 do 14 radnih dana. Prije ažuriranja pretplate pričekajte završetak transakcije. - Obrada transakcije putem bankovnog transfera u prosjeku traje 1 radni dan. Pričekajte završetak transakcije prije nego što izvršite novu donaciju. + Obrada transakcije putem bankovnog transfera može potrajati od 1 do 14 radnih dana. Pričekajte završetak transakcije prije nego što izvršite novu donaciju. Vaša se donacija još uvijek obrađuje. Ovisno o brzini vaše mreže, to može potrajati nekoliko minuta. Prije ažuriranja pretplate pričekajte završetak transakcije. @@ -6365,7 +6422,7 @@ Vaša jednokratna donacija je na čekanju. Moći ćete prikazati značku %1$s na vašem profilu kada zaprimimo vašu donaciju. - Obrada uplate putem bankovnog transfera u prosjeku traje 1 radni dan. %1$s + Obrada transakcije putem bankovnog transfera može potrajati od 1 do 14 radnih dana. %1$s Saznajte više @@ -6714,6 +6771,8 @@ Pojedinosti poziva + + Uredi naziv poziva Dodaj naziv poziva @@ -6781,6 +6840,10 @@ Vaši prethodni QR kôd i poveznica su poništeni te su stvoreni novi QR kôd i poveznica. Skeniraj ovaj QR kôd svojim uređajem i započni razgovor sa mnom na Signalu. + + QR kôd nije pronađen + + Pokušajte skenirati drugu sliku koja sadrži QR kôd za Signal. Svaka osoba koja ima pristup poveznici može vidjeti vaše korisničko ime i započeti razgovor s vama. Podijelite ovu poveznicu samo s osobama kojima vjerujete. @@ -6876,6 +6939,10 @@ %1$s nije korisnik Signala. Želite li pozvati sljedeći broj da se pridruži Signalu? Pozovi + + Skeniraj QR kôd + + Došlo je do mrežne pogreške. Pokušajte ponovno kasnije. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 84dc478ad4..937c5c76ef 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -426,6 +426,8 @@ A Signal már nem támogatja az SMS-ek küldését. A Signal már nem támogatja az SMS-ek küldését. Hívd meg %1$s ismerősöd a Signal-szolgáltatásba, és beszélgessetek itt. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Meghívás a Mollyra @@ -536,7 +538,7 @@ Jelentve kéretlen üzenetként - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + A Signal értesítést kap arról, hogy ez a személy esetleg kéretlen üzeneteket küldözget. A Signal nem látja a csevegések tartalmát. Megjelölve kéretlen üzenetként @@ -557,7 +559,7 @@ Kripto- vagy pénzzel kapcsolatos átverések - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ha valaki, akit nem ismersz, kriptopénzről (például Bitcoinról) vagy pénzügyi lehetőséggel kapcsolatban küld üzenetet, legyél óvatos – valószínűleg kéretlen levélszemetet kaptál. Homályos vagy irreleváns üzenetek @@ -818,7 +820,7 @@ Megtekintés - Elhúzódó Signal kommunikációs hiba! + Elhúzódó Molly kommunikációs hiba! A Molly nem tudott beregisztrálni a Google Play Szolgáltatásokra. A Molly üzenetek és hívások ezért le lettek tiltva. Kérlek próbálj meg újraregisztrálni a Beállítások > Haladó-ban! @@ -1386,6 +1388,8 @@ %1$s megváltoztatta a profilnevét %2$s névre. %1$s megváltoztatta a profilnevét %2$s névről %3$s névre. %1$s megváltoztatta profilját. + + You started this chat with %1$s. Létrehoztad a csoportot. @@ -1861,8 +1865,10 @@ Lecsatlakozva Signal-híváshivatkozás - - Bárki, aki a hivatkozáson keresztül csatlakozik a híváshoz, látni fogja a nevedet, a fényképedet és a telefonszámodat. + + Bárki, aki a hivatkozáson keresztül csatlakozik a híváshoz, látni fogja a nevedet, a fényképedet és a telefonszámodat. + + Bárki, aki csatlakozik ehhez a híváshoz a linken keresztül, látni fogja a nevedet és a fényképedet. Beengedésre vár… @@ -2296,7 +2302,7 @@ A felhasználónév eltávolítása sikeres volt. Hálózati hiba történt. - Too many attempts made, please try again later. + Túl sok kísérlet történt, kérjük, próbáld meg újra később. A felhasználónév foglalt. A felhasználónevek csak a-Z, 0-9 és alsóvonás karaktereket tartalmazhatnak. A felhasználónevek nem kezdődhetnek számmal. @@ -2320,7 +2326,7 @@ Ez a szám nem lehet 00. Írj be egy számjegyet 1 és 9 között - Numbers with more than 2 digits can\'t start with 0 + A 2-nél több számjegyből álló számok nem kezdődhetnek 0-val A felhasználónév helyreállítása visszaállítja a meglévő QR-kódot és hivatkozást. Biztos vagy benne? @@ -3894,6 +3900,12 @@ Senki sem láthatja, hogy használod a Signalt, hacsak nem küldesz valakinek üzenetet, vagy nem folytatsz csevegést valakivel. "A beállítás módosításához állítsd a „Ki láthatja a telefonszámomat” „Senki” lehetőségre." + + Biztos vagy benne? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Mégse Mindenki Senki Képernyőzár @@ -4391,11 +4403,16 @@ Csoportleírás + Normál + Gyorsabb, kevesebb adat + Magas + Lassabb, több adat - Fotóminőség + + Médiafájl minősége Hívd meg barátaidat! @@ -4871,6 +4888,28 @@ Egy vagy több elem túl nagy méretű Egy vagy több elem érvénytelen formátumú Túl sok kijelölt elem + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Mégsem Rajz @@ -4895,6 +4934,20 @@ Elveted a változásokat? Elvesztesz minden változtatást, amit ezen a fotón csináltál. + + Found %1$s + + Start a chat with \"%1$s\" + + Ugrás a csevegéshez + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Tovább + Jelvényeim Kitűzött jelvény @@ -4993,7 +5046,7 @@ Fizetés függőben - %1$s összegű banki átutalásod függőben van. A banki átutalások általában 1 munkanapot vesznek igénybe. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Tudj meg többet @@ -5937,9 +5990,9 @@ Van egy függőben lévő adományod - A banki átutalások feldolgozása általában 1 munkanapot vesz igénybe. Mielőtt frissíted az előfizetésed, kérjük, várd meg, amíg a fizetés teljesül. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - A banki átutalások feldolgozása általában 1 munkanapot vesz igénybe. Mielőtt újra adományoznál, kérjük, várd meg, amíg a fizetés teljesül. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Az adományod feldolgozása még folyamatban van. Ez a kapcsolattól függően néhány percig is eltarthat. Mielőtt frissíted az előfizetésedet, kérjük, várd meg, amíg a fizetés teljesül. @@ -6091,7 +6144,7 @@ Egyszeri adományod függőben van. Amikor az adományod megérkezik, megjelenítheted a(z) %1$s jelvényt a profilodban. - A banki átutalások feldolgozása általában 1 munkanapot vesz igénybe. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Tudj meg többet @@ -6432,6 +6485,8 @@ Hívás adatai + + Hívás nevének szerkesztése Hívásnév megadása @@ -6499,6 +6554,10 @@ A QR-kódod és a hivatkozásod visszaállításra került, és egy új QR-kódot és linket hoztunk létre. Olvasd be ezt a QR-kódot a telefonoddal és csevegj velem a Signalban. + + QR code not found + + Try scanning another image containing a Signal QR code. A hivatkozás birtokában bárki megtekintheti a felhasználóneved, és csevegést kezdeményezhet veled. Csak olyanokkal oszd meg, akikben megbízol. @@ -6590,6 +6649,10 @@ %1$s nem Signal-felhasználó. Szeretnéd meghívni ezt a számot? Meghívás + + QR kód beolvasása + + Hálózati hiba történt. Próbáld újra később. diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 08742fdf99..7c41fd64fd 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -423,6 +423,8 @@ Pengiriman pesan SMS tidak lagi didukung di Signal. Pengiriman pesan SMS tidak lagi didukung di Signal. Undang %1$s ke Signal untuk menyimpan percakapan di sini. + + Orang ini sudah tidak menggunakan Molly. Undang dia ke Molly untuk melakukan percakapan di sini. Undang ke Molly @@ -527,7 +529,7 @@ Spam dilaporkan - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal telah diberi tahu bahwa orang ini mungkin mengirim spam. Signal tidak dapat melihat isi obrolan apa pun. Dilaporkan sebagai spam @@ -548,7 +550,7 @@ Penipuan uang atau kripto - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Jika orang yang tidak dikenal mengirim pesan tentang mata uang kripto (seperti Bitcoin) atau peluang finansial, waspadalah—mungkin itu spam. Pesan tidak jelas atau tidak relevan @@ -800,7 +802,7 @@ Lihat - Kegagalan komunikasi Signal permanen! + Kegagalan komunikasi Molly permanen! Molly tidak dapat melakukan registrasi melalui Google Play Services. Fitur Molly seperti pesan dan panggilan dinonaktifkan, mohon registrasi ulang melalui Pengaturan > Lanjutan. @@ -1339,6 +1341,8 @@ %1$s mengganti nama profilnya menjadi %2$s. %1$s mengganti nama profilnya dari %2$s menjadi %3$s. %1$s mengganti profilnya. + + Anda memulai obrolan ini dengan %1$s. Anda telah membuat grup. @@ -1794,8 +1798,10 @@ Terputus Tautan panggilan Signal - - Siapa pun yang gabung dengan panggilan ini via tautan akan melihat nama, foto, dan nomor telepon Anda. + + Siapa pun yang gabung dengan panggilan ini via tautan akan melihat nama, foto, dan nomor telepon Anda. + + Siapa pun yang bergabung dalam panggilan ini via tautan akan melihat nama dan foto Anda. Menunggu diizinkan masuk… @@ -2216,7 +2222,7 @@ Nama pengguna berhasil dihapus. Terjadi galat jaringan. - Too many attempts made, please try again later. + Terlalu banyak percobaan, coba lagi nanti. Nama pengguna telah digunakan. Nama pengguna hanya boleh berisi a–Z, 0–9, dan garisbawah. Nama pengguna tidak boleh dimulai dengan angka. @@ -2240,7 +2246,7 @@ Nomor tidak boleh 00. Masukkan angka antara 1–9 - Numbers with more than 2 digits can\'t start with 0 + Angka yang lebih dari 2 digit tidak dapat dimulai dengan 0 Jika nama pengguna Anda dipulihkan, kode QR dan tautan yang ada akan direset. Anda yakin? @@ -3788,6 +3794,12 @@ Tidak seorang pun bisa melihat Anda di Signal kecuali Anda mengirimi mereka pesan atau sudah pernah mengobrol dengan mereka. "Untuk mengubahnya, tetapkan pengaturan Siapa bisa melihat nomor saya ke opsi Tidak ada." + + Anda yakin? + + Jika opsi \"Siapa bisa menemukan saya dengan nomor telepon\" diatur jadi \"Tidak ada\", orang akan lebih sulit menemukan Anda di Signal. + + Batal Semua orang Tak seorangpun Layar terkunci @@ -4281,11 +4293,16 @@ Deskripsi grup + Standar + Lebih cepat, sedikit data + Tinggi + Lebih lambat, lebih banyak data - Kualitas foto + + Kualitas media Undang teman Anda @@ -4754,6 +4771,26 @@ Ukuran satu atau beberapa media terlalu besar Satu atau beberapa media salah Terlalu banyak media dipilih + + Video diatur untuk dilihat sekali + + Photo set to view once + + Video diatur ke kualitas tinggi + + Video diatur ke kualitas standar + + Foto diatur ke kualitas tinggi + + Foto diatur ke kualitas standar + + + %1$d items set to high quality + + + + %1$d items set to standard quality + Batal Gambar @@ -4778,6 +4815,20 @@ Batalkan perubahan? Anda akan kehilangan perubahan yang telah dibuat terhadap foto ini. + + Menemukan %1$s + + Mulai obrolan dengan \"%1$s\" + + Buka obrolan + + + Hubungkan perangkat? + + Tampaknya Anda sedang mencoba menghubungkan perangkat Signal. Ketuk lanjutkan dan pindai kode lagi untuk menghubungkannya. + + Lanjutkan + Lencana saya Lencana unggulan @@ -4876,7 +4927,7 @@ Pembayaran tertunda - Transfer bank Anda sebesar %1$s tertunda. Proses transfer biasanya perlu waktu 1 hari kerja untuk diselesaikan. + Transfer bank Anda sebesar %1$s tertunda. Proses transfer biasanya perlu waktu 1 sampai 14 hari kerja untuk diselesaikan. Pelajari selengkapnya @@ -5801,9 +5852,9 @@ Anda memiliki donasi yang tertunda - Proses transfer bank biasanya perlu waktu 1 hari kerja. Harap tunggu hingga pembayaran ini selesai sebelum memperbarui langganan Anda. + Proses transfer bank biasanya perlu waktu 1 sampai 14 hari kerja. Harap tunggu hingga pembayaran ini selesai sebelum memperbarui langganan Anda. - Proses transfer bank biasanya perlu waktu 1 hari kerja. Harap tunggu hingga pembayaran ini selesai sebelum memberikan donasi lagi. + Proses transfer bank biasanya perlu waktu 1 sampai 14 hari kerja. Harap tunggu hingga pembayaran ini selesai sebelum memberikan donasi lagi. Donasi Anda sedang diproses. Ini dapat memakan waktu beberapa menit tergantung koneksi Anda. Harap tunggu hingga pembayaran ini selesai sebelum memperbarui langganan Anda. @@ -5954,7 +6005,7 @@ Donasi satu-kali Anda tertunda. Anda dapat menampilkan lencana %1$s di profil saat donasi telah diterima. - Proses transfer bank biasanya perlu waktu 1 hari kerja. %1$s + Proses transfer bank biasanya perlu waktu 1 sampai 14 hari kerja. %1$s Pelajari selengkapnya @@ -6291,6 +6342,8 @@ Detail panggilan + + Edit nama panggilan Tambahkan nama panggilan @@ -6358,6 +6411,10 @@ Kode QR dan tautan Anda telah direset dan kode QR serta tautan baru telah dibuat. Pindai kode QR ini dengan ponsel untuk mengobrol dengan saya di Signal. + + Kode QR tidak ditemukan + + Coba pindai gambar lain yang memuat kode QR Signal. Siapa pun yang punya tautan ini bisa melihat nama pengguna Anda dan memulai obrolan dengan Anda. Hanya bagikan dengan orang yang Anda percaya. @@ -6447,6 +6504,10 @@ %1$s bukan pengguna Signal. Apakah Anda ingin mengundang nomor ini? Undang + + Pindai kode QR + + Terjadi galat jaringan. Coba lagi nanti. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index d6336ada6d..9b51791df4 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -426,6 +426,8 @@ La messaggistica via SMS non è più supportata su Signal. La messaggistica via SMS non è più supportata su Signal. Invita %1$s su Signal per continuare la conversazione in app. + + Questa persona non sta più usando Molly. Invitala su Molly per continuare la conversazione in app. Invita a Molly @@ -536,7 +538,7 @@ Segnalato come spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Hai avvertito Signal che questa persona sta inviando contenuti spam. Ricorda che Signal non può vedere il contenuto delle chat. Segnalato come spam @@ -557,7 +559,7 @@ Criptovalute e truffe economiche - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Hai ricevuto l\'ennesimo messaggio su una criptovaluta che ti cambierà la vita? Chiunque ti prometta grossi guadagni, in breve tempo e con poco sforzo, vuole sicuramente truffarti. Messaggi vaghi e ambigui @@ -818,7 +820,7 @@ Mostra - Comunicazione Signal fallita definitivamente! + Comunicazione Molly fallita definitivamente! Molly è stato impossibilitato a registrarsi con i sevizi di Google Play. I suoi messaggi e le chiamate sono state disabilitate, si prega di provare e ri-registrare in Impostazioni > Avanzate. @@ -1386,6 +1388,8 @@ %1$s ha cambiato il suo nome profilo in %2$s. %1$s ha cambiato il suo nome profilo da %2$s a %3$s. %1$s ha cambiato il suo profilo. + + Hai iniziato questa chat con %1$s. Hai creato il gruppo. @@ -1861,8 +1865,10 @@ Disconnesso Link chiamata Signal - - Chiunque si unirà alla chiamata tramite il link potrà vedere il tuo nome, foto profilo e numero di telefono. + + Chiunque si unirà alla chiamata tramite il link potrà vedere il tuo nome, foto profilo e numero di telefono. + + Chiunque si unirà alla chiamata tramite il link potrà vedere il tuo nome e foto profilo. In attesa di entrare… @@ -2296,7 +2302,7 @@ Nome utente rimosso con successo. Si è verificato un errore di rete. - Too many attempts made, please try again later. + Hai fatto troppi tentativi, riprova più tardi. Questo nome utente è già in uso. I nomi utente possono includere solo a–Z, 0–9 e trattini bassi. I nomi utente non possono iniziare con un numero. @@ -2320,7 +2326,7 @@ Questo numero non può essere 00. Inserisci una cifra tra 1-9 - Numbers with more than 2 digits can\'t start with 0 + I numeri con più di due cifre non possono iniziare con 0 Se ripristini il tuo nome utente, il tuo codice QR e link attuali verranno modificati. Vuoi procedere comunque? @@ -3894,6 +3900,12 @@ Nessuna persona potrà sapere che sei su Signal, a meno che tu non invii un messaggio (o se avete già una chat in corso). "Per modificare questa opzione, imposta \"Chi può vedere il mio numero\" su \"Nessuna persona\"" + + Vuoi procedere comunque? + + Se imposti l\'opzione \"Chi può trovarmi tramite il mio numero di telefono\" su \"Nessuna persona\", diventerà più difficile trovarti su Signal. + + Annulla Chiunque Nessuno Blocco schermo @@ -4391,11 +4403,16 @@ Descrizione gruppo + Normale + Più veloce, meno dati + Alta + Più lento, più dati - Qualità foto + + Qualità media Invita i tuoi amici @@ -4871,6 +4888,28 @@ Uno o più elementi erano troppo grandi Uno o più elementi non erano validi Troppi elementi selezionati + + Video impostato per una singola visione + + Foto impostata per una singola visione + + Video impostato su alta qualità + + Video impostato su qualità standard + + Foto impostata su alta qualità + + Foto impostata su qualità standard + + + %1$d elemento impostato su alta qualità + %1$d elementi impostati su alta qualità + + + + %1$d elemento impostato su qualità standard + %1$d elementi impostati su qualità standard + Annulla Disegna @@ -4895,6 +4934,20 @@ Eliminare le modifiche? Perderai tutte le modifiche che hai fatto a questa foto. + + Trovato l\'utente %1$s + + Inizia una chat con \"%1$s\" + + Vai alla chat + + + Collegare il dispositivo? + + Stai provando a collegare un dispositivo a Signal? Tocca su \"Continua\" e scansiona di nuovo il codice per collegarlo. + + Continua + I miei badge Badge in evidenza @@ -4993,7 +5046,7 @@ Pagamento in sospeso - Il tuo bonifico bancario di %1$s è in sospeso. L\'elaborazione dei bonifici bancari di solito richiede un giorno lavorativo. + Il tuo bonifico bancario di %1$s è in sospeso. L\'elaborazione dei bonifici bancari di solito richiede da 1 a 14 giorni lavorativi. Scopri di più @@ -5937,9 +5990,9 @@ Hai una donazione in sospeso - L\'elaborazione dei bonifici bancari di solito richiede un giorno lavorativo. Attendi il completamento del pagamento prima di aggiornare/cambiare il tuo abbonamento. + L\'elaborazione dei bonifici bancari di solito richiede da 1 a 14 giorni lavorativi. Attendi il completamento di questa transazione prima di aggiornare/cambiare il tuo abbonamento. - L\'elaborazione dei bonifici bancari di solito richiede un giorno lavorativo. Attendi il completamento del pagamento prima di effettuare un\'altra donazione. + L\'elaborazione dei bonifici bancari di solito richiede da 1 a 14 giorni lavorativi. Attendi il completamento di questa transazione prima di effettuare un\'altra donazione. La tua donazione è ancora in fase di elaborazione. Questo processo può richiedere qualche minuto in base alla tua connessione. Attendi il completamento di questa transazione prima di aggiornare/cambiare il tuo abbonamento. @@ -6091,7 +6144,7 @@ La tua donazione singola è in sospeso. Potrai mostrare il Badge %1$s sul tuo profilo quando la donazione verrà ricevuta. - L\'elaborazione dei bonifici bancari di solito richiede un giorno lavorativo. %1$s + L\'elaborazione dei bonifici bancari di solito richiede da 1 a 14 giorni lavorativi. %1$s Scopri di più @@ -6432,6 +6485,8 @@ Dettagli della chiamata + + Modifica nome chiamata Aggiungi nome chiamata @@ -6499,6 +6554,10 @@ Il tuo codice QR e link sono stati resettati e ne abbiamo creati di nuovi. Scansiona questo codice QR con il tuo telefono per chattare con me su Signal. + + Codice QR non trovato + + Prova a scansionare un\'altra immagine contenente un codice QR di Signal. Chiunque abbia questo link può vedere il tuo nome utente e iniziare una chat con te. Condividilo solo con persone di cui ti fidi. @@ -6590,6 +6649,10 @@ %1$s non è un utente di Signal. Vorresti invitare questo numero di telefono su Signal? Invita + + Scansiona codice QR + + Si è verificato un errore di rete. Riprova più tardi. diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 2e292c243b..ac4e6a25a1 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -432,6 +432,8 @@ הודעות SMS כבר לא נתמכות ב–Signal. הודעות SMS כבר לא נתמכות ב–Signal. אפשר להזמין את %1$s ל–Signal כדי להשאיר את השיחה כאן. + + האדם הזה כבר לא משתמש ב–Molly. אפשר להזמין אותו או אותה ל–Molly כדי להשאיר את השיחה כאן. הזמנה אל Molly @@ -554,7 +556,7 @@ דוּוח/ה כספאם - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal קיבלה הודעה שהאדם הזה חשוד בשליחת ספאם. Signal לא יכולה לראות את התוכן של אף צ׳אט. דוּוח/ה כספאם @@ -575,7 +577,7 @@ הונאות קריפטו או הונאות כספיות - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + אם מישהו שלא מכירים שולח הודעות על מטבעות קריפטו (כמו ביטקוין) או הזדמנות פיננסית, חשוב להיזהר—זה כנראה ספאם. הודעות מעורפלות או לא רלוונטיות @@ -854,7 +856,7 @@ הצג - כישלון תקשורת קבוע של Signal! + כישלון תקשורת קבוע של Molly! Molly לא היה יכול להירשם עם שירותי Google Play. הודעות ושיחות של Molly הושבתו, אנא נסה להירשם מחדש בהגדרות < מתקדם. @@ -1480,6 +1482,8 @@ %1$s שינה/שינתה את שם הפרופיל שלו/שלה אל %2$s. %1$s שינה/שינתה את שם הפרופיל שלו/שלה מן %2$s אל %3$s. %1$s שינה/שינתה את הפרופיל שלו/שלה. + + התחלת את הצ׳אט הזה עם %1$s. יצרת את הקבוצה. @@ -1995,8 +1999,10 @@ מנותק לינק שיחת Signal - - כל מי שיצטרף לשיחה הזו דרך הלינק יראה את השם, התמונה ומספר הטלפון שלך. + + כל מי שיצטרף לשיחה הזו דרך הלינק יראה את השם, התמונה ומספר הטלפון שלך. + + כל מי שיצטרפו לשיחה הזו באמצעות הלינק יוכלו לראות את השם והתמונה שלך. מחכה שיכניסו אותך… @@ -2456,7 +2462,7 @@ שם משתמש הוסר בהצלחה. היישום נתקל בשגיאת רשת. - Too many attempts made, please try again later. + נעשו יותר מדי ניסיונות, יש לנסות שוב מאוחר יותר. שם משתמש זה תפוס. שמות משתמש יכולים להכיל רק a–Z, 0–9, וקווים תחתונים. שמות משתמש אינם יכולים להתחיל במספר. @@ -2480,7 +2486,7 @@ המספר הזה לא יכול להיות 00. יש להזין ספרה בין 9–1 - Numbers with more than 2 digits can\'t start with 0 + מספרים עם יותר מ–2 ספרות לא יכולים להתחיל ב–0 שחזור שם המשתמש שלך יאפס את קוד ה–QR והלינק הקיימים שלך. להמשיך? @@ -4106,6 +4112,12 @@ אנשים לא יוכלו לראות אותך ב–Signal אלא אם שלחת להם הודעה או שיש לך צ\'אט קיים איתם. "כדי לשנות את ההגדרה הזו, יש להגדיר את ׳מי יכול לראות את המספר שלי׳ כ׳אף אחד׳." + + להמשיך? + + להגדיר את ״מי יכול למצוא אותי לפי המספר שלי״ כ״אף אחד״ יקשה על אנשים למצוא אותך ב–Signal. + + ביטול כולם אף אחד נעילת מסך @@ -4611,11 +4623,16 @@ תיאור קבוצה + תקנית + מהירה יותר, פחות נתונים + גבוה + איטית יותר, יותר נתונים - איכות תמונה + + איכות מדיה הזמן את חבריך @@ -5105,6 +5122,32 @@ פריט אחד או יותר היו יותר מדי גדולים פריט אחד או יותר היו בלתי תקפים יותר מדי פריטים נבחרו + + וידאו מוגדר לצפייה חד פעמית + + תמונה מוגדרת לצפייה חד פעמית + + וידאו מוגדר לאיכות גבוהה + + וידאו מוגדר לאיכות סטנדרטית + + תמונה מוגדרת לאיכות גבוהה + + תמונה מוגדרת לאיכות רגילה + + + פריט %1$d מוגדר לאיכות גבוהה + %1$d פריטים מוגדרים לאיכות גבוהה + %1$d פריטים מוגדרים לאיכות גבוהה + %1$d פריטים מוגדרים לאיכות גבוהה + + + + פריט %1$d מוגדר לאיכות רגילה + %1$d פריטים מוגדרים לאיכות רגילה + %1$d פריטים מוגדרים לאיכות רגילה + %1$d פריטים מוגדרים לאיכות רגילה + בטל צייר @@ -5129,6 +5172,20 @@ להשמיט שינויים? תאבד שינויים כלשהם שעשית אל התמונה הזאת. + + מצאנו את %1$s + + התחלת צ׳אט עם ״%1$s״ + + מעבר לצ\'אט + + + לקשר מכשיר? + + נראה שאת/ה מנסה לקשר מכשיר Signal. יש ללחוץ על המשך ולסרוק את הקוד שוב כדי לקשר אותו. + + המשך + התגים שלי תג פרופיל @@ -5227,7 +5284,7 @@ תשלום ממתין - ההעברה הבנקאית שלך על סך %1$s ממתינה. עיבוד העברות בנקאיות לוקח בדרך כלל יום עסקים 1. + ההעברה הבנקאית שלך על סך %1$s ממתינה. השלמת העברות בנקאיות יכולה לקחת בין 1–14 ימי עסקים. למידע נוסף @@ -6209,9 +6266,9 @@ יש לך תרומה בהמתנה - עיבוד העברות בנקאיות לוקח בדרך כלל יום עסקים 1. יש להמתין עד שתשלום זה יסתיים לפני עדכון המנוי שלך. + עיבוד העברות בנקאיות יכול לקחת בין 1–14 ימי עסקים. יש להמתין עד שתשלום זה יסתיים לפני עדכון המנוי שלך. - עיבוד העברות בנקאיות לוקח בדרך כלל יום עסקים 1. יש להמתין עד שתשלום זה יסתיים לפני ביצוע תרומה נוספת. + עיבוד העברות בנקאיות יכול לקחת בין 1–14 ימי עסקים. יש להמתין עד שתשלום זה יסתיים לפני ביצוע תרומה נוספת. התרומה שלך עדיין בתהליך עיבוד. זה יכול לקחת מספר דקות בהתאם לחיבור שלך. יש להמתין עד שתשלום זה יסתיים לפני עדכון המנוי שלך. @@ -6365,7 +6422,7 @@ התרומה החד פעמית שלך ממתינה. כשהתרומה שלך תתקבל, תהיה לך אפשרות להציג את תג %1$s בפרופיל שלך. - עיבוד העברות בנקאיות לוקח בדרך כלל יום עסקים 1. %1$s + עיבוד העברות בנקאיות יכול לקחת בין 1–14 ימי עסקים. %1$s למידע נוסף @@ -6714,6 +6771,8 @@ פרטי שיחה + + עריכת שם שיחה הוספת שם שיחה @@ -6781,6 +6840,10 @@ קוד ה–QR והלינק שלך אופסו ונוצרו קוד QR ולינק חדשים. אפשר לסרוק את קוד ה–QR הזה עם הטלפון שלך כדי לשוחח איתי ב–Signal. + + קוד QR לא נמצא + + יש לנסות לסרוק תמונה אחרת שמכילה קוד QR של Signal. כל מי שיש לו את הלינק הזה יוכל לראות את שם המשתמש שלך ולהתחיל איתך צ׳אט. חשוב לשתף רק עם אנשים שבוטחים בהם. @@ -6876,6 +6939,10 @@ %1$s לא משתמש/ת ב–Signal. רוצה להזמין את המספר הזה? הזמן + + סריקת קוד QR + + היישום נתקל בשגיאת רשת. נסה שוב מאוחר יותר. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 8e421b2fc3..7c17d48887 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -423,6 +423,8 @@ SMSメッセージはSignalでサポートされなくなりました。 SMSメッセージはSignalでサポートされなくなりました。%1$sをSignalへ招待して会話を続けてください。 + + この方は、もうMollyを使っていません。Mollyへ招待して会話を続けてください。 Mollyへの招待 @@ -527,7 +529,7 @@ スパムとして報告する - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + この人物がスパムを送信している可能性がSignalに通知されました。Signalはチャットの内容を見ることはできません。 スパムとして報告する @@ -548,7 +550,7 @@ 暗号通貨または金銭詐欺 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 知らない人から暗号通貨(ビットコインなど)や金融に関する機会についてメッセージが送られてきた場合はご注意ください。おそらくスパムです。 曖昧または関連性がないメッセージ @@ -800,7 +802,7 @@ 表示する - Signalの永続的な通信エラー! + Mollyの永続的な通信エラー! Google Play開発者サービスにMollyを登録できなかったため、Mollyのメッセージと通話は無効になっています。設定 > 詳細設定で再登録を試してください。 @@ -1339,6 +1341,8 @@ %1$s がプロフィールネームを %2$s に変更しました。 %1$s がプロフィールネームを %2$s から %3$s に変更しました。 %1$s がプロフィールを更新しました。 + + これは%1$sと始めたチャットです。 グループを作成しました。 @@ -1794,8 +1798,10 @@ 接続していません Signal通話リンク - - リンク経由でこの通話に参加する人には、あなたの名前、写真、電話番号が表示されます。 + + リンク経由でこの通話に参加する人には、あなたの名前、写真、電話番号が表示されます。 + + リンク経由でこの通話に参加する人には、あなたの名前と写真が表示されます。 承認待ちです… @@ -2216,7 +2222,7 @@ ユーザーネームを削除しました。 ネットワークエラーが発生しました。 - Too many attempts made, please try again later. + 試行回数が多すぎます。しばらくしてから、もう一度お試しください。 このユーザーネームは既に使用されています。 ユーザーネームには半角の英数字とアンダーバーのみ使用できます。 ユーザーネームの先頭に数字は使用できません。 @@ -2240,7 +2246,7 @@ この数字を00にすることはできません。1–9の数字を入力してください - Numbers with more than 2 digits can\'t start with 0 + 2桁以上の数字が0から始まることはありません ユーザーネームを復元すると、これまでのQRコードとリンクがリセットされます。本当に復元しますか? @@ -3788,6 +3794,12 @@ あなたからメッセージを送るか、以前からチャットをやりとりしていない限り、あなたがSignalを利用していることは誰にもわかりません。 "この設定を変更するには、自分の番号を閲覧できる人を「誰も閲覧できない」に設定します。" + + 本当に復元しますか? + + 「私を電話番号から検索できる人」を「なし」に設定すると、Signal上で他のユーザーはあなたを見つけにくくなります。 + + キャンセル 全員 なし 画面ロック @@ -4281,11 +4293,16 @@ グループの説明 + 標準 + 速い, 少ないデータ量 + 高画質 + 遅い, 多いデータ量 - 写真の画質 + + メディアの画質 友達を招待 @@ -4754,6 +4771,26 @@ 1つ以上のアイテムのサイズが大きすぎます 1つ以上のアイテムが不正です 選択されたアイテムが多すぎます + + ビデオは一度だけ表示するように設定されています + + 写真は一度だけ表示するように設定されています + + ビデオは高画質に設定されています + + ビデオは標準画質に設定されています + + 写真は高画質に設定されています + + 写真は標準画質に設定されています + + + %1$dアイテムが高画質に設定されています + + + + %1$dアイテムが標準画質に設定されています + キャンセル 描く @@ -4778,6 +4815,20 @@ 変更を破棄しますか? この写真に加えた変更はすべて失われます。 + + %1$sが見つかりました + + 「%1$s」とのチャットを始める + + チャットする + + + 端末をリンクしますか? + + Signal端末をリンクしようとしていますか?続ける、をタップし、もう一度コードをスキャンしてリンクしてください。 + + 続行 + マイバッジ 表示するバッジ @@ -4876,7 +4927,7 @@ 決済手続き中 - %1$sの銀行振込が手続き中です。銀行振り込みの場合、完了するまで通常1営業日かかります。 + %1$sの銀行振込が手続き中です。銀行振り込みの場合、完了するまで1~14日かかる場合があります。 詳しく見る @@ -5801,9 +5852,9 @@ 1件の寄付が手続き中です - 銀行振り込みの場合、処理されるまで通常1営業日かかります。この決済が完了してから、再度、寄付のお手続きをしてください。 + 銀行振り込みの場合、処理されるまで1~14日かかる場合があります。この決済が完了してから、再度、寄付のお手続きをしてください。 - 銀行振り込みの場合、処理されるまで通常1営業日かかります。この決済が完了してから、次の寄付をおこなってください。 + 銀行振り込みの場合、処理されるまで1~14日かかる場合があります。この決済が完了してから、次の寄付をおこなってください。 寄付のお手続きは完了していません。接続状況によっては数分かかる場合があります。 この決済が完了してから、再度、寄付のお手続きをしてください。 @@ -5954,7 +6005,7 @@ 1回限りの寄付の手続き中です。寄付が受領されると、 %1$s バッジがあなたのプロフィールに表示されます。 - 銀行振り込みの場合、処理されるまで通常1営業日かかります。%1$s + 銀行振り込みの場合、処理されるまで1~14日かかる場合があります。%1$s 詳しく見る @@ -6291,6 +6342,8 @@ 通話詳細 + + 通話名を編集する 通話名を追加する @@ -6358,6 +6411,10 @@ QRコードとリンクがリセットされ、新しいQRコードとリンクが作成されました。 このQRコードをお使いの携帯電話でスキャンして、Signalで私とチャットしましょう。 + + QRコードが見つかりません + + Signal QRコードの別の画像をスキャンしてみてください。 このリンクからは、誰でもあなたのユーザーネームを閲覧したりチャットを始めることができますので、信頼できる人とのみ共有してください @@ -6447,6 +6504,10 @@ %1$sさんはSignalユーザーではありません。この番号をSignalに招待しますか? 招待 + + QRコードをスキャンする + + ネットワークエラーが発生しました。あとで再度試してください。 diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml index 870498be57..42deeddb11 100644 --- a/app/src/main/res/values-ka/strings.xml +++ b/app/src/main/res/values-ka/strings.xml @@ -426,6 +426,8 @@ SMS მიმოწერები Signal-ში აღარ არის ხელმისაწვდომი. SMS მიმოწერები Signal-ში აღარ არის ხელმისაწვდომი. მოიწვიე %1$s Signal-ში, რათა მიმოწერა აქ განაგრძოთ. + + ეს ადამიანი Molly-ს აღარ იყენებს. მოიწვიე ის Molly-ში, რათა მიმოწერა აქ განაგრძოთ. მოიწვიე Molly-ში @@ -536,7 +538,7 @@ დარეპორტებული სპამი - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal-მა შეტყობინება მიიღო, რომ ეს ადამიანი შესაძლოა სპამს აგზავნიდეს. Signal-ს არც ერთი ჩატის შინაარსის ნახვა არ შეუძლია. დარეპორტებულია, როგორც სპამი @@ -557,7 +559,7 @@ კრიპტო ან ფულის თაღლითობები - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + თუ ვინმე უცნობი კრიპტოვალუტის (მაგალითად ბიტკოინი) ან ფინანსური შესაძლებლობის შესახებ მოგწერს, ფრთხილად იყავი—ეს სავარაუდოდ სპამია. ბუნდოვანი ან არარელევანტური შეტყობინებები @@ -818,7 +820,7 @@ ნახვა - Signal-ის კავშირის მუდმივი ხარვეზი! + Molly-ის კავშირის მუდმივი ხარვეზი! სიგნალმა ვერ მოახერხა Google Play Service-თან რეგისტრაცია. Mollyს შეტყობინებები და ზარები გათიშულია, გთხოვთ სცადოთ ხელახალი რეგისტრაცია პარამეტრები > დამატებითი. @@ -1386,6 +1388,8 @@ %1$s-მა პროფილის სახელი %2$s-ით შეცვალა. %1$s-მა პროფილის სახელი %2$s ჩაანაცვლა %3$s-ით. %1$s-მა პროფილი შეცვალა. + + შენ წამოიწყე ეს ჩატი %1$s-თან. შენ ჯგუფი შექმენი. @@ -1861,8 +1865,10 @@ Disconnected Signal-ის ზარის ბმული - - ვინც ამ ზარზე ბმულის საშუალებით შევა, შენს სახელს, ფოტოსა და ტელეფონის ნომერს დაინახავს. + + ვინც ამ ზარზე ბმულის საშუალებით შევა, შენს სახელს, ფოტოსა და ტელეფონის ნომერს დაინახავს. + + ვინც ამ ზარს ბმულის საშუალებით შეუერთდება, შენს სახელს და ფოტოს დაინახავს. ელოდება შეშვებას… @@ -2296,7 +2302,7 @@ მომხმარებლის სახელი წარმატებით წაიშალა. ქსელის ხარვეზს გადავაწყდით. - Too many attempts made, please try again later. + ზედმეტად ბევრი მცდელობა დაგჭირდა, გთხოვთ, მოგვიანებით ისევ სცადო. ეს მომხმარებლის სახელი დაკავებულია. მომხმარებლის სახელი შეიძლება შეიცავდეს მხოლოდ a–Z, 0–9 და ქვედა ტირეს. მომხმარებლის სახელი ციფრით ვერ დაიწყება. @@ -2320,7 +2326,7 @@ ეს რიცხვი ვერ იქნება 00. შეიყვანე ციფრი 1–9-მდე - Numbers with more than 2 digits can\'t start with 0 + 2-ზე მეტ ციფრიანი რიცხვი არ შეიძლება დაიწყოს 0-ით შენი მომხმარებლის სახელის აღდგენა შენს ამჟამინდელ QR კოდსა და ბმულს შეცვლის. დარწმუნებული ხარ? @@ -3894,6 +3900,12 @@ ვერავინ დაინახავს, რომ Signal-ზე ხარ, სანამ არ მისწერ ან თუ არსებული ჩატი არ გექნებათ. "ამ პარამეტრის შესაცვლელად, დააყენე \"ვინ ხედავს ჩემს ნომერს\" \"არავინ\"-ზე." + + დარწმუნებული ხარ? + + თუ „ვინ მიპოვის ნომრით“ პარამეტრს „არავინ“-ზე დააყენებ, სხვებს შენი Signal-ზე პოვნა გაურთულდებათ. + + გაუქმება ყველა არავინ Ეკრანის დაბლოკვა @@ -4391,11 +4403,16 @@ ჯგუფის აღწერილობა + სტანდარტული + უფრო სწრაფი, ნაკლები მონაცემი + მაღალი + უფრო ნელი, მეტი მონაცემი - ფოტოს ხარისხი + + მედია-ფაილების ხარისხი მოიწვიე მეგობრები @@ -4871,6 +4888,28 @@ ერთი ან მეტი ელემენტი ზედმეტად დიდი იყო ერთი ან მეტი ელემენტი არავალიდური იყო მონიშნულია ზედმეტი ელემენტი + + ვიდეო ერთხელ ნახვის რეჟიმზეა დაყენებული + + ფოტო ერთხელ ნახვის რეჟიმზეა დაყენებული + + ვიდეო დაყენებულია მაღალ ხარისხზე + + ვიდეო სტანდარტულ ხარისხზეა დაყენებული + + ფოტო დაყენებულია მაღალ ხარისხზე + + ფოტო სტანდარტულ ხარისხზეა დაყენებული + + + %1$d ელემენტი მაღალ ხარისხზეა დაყენებული + %1$d ელემენტი მაღალ ხარისხზეა დაყენებული + + + + %1$d ელემენტი სტანდარტულ ხარისხზეა დაყენებული + %1$d ელემენტი სტანდარტულ ხარისხზეა დაყენებული + გაუქმება დახატვა @@ -4895,6 +4934,20 @@ გავაუქმოთ ცვლილებები? ამ ფოტოში შეტანილ ყველა ცვლილებას დაკარგავ. + + ნაპოვნია %1$s + + \"%1$s\"-თან ჩატის დაწყება + + ჩატში გადასვლა + + + დავაკავშიროთ მოწყობილობა? + + როგორც ჩანს, Signal-ის მოწყობილობის დაკავშირებას ცდილობ. დააჭირე გაგრძელებას და ისევ დაასკანირე კოდი მის დასაკავშირებლად. + + გაგრძელება + ჩემი ემბლემები გამორჩეული ემბლემა @@ -4993,7 +5046,7 @@ ტრანზაქცია მუშავდება - %1$s-ის საბანკო გადარიცხვა მუშავდება. საბანკო გადარიცხვების დამუშავებას 1 სამუშაო დღე სჭირდება ხოლმე. + შენი %1$s-ის საბანკო გადარიცხვა მუშავდება. საბანკო გადარიცხვების დასრულებას შეიძლება 1-დან 14 სამუშაო დღემდე დასჭირდეს. გაიგე მეტი @@ -5937,9 +5990,9 @@ შენ გაქვს მომლოდინე დონაცია - საბანკო გადარიცხვების დამუშავებას 1 სამუშაო დღე სჭირდება ხოლმე. შენი გამოწერის განახლებამდე, გთხოვთ, ამ ტრანზაქციის დასრულებას დაელოდო. + საბანკო გადარიცხვების დამუშავებას შეიძლება 1-დან 14 სამუშაო დღემდე დასჭირდეს. შენი გამოწერის განახლებამდე, გთხოვთ, ამ ტრანზაქციის დასრულებას დაელოდო. - საბანკო გადარიცხვების დამუშავებას 1 სამუშაო დღე სჭირდება ხოლმე. გთხოვთ, სანამ სხვა დონაციას განახორციელებ, ამ ტრანზაქციის დასრულებას დაელოდო. + საბანკო გადარიცხვების დამუშავებას შეიძლება 1-დან 14 სამუშაო დღემდე დასჭირდეს. სანამ სხვა დონაციას განახორციელებ, გთხოვთ, ამ ტრანზაქციის დასრულებას დაელოდო. შენი დონაცია ისევ მუშავდება. ამას შეიძლება რამდენიმე წუთი დასჭირდეს შენი ინტერნეტ-კავშირიდან გამომდინარე. შენი გამოწერის განახლებამდე, გთხოვთ, ამ ტრანზაქციის დასრულებას დაელოდო. @@ -6091,7 +6144,7 @@ შენი ერთჯერადი დონაცია მუშავდება. როცა შენს დონაციას მივიღებთ, %1$s-ის ემბლემის პროფილზე გამოჩენას შეძლებ. - საბანკო გადარიცხვების დამუშავებას 1 სამუშაო დღე სჭირდება ხოლმე. %1$s + საბანკო გადარიცხვების დამუშავებას შეიძლება 1-დან 14 სამუშაო დღემდე დასჭირდეს. %1$s გაიგე მეტი @@ -6432,6 +6485,8 @@ ზარის დეტალები + + ზარის სახელის რედაქტირება ზარის სახელის დამატება @@ -6499,6 +6554,10 @@ შენი QR კოდი და ბმული შეიცვალა და შეიქმნა ახალი QR კოდი და ბმული. Signal-ზე ჩემთან მიმოწერის დასაწყებად შენი მობილურით ეს QR კოდი დაასკანირე + + QR კოდის მოძებნა ვერ მოხერხდა + + სცადე დაასკანირო სხვა სურათი, რომელიც Signal-ის QR კოდს შეიცავს. ამ ბმულით ნებისმიერი შეძლებს შენი მომხმარებლის სახელის ნახვას და შენთან ჩატის დაწყებას. ის მხოლოდ მათ გაუზიარე, ვისაც ენდობი. @@ -6590,6 +6649,10 @@ %1$s Signal-ის მომხმარებელი არაა. გსურს ეს ნომერი მოიწვიო? მოწვევა + + QR კოდის დასკანირება + + ქსელის შეცდომას გადავაწყდით. Მოგვიანებით სცადე. diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml index 35243b01f1..39a5342953 100644 --- a/app/src/main/res/values-kk/strings.xml +++ b/app/src/main/res/values-kk/strings.xml @@ -426,6 +426,8 @@ Енді Signal-да SMS-пен алмасу мүмкін емес. Енді Signal-да SMS-пен алмасу мүмкін емес. Әңгімелеріңізді осы жерде жалғастыру үшін %1$s деген кісіні Signal-ға шақырыңыз. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Molly қолданбасына шақыру @@ -536,7 +538,7 @@ Спам деп хабарланды - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Бұл адамның спам жіберіп жатуы мүмкін екендігі туралы Signal-ға хабарландыру жіберілді. Signal ешбір чатта не жазылып жатқанын көре алмайды. Спам деп хабарланды @@ -557,7 +559,7 @@ Криптовалютаға немесе ақшаға қатысты алаяқтық - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Егер бейтаныс біреу сізге криптовалюта (мысалы, Биткоин) немесе қаржылық мүмкіндіктер туралы хат жазса, абай болыңыз. Ол спам болуы мүмкін. Күмәнді немесе тақырыпқа қатысы жоқ хаттар @@ -818,7 +820,7 @@ View - Тұрақты Signal байланысының ақауы! + Тұрақты Molly байланысының ақауы! Molly қолданбасы Google Play қызметтерімен тіркеле алмады. Molly хаттары мен қоңыраулары өшірілді, оны \"Параметрлер > Қосымша\" бөлімінде қайта тіркеп көріңіз. @@ -1386,6 +1388,8 @@ %1$s профилінің атауын %2$s деп өзгертті. %1$s профилінің атауын өзгертті, бұрын %2$s болса, қазір %3$s болды. %1$s профилін өзгертті. + + You started this chat with %1$s. Сіз топ құрдыңыз. @@ -1861,8 +1865,10 @@ Disconnected Signal қоңырау сілтемесі - - Осы қоңырауға сілтеме арқылы қосылған кез келген адам сіздің аты-жөніңізді, фотосуретіңізді және телефон нөміріңізді көретін болады. + + Осы қоңырауға сілтеме арқылы қосылған кез келген адам сіздің аты-жөніңізді, фотосуретіңізді және телефон нөміріңізді көретін болады. + + Сілтеме арқылы осы қоңырауға қосылған кез келген адамға атыңыз бен фотосуретіңіз көрініп тұрады. Рұқсат берілгені күтілуде… @@ -2296,7 +2302,7 @@ Пайдаланушы аты өшірілді. Желі қатесі анықталды. - Too many attempts made, please try again later. + Тым көп рет қате дерек енгіздіңіз, біраздан кейін қайталап көріңіз. Бұл пайдаланушы аты бос емес. Пайдаланушы аттарында a–Z, 0–9 және астыңғы сызықтар бола алады. Пайдаланушы аттары саннан басталмауы керек. @@ -2320,7 +2326,7 @@ Бұл нөмір 00 болмауы керек. 1 және 9 аралығындағы санды енгізіңіз - Numbers with more than 2 digits can\'t start with 0 + 2 цифрдан көп сандар 0-ден басталмауы керек Пайдаланушы атыңызды қалпына келтірсеңіз, бұрынғы QR кодыңыз бен сілтемеңіз де қайта орнатылады. Сенімдісіз бе? @@ -3894,6 +3900,12 @@ Сіз біреуге хат жазбайынша немесе біреумен ортақ чатыңыз болмайынша, сіздің Signal қолданбасын пайдаланатыныңызды ешкім көре алмайды. "Бұл параметрді өзгерту үшін \"Менің нөмірімді кім көре алады\" деген бөлімде \"Ешкім\" опциясын таңдаңыз." + + Сенімдісіз бе? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Бас тарту Барлығы Ешкім Экран құлпы @@ -4391,11 +4403,16 @@ Топ сипаттамасы + Стандарт + Жылдам, аз дерек + Жоғары + Баяу, көп дерек - Фотосурет сапасы + + Мультимедиа сапасы Достарыңызды шақырыңыз @@ -4871,6 +4888,28 @@ Бір немесе бірнеше элемент өте үлкен болды Бір немесе бірнеше элемент дұрыс болмады Тым көп элемент таңдалды + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Болдырмау Сызу @@ -4895,6 +4934,20 @@ Өзгерістерді сақтамау керек пе? Осы фотосуретке жасаған барлық өзгеріс жоғалып кетеді. + + Found %1$s + + Start a chat with \"%1$s\" + + Чатқа өту + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Жалғастыру + Менің таңбаларым Таңдаулы таңба @@ -4993,7 +5046,7 @@ Төлем күтілуде - %1$s құрайтын банк аударымы күтілуде. Банк аударымдары әдетте 1 жұмыс күнінде түседі. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Толық ақпарат @@ -5937,9 +5990,9 @@ Сіздің демеуқаржыңыз өңделуде - Банк аударымдары әдетте 1 жұмыс күніне созылады. Осы төлем жасалғанын күтіңіз, содан кейін жазылымыңызды жаңартыңыз. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Банк аударымдары әдетте 1 жұмыс күніне созылады. Тағы да демеушілік жасамас бұрын, осы төлемнің өткенін күтіңіз. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Демеуіңіз әлі өңделіп жатыр. Желі жұмысына байланысты бұған бірнеше минут кетуі мүмкін. Осы төлем жасалғанын күтіңіз, содан кейін жазылымыңызды жаңартыңыз. @@ -6091,7 +6144,7 @@ Сіздің бір рет жасалатын демеуқаржыңыз өңделуде. Демеуқаржыңыз түскенде, профиліңізде %1$s таңбасын қоя аласыз. - Банк аударымдары әдетте 1 жұмыс күніне созылады. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Толық ақпарат @@ -6432,6 +6485,8 @@ Қоңырау мәліметтері + + Қоңырау атын өңдеу Қоңырау атын қосу @@ -6499,6 +6554,10 @@ QR кодыңыз бен сілтемеңіз қалпына келтірілді және жаңа QR коды мен сілтеме жасалды. Телефоныңызбен мына QR кодын сканерлеп, Signal-да менімен чат арқылы сөйлесіңіз. + + QR code not found + + Try scanning another image containing a Signal QR code. Осы сілтеме арқылы кез келген адам сіздің пайдаланушы атыңызды көре алады және сізбен чат арқылы сөйлесе алады. Оны тек сенімді адамдармен бөлісіңіз. @@ -6590,6 +6649,10 @@ %1$s Signal пайдаланушысы емес. Осы нөмірді шақырғыңыз келе ме? Шақыру + + QR кодты сканерлеу + + Желі қатесі пайда болды. Кейінірек қайталап көріңіз. diff --git a/app/src/main/res/values-km/strings.xml b/app/src/main/res/values-km/strings.xml index 4cc67311cd..0bc42d0f2b 100644 --- a/app/src/main/res/values-km/strings.xml +++ b/app/src/main/res/values-km/strings.xml @@ -423,6 +423,8 @@ មិនអាចផ្ញើសារជាអក្សរបាននៅក្នុង Signal ទៀតទេ។ មិនអាចផ្ញើសារជាអក្សរបាននៅក្នុង Signal ទៀតទេ។ បបួល %1$s ឲ្យប្រើ Signal ដើម្បីរក្សាការសន្ទនានៅទីនេះ។ + + បុគ្គលនេះលែងប្រើ Molly ហើយ។ អញ្ជើញគាត់ឱ្យប្រើ Molly ដើម្បីរក្សាការសន្ទនានៅទីនេះ។ អញ្ជើញចូលប្រើMolly @@ -527,7 +529,7 @@ បានរាយការណ៍សារឥតបានការ - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ត្រូវបានជូនដំណឹងថាបុគ្គលនេះប្រហែលជាកំពុងផ្ញើសារឥតបានការ។ Signal មិនអាចមើលឃើញខ្លឹមសារនៃការជជែកណាមួយឡើយ។ បានរាយការណ៍ជាសារឥតបានការ @@ -548,7 +550,7 @@ ការបោកប្រាស់លុយកាក់ ឬលុយគ្រីបតូ - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + ប្រសិនបើនរណាម្នាក់ដែលអ្នកមិនស្គាល់ផ្ញើសារមកអ្នកអំពីរូបិយបណ្ណគ្រីបតូ (ដូចជា Bitcoin) ឬឱកាសហិរញ្ញវត្ថុ សូមប្រុងប្រយ័ត្ន ព្រោះវាទំនងជាសារឥតបានការ។ សារមិនច្បាស់លាស់ ឬមិនពាក់ព័ន្ធ @@ -800,7 +802,7 @@ បង្ហាញ - ការបរាជ័យក្នុងការទំនាក់ទំនង Signal អចិន្រ្តៃយ៍! + ការបរាជ័យក្នុងការទំនាក់ទំនង Molly អចិន្រ្តៃយ៍! Molly មិនអាចចុះឈ្មោះជាមួយ Google Play Services។ ការផ្ញើសារ​ និងការហៅចេញMolly ត្រូវបានបិទ សូមព្យាយាមចុះឈ្មោះសារជាថ្មីក្នុង ការកំណត់ > កម្រិតខ្ពស់។ @@ -1339,6 +1341,8 @@ %1$s បានផ្លាស់ប្តូរឈ្មោះ​គណនី​ទៅ %2$s។ %1$s បានផ្លាស់ប្តូរឈ្មោះ​គណនី​ពី %2$s ទៅ %3$s។ %1$s បានផ្លាស់ប្តូររូប​គណនីរបស់ពួកគេ។ + + អ្នកបានចាប់ផ្តើមការជជែកនេះជាមួយ %1$s។ អ្នកបានបង្កើតក្រុមនេះ។ @@ -1794,8 +1798,10 @@ បានផ្តាច់ការភ្ចាប់ តំណសម្រាប់ការហៅតាម Signal - - នរណាដែលចូលរួមការហៅនេះតាមរយៈតំណនឹងឃើញឈ្មោះ រូបថត និងលេខទូរសព្ទរបស់អ្នក។ + + នរណាដែលចូលរួមការហៅនេះតាមរយៈតំណនឹងឃើញឈ្មោះ រូបថត និងលេខទូរសព្ទរបស់អ្នក។ + + នរណាដែលចូលរួមការហៅទូរសព្ទនេះតាមរយៈតំណនឹងមើលឃើញឈ្មោះ និងរូបថតរបស់អ្នក។ កំពុងរង់ចាំការអនុញ្ញាតឲ្យចូល… @@ -2216,7 +2222,7 @@ លុបឈ្មោះអ្នកប្រើបានជោគជ័យ។ បានជួបប្រទះកំហុសបណ្តាញ។ - Too many attempts made, please try again later. + បានធ្វើការព្យាយាមច្រើនដងពេក។ សូមព្យាយាមម្តងទៀតនៅពេលក្រោយ។ ឈ្មោះអ្នកប្រើនេះត្រូវបានយកហើយ។ ឈ្មោះអ្នកប្រើអាចរួមបញ្ចូលតែ a–Z, 0–9, និងបន្ទាត់ពីក្រោមប៉ុណ្ណោះ។ ឈ្មោះអ្នកប្រើមិនអាចចាប់ផ្តើមដោយលេខបានទេ។ @@ -2240,7 +2246,7 @@ លេខនេះមិនអាចជា 00 ទេ។ បញ្ចូលលេខមួយខ្ទង់ចន្លោះពី 1–9 - Numbers with more than 2 digits can\'t start with 0 + លេខដែលមានច្រើនជាង 2 ខ្ទង់មិនអាចចាប់ផ្តើមដោយ 0 ទេ ការស្តារយកឈ្មោះអ្នកប្រើរបស់អ្នកមកវិញនឹងកំណត់ឡើងវិញនូវកូដ QR និងតំណដែលមានស្រាប់របស់អ្នក។ តើអ្នកប្រាកដឬទេ? @@ -3788,6 +3794,12 @@ គ្មាននរណាម្នាក់អាចមើលឃើញអ្នកនៅលើ Signal ទេ លើកលែងតែអ្នកផ្ញើសារទៅពួកគេ ឬមានការជជែកដែលមានស្រាប់ជាមួយពួកគេ។ "ដើម្បីផ្លាស់ប្តូរការកំណត់នេះ សូមកំណត់ \"អ្នកដែលអាចឃើញលេខរបស់ខ្ញុំ\" ទៅជា \"គ្មាននរណាម្នាក់\"។" + + តើអ្នកប្រាកដឬទេ? + + ការកំណត់ \"នរណាខ្លះអាចរកខ្ញុំបានតាមលេខទូរសព្ទ\" ទៅជា \"គ្មាននរណាម្នាក់\" នឹងធ្វើឱ្យអ្នកផ្សេងកាន់តែពិបាកស្វែងរកអ្នកនៅលើ Signal។ + + បោះបង់ អ្នករាល់គ្នា គ្មាននរណា ចាក់សោរអេក្រង់ @@ -4281,11 +4293,16 @@ ការពិពណ៌នាពីក្រុម + ស្ដង់ដារ + លឿនជាងមុន ទិន្នន៏យតិចជាងមុន + ខ្ពស់ + យឺតជាងមុន ទិន្នន័យច្រើនជាងមុន - គុណភាពរូបថត + + គុណភាពមេឌៀ អញ្ជើញមិត្តភក្តិអ្នក @@ -4754,6 +4771,26 @@ ធាតុមួយ ឬច្រើនមានទំហំធំពេក មានធាតុមួយ ឬច្រើនមិនត្រឹមត្រូវ ធាតុដែលបានជ្រើសរើសច្រើនពេក + + វីដេអូត្រូវបានកំណត់ទៅជាមើលតែម្តង + + រូបថតត្រូវបានកំណត់ទៅជាមើលតែម្តង + + វីដេអូត្រូវបានកំណត់ទៅជាគុណភាពខ្ពស់ + + វីដេអូត្រូវបានកំណត់ទៅជាគុណភាពស្តង់ដា + + រូបថតត្រូវបានកំណត់ទៅជាគុណភាពខ្ពស់ + + រូបថតត្រូវបានកំណត់ទៅជាគុណភាពស្តង់ដា + + + %1$d ធាតុត្រូវបានកំណត់ទៅជាគុណភាពខ្ពស់ + + + + %1$d ធាតុត្រូវបានកំណត់ទៅជាគុណភាពស្តង់ដា + បោះបង់ គូរ @@ -4778,6 +4815,20 @@ បោះបង់ការផ្លាស់ប្ដូរ? អ្នកនឹងបាត់បង់ការផ្លាស់ប្ដូរទាំងអស់ដែលអ្នកបានធ្វើលើរូបភាពនេះ + + បានរកឃើញ %1$s + + ចាប់ផ្តើមការជជែកជាមួយ \"%1$s\" + + ចូលទៅការជជែក + + + ភ្ជាប់ឧបករណ៍មែនទេ? + + អ្នកហាក់ដូចជាកំពុងព្យាយាមភ្ជាប់ឧបករណ៍ Signal។ ចុចបន្ត និងស្គែនកូដម្តងទៀតដើម្បីភ្ជាប់វា។ + + បន្ត + ស្លាករបស់ខ្ញុំ ស្លាកពិសេស @@ -4876,7 +4927,7 @@ ការបង់ប្រាក់ស្ថិតក្នុងការរង់ចាំ - ការផ្ទេរប្រាក់តាមធនាគាររបស់អ្នកចំនួន %1$s ស្ថិតក្នុងការរង់ចាំ។ ការផ្ទេរប្រាក់តាមធនាគារជាធម្មតាចំណាយពេល 1 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីបញ្ចប់។ + ការផ្ទេរប្រាក់តាមធនាគាររបស់អ្នកចំនួន %1$s ស្ថិតក្នុងការរង់ចាំ។ ការផ្ទេរប្រាក់តាមធនាគារអាចចំណាយពេលពី 1 ទៅ 14 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីបញ្ចប់។ ស្វែងយល់បន្ថែម @@ -5801,9 +5852,9 @@ អ្នកមានការបរិច្ចាគមួយដែលស្ថិតក្នុងការរង់ចាំ - ការផ្ទេរប្រាក់តាមធនាគារជាធម្មតាចំណាយពេល 1 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ សូមរង់ចាំរហូតដល់ការបង់ប្រាក់នេះបញ្ចប់ មុនពេលធ្វើបច្ចុប្បន្នភាពការជាវរបស់អ្នក។ + ការផ្ទេរប្រាក់តាមធនាគារអាចចំណាយពេលពី 1 ទៅ 14 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ សូមរង់ចាំរហូតដល់ការបង់ប្រាក់នេះបញ្ចប់ មុនពេលធ្វើបច្ចុប្បន្នភាពការជាវរបស់អ្នក។ - ការផ្ទេរប្រាក់តាមធនាគារជាធម្មតាចំណាយពេល 1 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ សូមរង់ចាំរហូតដល់ការបង់ប្រាក់នេះបញ្ចប់ មុនពេលធ្វើការបរិច្ចាគផ្សេងទៀត។ + ការផ្ទេរប្រាក់តាមធនាគារអាចចំណាយពេលពី 1 ទៅ 14 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ សូមរង់ចាំរហូតដល់ការបង់ប្រាក់នេះបញ្ចប់ មុនពេលធ្វើការបរិច្ចាគផ្សេងទៀត។ ការបរិច្ចាគរបស់អ្នកកំពុងត្រូវបានដំណើរការនៅឡើយ។ វាអាចចំណាយពេលពីរបីនាទីអាស្រ័យលើសេវាអុីនធឺណិតរបស់អ្នក។ សូមរង់ចាំរហូតដល់ការបង់ប្រាក់នេះបញ្ចប់ មុនពេលធ្វើបច្ចុប្បន្នភាពការជាវរបស់អ្នក។ @@ -5954,7 +6005,7 @@ ការបរិច្ចាគតែមួយដងរបស់អ្នកស្ថិតក្នុងការរង់ចាំ។ អ្នកនឹងអាចបង្ហាញស្លាក %1$s នៅលើប្រូហ្វាល់របស់អ្នក នៅពេលដែលការបរិច្ចាគរបស់អ្នកត្រូវបានទទួល។ - ការផ្ទេរប្រាក់តាមធនាគារជាធម្មតាចំណាយពេល 1 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ %1$s + ការផ្ទេរប្រាក់តាមធនាគារអាចចំណាយពេលពី 1 ទៅ 14 ថ្ងៃនៃថ្ងៃធ្វើការដើម្បីដំណើរការ។ %1$s ស្វែងយល់បន្ថែម @@ -6291,6 +6342,8 @@ ព័ត៌មានលម្អិតអំពីការហៅ + + កែឈ្មោះសម្រាប់ការហៅ ដាក់ឈ្មោះសម្រាប់ការហៅ @@ -6358,6 +6411,10 @@ កូដ QR និងតំណរបស់អ្នកត្រូវបានកំណត់ឡើងវិញ ហើយកូដ QR និងតំណថ្មីត្រូវបានបង្កើតឡើង។ ស្គែនកូដ QR នេះដោយប្រើទូរសព្ទរបស់អ្នក ដើម្បីជជែកជាមួយខ្ញុំនៅលើ Signal។ + + រកមិនឃើញកូដ QR + + សាកល្បងស្គែនរូបភាពផ្សេងទៀតដែលមានកូដ QR របស់ Signal។ អ្នកដែលមានតំណនេះអាចមើលឈ្មោះអ្នកប្រើរបស់អ្នក និងចាប់ផ្តើមការជជែកជាមួយអ្នកបាន។ សូមចែករំលែកវាជាមួយមនុស្សដែលអ្នកទុកចិត្តប៉ុណ្ណោះ។ @@ -6447,6 +6504,10 @@ %1$s មិនមែនជាអ្នកប្រើ Signal ទេ។ តើអ្នកចង់អញ្ជើញលេខនេះឬទេ? អញ្ជើញ + + ស្កេនកូដ QR + + បានជួបប្រទះបញ្ហាបណ្តាញ។ សាកល្បងម្តងទៀតពេលក្រោយ។ diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 3e99e81c46..3831733faf 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -426,6 +426,8 @@ SMS ಮೆಸೇಜಿಂಗ್ ಅನ್ನು Signal ಇನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. SMS ಮೆಸೇಜಿಂಗ್ ಅನ್ನು Signal ಇನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಇಲ್ಲಿ ಸಂಭಾಷಣೆಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳಲು %1$s ಅವರನ್ನು Signal ಗೆ ಆಹ್ವಾನಿಸಿ. + + ಪ್ರಸ್ತುತವಾಗಿ ಈ ವ್ಯಕ್ತಿಯು Molly ಅನ್ನು ಬಳಸುತ್ತಿಲ್ಲ. ಸಂಭಾಷಣೆಯನ್ನು ಇಲ್ಲಿ ಶುರುಹಚ್ಚಿಕೊಳ್ಳಲು ಅವರನ್ನು Molly ಗೆ ಆಹ್ವಾನಿಸಿ. Molly ಗೆ ಆಮಂತ್ರಿಸಿ @@ -536,7 +538,7 @@ ಸ್ಪ್ಯಾಮ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + ಈ ವ್ಯಕ್ತಿ ಸ್ಪ್ಯಾಮ್ ಕಳುಹಿಸುತ್ತಿರಬಹುದು ಎಂಬುದಾಗಿ Signal ಗೆ ಸೂಚಿಸಲಾಗಿದೆ. Signal ಗೆ ಯಾವುದೇ ಚಾಟ್ ಗಳ ಕಂಟೆಂಟ್ ಅನ್ನು ನೋಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಸ್ಪ್ಯಾಮ್ ಎಂದು ವರದಿ ಮಾಡಲಾಗಿದೆ @@ -557,7 +559,7 @@ ಕ್ರಿಪ್ಟೊ ಅಥವಾ ಹಣದ ಹಗರಣಗಳು - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + ನಿಮಗೆ ಪರಿಚಯವಿಲ್ಲದ ಯಾರಾದರೂ ಕ್ರಿಪ್ಟೊಕರೆನ್ಸಿ (ಬಿಟ್‌ಕಾಯಿನ್‌ನಂಥ) ಅಥವಾ ಹಣಕಾಸಿನ ಅವಕಾಶದ ಕುರಿತು ಮೆಸೇಜ್‌ಗಳನ್ನು ಕಳುಹಿಸಿದರೆ, ಎಚ್ಚರವಹಿಸಿ - ಅದು ಸ್ಪ್ಯಾಮ್ ಆಗಿರುವ ಸಾಧ್ಯತೆಯಿರುತ್ತದೆ. ಅಸ್ಪಷ್ಟ ಅಥವಾ ಅಪ್ರಸ್ತುತ ಮೆಸೇಜ್‌ಗಳು @@ -818,7 +820,7 @@ ತೋರಿಸು - Signalಗೆ ಶಾಶ್ವತವಾದ ಸಂಪರ್ಕ ವೈಫಲ್ಯ! + Mollyಗೆ ಶಾಶ್ವತವಾದ ಸಂಪರ್ಕ ವೈಫಲ್ಯ! Molly ಅನ್ನು Google ಪ್ಲೇ ಸರ್ವೀಸಸ್ ನಲ್ಲಿ ನೋಂದಾಯಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ. Molly ಸಂದೇಶಗಳು ಹಾಗೂ ಕರೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ, ದಯವಿಟ್ಟು ಸೆಟ್ಟಿಂಗ್‌ಗಳು > ಅಡ್ವಾನ್ಸ್ಡ್ ನಲ್ಲಿ ಪುನಃ ನೋಂದಾಯಿಸಲು ಯತ್ನಿಸಿ. @@ -1386,6 +1388,8 @@ %1$s ಅವರು ತಮ್ಮ ಪ್ರೊಫೈಲ್ ಹೆಸರನ್ನು %2$s ಗೆ ಬದಲಿಸಿದ್ದಾರೆ. %1$s ಅವರು ತಮ್ಮ ಪ್ರೊಫೈಲ್ ಹೆಸರನ್ನು %2$s ಇಂದ %3$s ಗೆ ಬದಲಿಸಿದ್ದಾರೆ. %1$s ಅವರು ತಮ್ಮ ಪ್ರೊಫೈಲ್ ಬದಲಿಸಿದ್ದಾರೆ. + + ನೀವು ಈ ಚಾಟ್ ಅನ್ನು %1$s ಅವರೊಂದಿಗೆ ಆರಂಭಿಸಿದಿರಿ. ನೀವು ಗುಂಪನ್ನು ರಚಿಸಿದ್ದೀರಿ. @@ -1861,8 +1865,10 @@ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಿದೆ Signal ಕರೆ ಲಿಂಕ್ - - ಲಿಂಕ್ ಮೂಲಕ ಈ ಕರೆಗೆ ಸೇರುವ ಯಾರಾದರೂ ನಿಮ್ಮ ಹೆಸರು, ಫೊಟೋ ಮತ್ತು ಫೋನ್ ನಂಬರ್ ಅನ್ನು ನೋಡುತ್ತಾರೆ. + + ಲಿಂಕ್ ಮೂಲಕ ಈ ಕರೆಗೆ ಸೇರುವ ಯಾರಾದರೂ ನಿಮ್ಮ ಹೆಸರು, ಫೊಟೋ ಮತ್ತು ಫೋನ್ ನಂಬರ್ ಅನ್ನು ನೋಡುತ್ತಾರೆ. + + ಲಿಂಕ್ ಮೂಲಕ ಈ ಕರೆಗೆ ಸೇರಿದ ಯಾರೇ ಆದರೂ ನಿಮ್ಮ ಹೆಸರು ಮತ್ತು ಫೋಟೋವನ್ನು ನೋಡುತ್ತಾರೆ. …ಗಾಗಿ ಕಾಯಲಾಗುತ್ತಿದೆ @@ -2296,7 +2302,7 @@ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಯಶಸ್ವಿಯಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ. ನೆಟ್‌ವರ್ಕ್ ದೋಷವನ್ನು ಎದುರಿಸಿದೆ. - Too many attempts made, please try again later. + ಹಲವಾರು ಪ್ರಯತ್ನಗಳನ್ನು ಮಾಡಿದ್ದೀರಿ, ದಯವಿಟ್ಟು ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ. ಈ ಯೂಸರ್ ನೇಮ್ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ. ಯೂಸರ್ ನೇಮ್ ಗಳು a-Z, 0-9, ಮತ್ತು ಅಡಿಗೆರೆಗಳನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರಬಹುದು. ಯೂಸರ್ ನೇಮ್ ಗಳು ಸಂಖ್ಯೆಯಿಂದ ಪ್ರಾರಂಭವಾಗುವುದಿಲ್ಲ. @@ -2320,7 +2326,7 @@ ಈ ಸಂಖ್ಯೆ 00 ಆಗಿರುವಂತಿಲ್ಲ. 1-9 ರ ನಡುವಿನ ಅಂಕಿಯನ್ನು ನಮೂದಿಸಿ - Numbers with more than 2 digits can\'t start with 0 + 2 ಕ್ಕಿಂತ ಹೆಚ್ಚು ಅಂಕಿಗಳನ್ನು ಹೊಂದಿರುವ ಸಂಖ್ಯೆಗಳು 0 ರಿಂದ ಪ್ರಾರಂಭವಾಗಲು ಸಾಧ್ಯವಿಲ್ಲ ನಿಮ್ಮ ಯೂಸರ್‌ನೇಮ್ ಅನ್ನು ಮರುಪಡೆಯುವುದು, ನಿಮ್ಮ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ QR ಕೋಡ್ ಮತ್ತು ಲಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ. ನಿಮಗೆ ಖಾತ್ರಿಯಿದೆಯೇ? @@ -3894,6 +3900,12 @@ ನೀವು ಮೆಸೇಜ್ ಕಳುಹಿಸದ ಹೊರತು ಅಥವಾ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಚಾಟ್ ಅನ್ನು ಹೊಂದಿರದ ಹೊರತು ನೀವು Signal ‌ನಲ್ಲಿದ್ದೀರಿ ಎಂದು ಯಾರಿಗೂ ನೋಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. "ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, ನನ್ನ ಸಂಖ್ಯೆಯನ್ನು ಯಾರು ನೋಡಬಹುದು ಎಂಬುದನ್ನು ಯಾರೂ ಇಲ್ಲ ಎಂಬುದಾಗಿ ಹೊಂದಿಸಿ." + + ನಿಮಗೆ ಖಾತ್ರಿಯಿದೆಯೇ? + + \"ಯಾರು ನನ್ನ ನಂಬರನ್ನು ಹುಡುಕಬಹುದು\" ಅನ್ನು \"ಯಾರೂ ಇಲ್ಲ\" ಅಂದು ಸೆಟ್ ಮಾಡಿದರೆ, Signal ನಲ್ಲಿ ನಿಮ್ಮನ್ನು ಹುಡುಕಲು ಜನರಿಗೆ ಇನ್ನೂ ಕಷ್ಟವಾಗುವುದು. + + ರದ್ದುಮಾಡಿ ಎಲ್ಲರೂ ಯಾರೂ ಇಲ್ಲ ಸ್ಕ್ರೀನ್ ಲಾಕ್ @@ -4391,11 +4403,16 @@ ಗುಂಪಿನ ವಿವರಣೆ + ಪ್ರಮಾಣಿತ + ತ್ವರಿತ, ಕಡಿಮೆ ಡೇಟಾ + ಹೆಚ್ಚು + ನಿಧಾನ, ಹೆಚ್ಚು ಡೇಟಾ - ಫೋಟೋ ಗುಣಮಟ್ಟ + + ಮಾಧ್ಯಮ ಗುಣಮಟ್ಟ ನಿಮ್ಮ ಸ್ನೇಹಿತರನ್ನು ಆಹ್ವಾನಿಸಿ @@ -4871,6 +4888,28 @@ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು ಐಟಂಗಳು ತೀರಾ ದೊಡ್ಡದಾಗಿವೆ ಒಂದು ಅಥವಾ ಹೆಚ್ಚು ಐಟಂಗಳು ಅಮಾನ್ಯವಾಗಿವೆ ತುಂಬಾ ಐಟಂಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ + + ಒಂದು ಬಾರಿಯ ವೀಕ್ಷಣೆಗೆ ವಿಡಿಯೋ ಸೆಟ್ ಆಗಿದೆ + + ಒಂದು ಬಾರಿಯ ವೀಕ್ಷಣೆಗೆ ಫೊಟೋ ಸೆಟ್ ಆಗಿದೆ. + + ಾತ್ಯಧಿಕ ಗುಣಮಟ್ಟಕ್ಕೆ ವೀಡಿಯೊ ಸೆಟ್ ಆಗಿದೆ + + ಸಾಮಾನ್ಯ ಗುಣಮಟ್ಟಕ್ಕೆ ವಿಡಿಯೋ ಸೆಟ್ ಆಗಿದೆ + + ಫೊಟೋವನ್ನು ಅತ್ಯಧಿಕ ಗುಣಮಟ್ಟಕ್ಕೆ ಹೊಂದಿಸಲಾಗಿದೆ + + ಫೊಟೋವನ್ನು ಪ್ರಮಾಣಿತ ಗುಣಮಟ್ಟಕ್ಕೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ + + + %1$d ಐಟಂ ಅನ್ನು ಅತ್ಯಧಿಕ ಗುಣಮಟ್ಟಕ್ಕೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ + %1$d ಐಟಂಗಳನ್ನು ಅತ್ಯಧಿಕ ಗುಣಮಟ್ಟಕ್ಕೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ + + + + %1$d ಐಟಂ ಅನ್ನು ಪ್ರಮಾಣಿತ ಗುಣಮಟ್ಟಕ್ಕೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ + %1$d ಐಟಂಗಳನ್ನು ಪ್ರಮಾಣಿತ ಗುಣಮಟ್ಟಕ್ಕೆ ಸೆಟ್ ಮಾಡಲಾಗಿದೆ + ರದ್ದುಗೊಳಿಸಿ ರಚಿಸಿ @@ -4895,6 +4934,20 @@ ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸುವುದೇ? ಈ ಫೊಟೋಕ್ಕೆ ನೀವು ಮಾಡಿದ ಯಾವುದೇ ಬದಲಾವಣೆಗಳನ್ನು ನೀವು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ. + + %1$s ಕಂಡುಬಂದಿದೆ + + \"%1$s\" ಅವರೊಂದಿಗೆ ಚಾಟ್ ಆರಂಭಿಸಿ + + ಚಾಟ್‌ಗೆ ಹೋಗಿ + + + ಸಾಧನ ಲಿಂಕ್ ಮಾಡುವುದೇ? + + ನೀವು ಒಂದು Signal ಸಾಧನವನ್ನು ಲಿಂಕ್ ಮಾಡಲು ಯತ್ನಿಸುತ್ತಿರುವಂತಿದೆ. ಮುಂದುವರಿಸಿ ಎಂಬುದನ್ನು ಮತ್ತು ಕೋಡ್ ಅನ್ನು ಲಿಂಕ್ ಮಾಡಲು ಅದನ್ನು ಪುನಃ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ. + + ಮುಂದುವರಿಸಿ + ನನ್ನ ಬ್ಯಾಡ್ಜ್‌ಗಳು ವೈಶಿಷ್ಟ್ಯಗೊಳಿಸಿದ ಬ್ಯಾಡ್ಜ್ @@ -4993,7 +5046,7 @@ ಪಾವತಿ ಬಾಕಿಯಿದೆ - %1$s ನಷ್ಟು ನಿಮ್ಮ ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆ ಬಾಕಿಯಿದೆ. ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪೂರ್ಣಗೊಳ್ಳಲು ಸಾಮಾನ್ಯವಾಗಿ 1 ವ್ಯವಹಾರ ದಿನ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. + %1$s ನಷ್ಟು ನಿಮ್ಮ ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆ ಬಾಕಿಯಿದೆ. ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪೂರ್ಣಗೊಳ್ಳಲು 1 ರಿಂದ 14 ವ್ಯಾವಹಾರಿಕ ದಿನಗಳು ಆಗಬಹುದು. ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ @@ -5937,9 +5990,9 @@ ನಿಮ್ಮ ದೇಣಿಗೆ ಬಾಕಿಯಿದೆ - ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು ಸಾಮಾನ್ಯವಾಗಿ 1 ವ್ಯವಹಾರ ದಿನ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ನಿಮ್ಮ ಚಂದಾ ನವೀಕರಿಸುವ ಮುನ್ನ ಈ ಪಾವತಿ ಪೂರ್ಣಗೊಳ್ಳುವ ತನಕ ದಯವಿಟ್ಟು ಕಾಯಿರಿ. + ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು 1 ರಿಂದ 14 ವ್ಯಾವಹಾರಿಕ ದಿನಗಳು ಆಗಬಹುದು. ನಿಮ್ಮ ಚಂದಾ ನವೀಕರಿಸುವ ಮುನ್ನ ಈ ಪಾವತಿ ಪೂರ್ಣಗೊಳ್ಳುವ ತನಕ ದಯವಿಟ್ಟು ಕಾಯಿರಿ. - ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು ಸಾಮಾನ್ಯವಾಗಿ 1 ವ್ಯವಹಾರ ದಿನ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. ಇನ್ನೊಂದು ದೇಣಿಗೆಯನ್ನು ಮಾಡುವ ಮುನ್ನ ಈ ಪಾವತಿ ಪೂರ್ಣಗೊಳ್ಳುವ ತನಕ ದಯವಿಟ್ಟು ಕಾಯಿರಿ. + ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು 1 ರಿಂದ 14 ವ್ಯಾವಹಾರಿಕ ದಿನಗಳು ಆಗಬಹುದು. ಇನ್ನೊಂದು ದೇಣಿಗೆಯನ್ನು ಮಾಡುವ ಮುನ್ನ ಈ ಪಾವತಿ ಪೂರ್ಣಗೊಳ್ಳುವ ತನಕ ದಯವಿಟ್ಟು ಕಾಯಿರಿ. ನಿಮ್ಮ ದೇಣಿಗೆಯು ಇನ್ನೂ ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳುತ್ತಿದೆ. ಇದು ನಿಮ್ಮ ಸಂಪರ್ಕವನ್ನು ಅವಲಂಬಿಸಿಕೊಂಡು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. ನಿಮ್ಮ ಚಂದಾ ನವೀಕರಿಸುವ ಮುನ್ನ ಈ ಪಾವತಿ ಪೂರ್ಣಗೊಳ್ಳುವ ತನಕ ದಯವಿಟ್ಟು ಕಾಯಿರಿ. @@ -6091,7 +6144,7 @@ ನಿಮ್ಮ ಒಂದು ಬಾರಿಯ ದೇಣಿಗೆ ಬಾಕಿಯಿದೆ. ನಿಮ್ಮ ದೇಣಿಗೆ ಸ್ವೀಕರಿಸಿದಾಗ ನಿಮ್ಮ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ %1$s ಬ್ಯಾಡ್ಜ್ ಅನ್ನು ಡಿಸ್‌ಪ್ಲೇ ಮಾಡಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ. - ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು ಸಾಮಾನ್ಯವಾಗಿ 1 ವ್ಯವಹಾರ ದಿನ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. %1$s + ಬ್ಯಾಂಕ್ ವರ್ಗಾವಣೆಗಳು ಪ್ರಕ್ರಿಯೆಗೊಳ್ಳಲು 1 ರಿಂದ 14 ವ್ಯಾವಹಾರಿಕ ದಿನಗಳು ಆಗಬಹುದು. %1$s ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ @@ -6432,6 +6485,8 @@ ಕರೆ ವಿವರಗಳು + + ಕರೆ ಹೆಸರು ಎಡಿಟ್ ಮಾಡಿ ಕರೆ ಹೆಸರು ಸೇರಿಸಿ @@ -6499,6 +6554,10 @@ ನಿಮ್ಮ QR ಕೋಡ್ ಮತ್ತು ಲಿಂಕ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲಾಗಿದೆ ಮತ್ತು ಹೊಸ QR ಕೋಡ್ ಮತ್ತು ಲಿಂಕ್ ಅನ್ನು ರಚಿಸಲಾಗಿದೆ. Signal ನಲ್ಲಿ ನನ್ನೊಂದಿಗೆ ಚಾಟ್ ಮಾಡಲು ನಿಮ್ಮ ಫೋನ್‌ ಮೂಲಕ ಈ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ. + + QR ಕೋಡ್ ಕಂಡುಬರಲಿಲ್ಲ + + Signal ಕ್ಯುಆರ್ ಕೋಡ್ ಹೊಂದಿರುವ ಮತ್ತೊಂದು ಚಿತ್ರವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ. ಈ ಲಿಂಕ್‌ ಹೊಂದಿರುವ ಯಾರಾದರೂ ನಿಮ್ಮ ಯೂಸರ್‌ನೇಮ್ ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಿಮ್ಮೊಂದಿಗೆ ಚಾಟ್ ಪ್ರಾರಂಭಿಸಬಹುದು. ನೀವು ವಿಶ್ವಾಸ ಹೊಂದಿರುವ ಜನರಿಗೆ ಮಾತ್ರ ಇದನ್ನು ಹಂಚಿಕೊಳ್ಳಿ. @@ -6590,6 +6649,10 @@ %1$s ಅವರು Signal ಬಳಕೆದಾರರಲ್ಲ. ನೀವು ಈ ಸಂಖ್ಯೆಯನ್ನು ಆಹ್ವಾನಿಸಲು ಬಯಸುತ್ತೀರಾ? ಆಹ್ವಾನ + + ಕ್ಯುಆರ್‌ ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ + + ತಾತ್ಕಾಲಿಕ ನೆಟ್ವರ್ಕ್ ತೊಂದರೆ ಉಂಟಾಯಿತು . ನಂತರ ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ . diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index ca4d240802..77274b14f3 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -423,6 +423,8 @@ Signal에서 더 이상 SMS 메시지를 지원하지 않습니다. Signal에서 더 이상 SMS 메시지를 지원하지 않습니다. %1$s 님을 Signal로 초대하여 대화를 이어가세요. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Molly로 초대 @@ -527,7 +529,7 @@ 스팸으로 신고함 - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal에 이 사람이 스팸을 보내는 것 같다는 알림이 전송되었습니다. Signal은 대화의 내용을 볼 수 없습니다. 스팸으로 신고함 @@ -548,7 +550,7 @@ 암호화폐 또는 금융 사기 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 모르는 사람이 암호화폐(예: 비트코인) 또는 금융 기회에 관해 메시지 할 경우 조심하세요. 사기일 가능성이 높습니다. 모호하거나 관련이 없는 메시지 @@ -800,7 +802,7 @@ 보기 - 영구적으로 Signal 연결에 실패했습니다! + 영구적으로 Molly 연결에 실패했습니다! Molly은 Google Play Services에 등록될 수 없습니다. Molly 메시지와 전화는 비활성화되었습니다. Molly 설정 - 고급 메뉴에서 다시 등록해 주세요. @@ -1339,6 +1341,8 @@ %1$s 님이 프로필 이름을 %2$s(으)로 변경했습니다. %1$s 님이 프로필 이름을 %2$s에서 %3$s(으)로 변경했습니다. %1$s가 프로파일을 변경하였습니다. + + You started this chat with %1$s. 그룹을 생성했습니다. @@ -1794,8 +1798,10 @@ 연결 끊김 Signal 통화 링크 - - 링크를 통해 통화에 참여하는 모든 사용자에게 내 이름, 사진, 전화번호가 표시됩니다. + + 링크를 통해 통화에 참여하는 모든 사용자에게 내 이름, 사진, 전화번호가 표시됩니다. + + 링크를 통해 이 통화에 참여하는 모든 사용자에게 귀하의 이름과 사진이 표시됩니다. 승인을 기다리는 중… @@ -2216,7 +2222,7 @@ 사용자 이름이 성공적으로 삭제되었습니다. 네트워크 오류가 발생했습니다. - Too many attempts made, please try again later. + 너무 많이 시도했습니다. 나중에 다시 시도해 주세요. 사용 중인 사용자 이름입니다. 사용자 이름에는 a~Z, 0~9 및 밑줄만 포함할 수 있습니다. 사용자 이름은 숫자로 시작할 수 없습니다. @@ -2240,7 +2246,7 @@ 이 번호는 00일 수 없습니다. 1–9 중 하나를 입력하세요. - Numbers with more than 2 digits can\'t start with 0 + 세 자리 이상 숫자는 0으로 시작할 수 없습니다. 사용자 이름을 복구하면 기존 QR 코드와 링크가 초기화됩니다. 계속할까요? @@ -3788,6 +3794,12 @@ 내가 메시지를 보내는 사용자 또는 기존 대화 기록이 있는 사용자를 제외하고는 아무도 Signal에서 나를 볼 수 없습니다. "이 설정을 바꾸려면 \'내 전화번호를 볼 수 있는 사람\'을 \'아무도 보지 못함\'으로 설정하세요." + + 계속할까요? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + 취소 모두 아무도 화면 잠금 @@ -4281,11 +4293,16 @@ 그룹 설명 + 기본 + 데이터를 덜 쓰며 빠르게 + 높음 + 데이터를 더 쓰며 느리게 - 사진 품질 + + 미디어 품질 친구 초대하기 @@ -4754,6 +4771,26 @@ 하나 이상의 항목이 너무 큽니다. 하나 이상의 항목이 유효하지 않습니다. 항목을 너무 많이 선택했습니다. + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d items set to high quality + + + + %1$d items set to standard quality + 취소 그리기 @@ -4778,6 +4815,20 @@ 변경 내용을 취소할까요? 이 사진에 적용한 모든 변경 내용이 손실됩니다. + + Found %1$s + + Start a chat with \"%1$s\" + + 대화로 이동 + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + 계속 + 내 배지 프로필 배지 @@ -4876,7 +4927,7 @@ 송금 대기 중 - %1$s의 은행 송금이 대기 중입니다. 은행 송금은 일반적으로 영업일 기준 1일이 소요됩니다. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. 자세히 알아보기 @@ -5801,9 +5852,9 @@ 보류 중인 기부가 있습니다. - 은행 송금에는 일반적으로 영업일 기준 1일이 소요됩니다. 이 결제가 완료될 때까지 기다렸다가 구독을 업데이트해 주세요. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - 은행 송금에는 일반적으로 영업일 기준 1일이 소요됩니다. 이 결제가 완료될 때까지 기다렸다가 더 기부해 주세요. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. 기부를 아직 처리하는 중입니다. 연결에 따라 몇 분이 소요될 수 있습니다. 이 결제가 완료될 때까지 기다렸다가 구독을 업데이트해 주세요. @@ -5954,7 +6005,7 @@ 1회성 기부가 대기 중입니다. 기부가 완료되면 프로필에 %1$s 배지를 표시할 수 있습니다. - 은행 송금은 일반적으로 1 영업일이 소요됩니다. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s 자세히 알아보기 @@ -6291,6 +6342,8 @@ 통화 세부 정보 + + 통화 이름 수정 통화 이름 추가 @@ -6358,6 +6411,10 @@ QR 코드와 링크를 초기화하고 새 QR 코드와 링크를 만들었습니다. Signal에서 나와 대화하려면 휴대전화로 이 QR 코드를 스캔하세요. + + QR code not found + + Try scanning another image containing a Signal QR code. 이 링크를 가진 사람은 누구나 내 사용자 이름을 보고 나와 대화를 시작할 수 있습니다. 믿을 수 있는 사람들과만 공유하세요. @@ -6447,6 +6504,10 @@ %1$s 님은 Signal 사용자가 아닙니다. 이 전화번호를 초대할까요? 초대 + + QR 코드 스캔 + + 네트워크 오류가 발생했습니다. 나중에 다시 시도하세요. diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index de920d320b..6cf2ae1ae3 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -423,6 +423,8 @@ Signal кызматында мындан ары SMS менен жазыша албайсыз. Signal кызматында мындан ары SMS менен жазыша албайсыз. %1$s менен бул жерден сүйлөшө берүү үчүн аны Signal\'га чакырыңыз. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Molly\'га чакыруу @@ -527,7 +529,7 @@ Спам деп кабарланды - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ушул адам спам жөнөтүп жатышы мүмкүн деген кабар алды. Signal маектердеги билдирүүлөрдү көрбөйт. Спам деп кабарланды @@ -548,7 +550,7 @@ Крипто валютага же акчага байланыштуу алдамчылык - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Белгисиз бирөө криптовалюта (биткойн сыяктуу) же акча табуу мүмкүнчүлүгү тууралуу билдирүү жиберсе, этият болуңуз. Түшүнүксүз же тиешеси жок билдирүүлөр @@ -1339,6 +1341,8 @@ %1$s профиль атын %2$s деп өзгөрттү. %1$s профиль атын өзгөрттү. Мурунку аты: %2$s. Жаңы аты: %3$s. %1$s профилин өзгөрттү. + + You started this chat with %1$s. Топ түздүңүз. @@ -1794,8 +1798,10 @@ Өчүк Signal чалуусунун шилтемеси - - Ушул шилтеме аркылуу чалууга кошулган адамга аты-жөнүңүз, сүрөтүңүз жана телефон номериңиз көрүнөт. + + Ушул шилтеме аркылуу чалууга кошулган адамга аты-жөнүңүз, сүрөтүңүз жана телефон номериңиз көрүнөт. + + Шилтеме аркылуу бул чалууга кошулган адам атыңызды жана сүрөтүңүздү көрөт. Күтө туралы… @@ -2216,7 +2222,7 @@ Колдонуучу аты өчүрүлдү. Тармакта ката кетти. - Too many attempts made, please try again later. + Өтө көп жолу аракет кылдыңыз, бир аздан соң кайталап көрүңүз. Мындай ат бар. Колдонуучунун аты a-Z, 0-9 деген тамгалар менен сандардан жана ылдыйкы сызыктан турат. Колдонуучунун аты сандан башталбайт. @@ -2240,7 +2246,7 @@ Бул номер 00 болбошу керек. 1-9 чейин сан киргизиңиз - Numbers with more than 2 digits can\'t start with 0 + 2 сандан ашык номер 0 менен башталбайт Колдонуучу атыңызды калыбына келтирсеңиз, учурдагы QR кодуңуз жана шилтемеңиз кайра коюлат. Чын элеби? @@ -3788,6 +3794,12 @@ Билдирүү жазмайынча же маектешип баштамайынча, сиздин Signal\'да отурганыңызды эч ким билбейт. "Бул параметрди өзгөртүү үчүн Менин телефон номерим кимге көрүнөт дегенди Эч кимге деп коюңуз." + + Чын элеби? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Жок Баары Эч ким Экран кулпусу @@ -4281,11 +4293,16 @@ Топ тууралуу учкай маалымат + Стандарт + Тезирээк, азыраак берилмелер + Шашылыш + Жайыраак, көбүрөөк берилмелер - Сүрөттүн сапаты + + Медиа сапаты Досторуңузду чакырыңыз @@ -4754,6 +4771,26 @@ Бир же бир нече нерсе өтө чоң болуп чыкты Бир же бир нече нерсе жараксыз Өтө көп нерсе тандалды + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d items set to high quality + + + + %1$d items set to standard quality + Жокко чыгаруу Тартуу @@ -4778,6 +4815,20 @@ Өзгөртүүлөр жокко чыгарылсынбы? Бул сүрөткө киргизген өзгөртүүлөрүңүздү жоготосуз. + + Found %1$s + + Start a chat with \"%1$s\" + + Маектешүүгө өтүү + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Улантуу + Төшбелгилерим Өзгөчөлөнгөн төшбелги @@ -4876,7 +4927,7 @@ Төлөм күтүлүүдө - Банк эсебиңизге төлөгөн %1$s күтүлүүдө. Банк эсебиңизге каражаттар 1 иш күнүндө түшөт. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Кененирээк маалымат @@ -5801,9 +5852,9 @@ Салымыңыз күтүлүүдө - Банк аркылуу төлөнгөн транзакцияларга 1 күн кетет. Жазылууну жаңыртуудан мурун акы толук алынып бүткүчө күтө туруңуз. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Банк аркылуу төлөнгөн транзакцияларга 1 күн кетет. Дагы бир салым кошуудан мурун, акы толук алынып бүткүчө күтө туруңуз. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Салымыңыз дагы деле иштелүүдө. Байланышыңыздын сапатына жараша бир нече мүнөткө созулушу мүмкүн. Жазылууну жаңыртуудан мурун акы толук алынып бүткүчө күтө туруңуз. @@ -5954,7 +6005,7 @@ Бир жолку салымыңыз күтүлүүдө. Салымыңыз алынганда, профилиңизде %1$s төшбелгиси көрүнүп калат. - Банк аркылуу төлөнгөн транзакцияларга 1 күн кетет. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Кененирээк маалымат @@ -6291,6 +6342,8 @@ Чалуунун чоо-жайы + + Чалуунун аталышын өзгөртүү Чалуунун аталышын кошуу @@ -6358,6 +6411,10 @@ QR кодуңуз менен шилтеме кайра коюлуп, жаңы QR код жана шилтеме түзүлдү. Signal\'дан мени менен сүйлөшкүңүз келсе, телефонуңуздагы QR кодду скандаңыз. + + QR code not found + + Try scanning another image containing a Signal QR code. Ушул шилтеме аркылуу колдонуучу атыңыз көрүнүп, сиз менен маектеше алышат. Ишенген адамдарыңыз менен гана бөлүшүңүз. @@ -6447,6 +6504,10 @@ %1$s Signal колдонуучусу эмес. Ушул номерди чакырасызбы? Чакыруу + + QR кодун скандоо + + Байланыш катасы кетти. Бир аздан соң кайталап көрүңүз. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 091ef4536a..9245087e70 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -432,6 +432,8 @@ SMS žinutės programėlėje „Signal“ nebepalaikomos. SMS žinutės programėlėje „Signal“ nebepalaikomos. Pakviesk %1$s į „Signal“ ir pratęsk pokalbį čia. + + Šis žmogus nebenaudoja „Molly“. Pakvieskite jį (ją) į „Molly“ ir pratęskite pokalbį čia. Pakviesti į Molly @@ -554,7 +556,7 @@ Pranešta apie šlamštą - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + „Signal“ buvo pranešta, kad šis asmuo gali siųsti šlamštą. „Signal“ nemato jokių pokalbių turinio. Pranešta apie šlamštą @@ -575,7 +577,7 @@ Kriptovaliutų ar pinigų sukčiai - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Jei nepažįstamas asmuo atsiunčia žinutę apie kriptovaliutą (pvz., „Bitcoin“) ar pasiūlymą investuoti, būkite atsargūs – greičiausiai tai yra šlamštas. Neaiškios arba su niekuo nesusijusios žinutės @@ -854,7 +856,7 @@ Rodyti - Ilgalaikė Signal susisiekimo triktis! + Ilgalaikė Molly susisiekimo triktis! Molly nepavyko prisiregistruoti prie „Google Play“ paslaugų. Molly žinutės ir skambučiai buvo išjungti, prašome pabandyti iš naujo registruotis skyrelyje Nustatymai (angl. Settings) > Išplėstiniai (angl. Advanced). @@ -1480,6 +1482,8 @@ %1$s pasikeitė profilio vardą į %2$s. %1$s pasikeitė profilio vardą iš %2$s į %3$s. %1$s pasikeitė profilį. + + Jūs pradėjote šį pokalbį su %1$s. Jūs sukūrėte grupę. @@ -1995,8 +1999,10 @@ Atsijungta „Signal“ skambučio nuoroda - - Visi, kas prisijungs prie šio skambučio per nuorodą, matys tavo vardą, nuotrauką ir telefono numerį. + + Visi, kas prisijungs prie šio skambučio per nuorodą, matys tavo vardą, nuotrauką ir telefono numerį. + + Visi, kurie prisijungs prie šio skambučio per nuorodą, matys jūsų vardą ir nuotrauką. Laukiama, kol įleis… @@ -2456,7 +2462,7 @@ Naudotojo vardas sėkmingai pašalintas. Susidurta su tinklo klaida. - Too many attempts made, please try again later. + Atlikta per daug bandymų, bandykite vėliau. Šis naudotojo vardas užimtas. Naudotojo varduose gali būti tik simboliai a–Z, 0–9 ir pabraukimo brūkšniai. Naudotojo vardai negali prasidėti skaitmenimi. @@ -2480,7 +2486,7 @@ Šis skaičius negali būti 00. Įvesk skaitmenį nuo 1 iki 9 - Numbers with more than 2 digits can\'t start with 0 + Skaičiai iš daugiau kaip 2 skaitmenų negali prasidėti 0 Kai naudotojo vardas atkuriamas, QR kodas ir nuoroda nustatomi iš naujo. Ar tikrai to norite? @@ -4106,6 +4112,12 @@ Niekas nematys, kad naudojatės „Signal“, nebent išsiųsite jiems žinutę arba jau esate pradėję pokalbį. "Jei norite pakeisti šį nustatymą, nustatykite „Kas gali matyti mano numerį“ vertę į „Niekas“." + + Ar tikrai to norite? + + „Kas gali mane rasti pagal numerį“ nustačius į „Niekas“, žmonėms bus sunkiau jus rasti per „Signal“. + + Atšaukti Visi Niekas Ekrano užraktas @@ -4611,11 +4623,16 @@ Grupės aprašas + Standartinė + Greičiau, mažiau duomenų + Aukšta + Lėčiau, daugiau duomenų - Nuotraukų kokybė + + Medijos kokybė Pakvieskite savo draugus @@ -5105,6 +5122,32 @@ Vienas ar daugiau elementų buvo per dideli Vienas ar daugiau elementų buvo neteisingi Pažymėta per daug elementų + + Vaizdo įrašas nustatytas peržiūrėti vieną kartą + + Nuotrauka nustatyta peržiūrėti vieną kartą + + Nustatyta aukšta vaizdo įrašo kokybė + + Nustatyta standartinė vaizdo įrašo kokybė + + Nustatyta aukšta nuotraukos kokybė + + Nustatyta standartinė nuotraukos kokybė + + + Nustatyta aukšta %1$d elemento kokybė + Nustatyta aukšta %1$d elementų kokybė + Nustatyta aukšta %1$d elemento kokybė + Nustatyta aukšta %1$d elementų kokybė + + + + Nustatyta standartinė %1$d elemento kokybė + Nustatyta standartinė %1$d elementų kokybė + Nustatyta standartinė %1$d elementų kokybė + Nustatyta standartinė %1$d elementų kokybė + Atsisakyti Piešti @@ -5129,6 +5172,20 @@ Atmesti pakeitimus? Prarasite bet kokius šiai nuotraukai atliktus pakeitimus. + + Rasta %1$s + + Pradėkite pokalbį su „%1$s“ + + Pereiti į pokalbį + + + Susieti įrenginį? + + Atrodo, kad bandote susieti „Signal“ įrenginį. Bakstelėkite „Tęsti“ ir nuskaitykite kodą dar kartą, kad susietumėte. + + Tęsti + Mano ženkleliai Pagrindinis ženklelis @@ -5227,7 +5284,7 @@ Laukiama mokėjimo - Laukiama tavo %1$s banko pavedimo. Banko pavedimai paprastai atliekami per 1 darbo dieną. + Laukiama jūsų %1$s bankinio pavedimo. Bankiniai pavedimai atliekami per 1–14 darbo dienų. Sužinoti daugiau @@ -6209,9 +6266,9 @@ Tu jau turi laukiančią paramą - Banko pavedimai paprastai apdorojami per 1 darbo dieną. Prieš atnaujinant prenumeratą prašome palaukti, kol šis mokėjimas bus užbaigtas. + Bankiniai pavedimai atliekami per 1–14 darbo dienų. Prieš atnaujinant prenumeratą prašome palaukti, kol šis mokėjimas bus užbaigtas. - Banko pavedimai paprastai apdorojami per 1 darbo dieną. Prieš skiriant kitą paramą prašome palaukti, kol šis mokėjimas bus užbaigtas. + Bankiniai pavedimai atliekami per 1–14 darbo dienų. Prieš skiriant kitą paramą prašome palaukti, kol šis mokėjimas bus užbaigtas. Tavo parama vis dar apdorojama. Tai gali užtrukti kelias minutes, priklausomai nuo interneto ryšio. Prieš atnaujinant prenumeratą prašome palaukti, kol šis mokėjimas bus užbaigtas. @@ -6365,7 +6422,7 @@ Laukiama tavo vienkartinės paramos. Kai tavo parama mus pasieks, savo profilyje galėsi rodyti %1$s ženklelį. - Banko pavedimai paprastai apdorojami per 1 darbo dieną. %1$s + Bankiniai pavedimai apdorojami per 1–14 darbo dienų. %1$s Sužinoti daugiau @@ -6714,6 +6771,8 @@ Skambučio informacija + + Redaguoti skambučio pavadinimą Pridėti skambučio pavadinimą @@ -6781,6 +6840,10 @@ Jūsų QR kodas ir nuoroda nustatyti iš naujo. Sukurtas naujas QR kodas ir nuoroda. Nuskaitykite šį QR kodą telefonu, kad galėtumėte kalbėtis su manimi per „Signal“. + + QR kodas nerastas + + Pabandykite nuskaityti kitą vaizdą su „Signal“ QR kodu. Visi, kas turi šią nuorodą, galės matyti jūsų naudotojo vardą ir pradėti pokalbį su jumis. Bendrinkite ją tik su žmonėmis, kuriais pasitikite. @@ -6876,6 +6939,10 @@ %1$s nenaudoja „Signal“. Ar norėtumėte pakviesti šį numerį? Pakviesti + + Skenuoti QR kodą + + Susidurta su tinklo klaida. Vėliau bandykite dar kartą. diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 1fab09eb39..a6e5f9bf9b 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -429,6 +429,8 @@ Signal vairs netiek atbalstīta SMS ziņu sūtīšana. Signal vairs netiek atbalstīta SMS ziņu sūtīšana. Uzaiciniet lietotāju %1$s izmantot Signal, lai turpinātu sarunu šeit. + + Šī persona vairs neizmanto Molly. Lai turpinātu sarunāties šajā platformā, uzaiciniet šo personu izmantot Molly. Uzaicināt uz Molly @@ -545,7 +547,7 @@ Ziņots par surogātpastu - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal saņēma ziņu, ka šī persona, iespējams, sūta surogātpastu. Signal pārstāvjiem nav redzams nevienas sarunas saturs. Atzīmēts kā surogātpasts @@ -566,7 +568,7 @@ Kriptovalūtu vai naudas krāpšana - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ja nepazīstama persona jums nosūta ziņu par kriptovalūtām (piemēram, Bitcoin) vai par izdevību nopelnīt, uzmanieties — tas, visticamāk, ir surogātpasts. Neskaidras vai neatbilstošas ziņas @@ -836,7 +838,7 @@ Skatīt - Signal sakaru permanenta kļūme! + Molly sakaru permanenta kļūme! Molly neizdevās reģistrēties Google Play pakalpojumos. Molly ziņas un zvani ir atspējoti. Lūdzu, mēģiniet vēlreiz piereģistrēties sadaļā Iestatījumi -> Papildu. @@ -1433,6 +1435,8 @@ %1$s mainīja profila nosaukumu uz %2$s. %1$s mainīja profila nosaukumu no %2$s uz %3$s. %1$s mainīja profilu. + + Jūs uzsākāt šo sarunu ar lietotāju %1$s. Jūs izveidojāt grupu. @@ -1928,8 +1932,10 @@ Atvienots Signal zvana saite - - Ikviens, kurš pievienosies šim zvanam, izmantojot saiti, redzēs jūsu vārdu, attēlu un tālruņa numuru. + + Ikviens, kurš pievienosies šim zvanam, izmantojot saiti, redzēs jūsu vārdu, attēlu un tālruņa numuru. + + Ikviens, kurš pievienosies šim zvanam, izmantojot saiti, redzēs jūsu vārdu un fotoattēlu. Gaida pievienošanu… @@ -2376,7 +2382,7 @@ Lietotājvārds ir sekmīgi noņemts. Tīkla kļūda. - Too many attempts made, please try again later. + Pārāk daudz mēģinājumu. Lūdzu, pēc brīža mēģiniet vēlreiz. Šis lietotājvārds ir aizņemts. Lietotājvārdi var ietvert tikai a–Z, 0–9 un pasvītrojuma zīmes. Lietotājvārdi nevar sākties ar skaitli. @@ -2400,7 +2406,7 @@ Šis numurs nedrīkst būt 00. Ievadiet ciparu no 1 līdz 9. - Numbers with more than 2 digits can\'t start with 0 + Numuri, kuros ir vairāk nekā divi cipari, nedrīkst sākties ar \"0\" Mainot lietotājvārdu, tiks atiestatīts esošais QR kods un saite. Vai tiešām turpināt? @@ -4000,6 +4006,12 @@ Neviens neredzēs, ka izmantojat Signal, izņemot tos, kuriem nosūtīsiet ziņu vai ar kuriem jau esat sarunājušies iepriekš. "Lai mainītu šo iestatījumu, sadaļā \"Kas var redzēt manu numuru\" atzīmējiet \"Neviens\"." + + Vai tiešām turpināt? + + Funkcijai \"Kas var mani atrast pēc numura\" iestatot \"Neviens\", cilvēkiem būs grūtāk jūs atrast Signal platformā. + + Atcelt Ikviens Neviens Ekrāna bloķēšana @@ -4501,11 +4513,16 @@ Grupas apraksts + Standarta + Ātrāk, mazāk datu + Augsta + Lēnāk, vairāk datu - Fotoattēla kvalitāte + + Multivides kvalitāte Uzaiciniet draugus @@ -4988,6 +5005,30 @@ Viens vai vairāki vienumi bija pārāk lieli Viens vai vairāki vienumi bija nederīgi Pārāk daudz izvēlētu vienumu + + Videoklipu var skatīt tikai vienu reizi + + Fotoattēlu var skatīt tikai vienu reizi + + Videoklipam ir iestatīta augsta kvalitāte + + Videoklipam ir iestatīta standarta kvalitāte + + Fotoattēlam ir iestatīta augsta kvalitāte + + Fotoattēlam ir iestatīta standarta kvalitāte + + + %1$d vienumiem ir iestatīta augsta kvalitāte + %1$d vienumam ir iestatīta augsta kvalitāte + %1$d vienumiem ir iestatīta augsta kvalitāte + + + + %1$d vienumiem ir iestatīta standarta kvalitāte + %1$d vienumam ir iestatīta standarta kvalitāte + %1$d vienumiem ir iestatīta standarta kvalitāte + Atcelt Zīmēt @@ -5012,6 +5053,20 @@ Atmest izmaiņas? Jūs pazaudēsiet visas izmaiņas, kuras veicāt šajā attēlā. + + Atrasts lietotājs: %1$s + + Uzsāciet sarunu ar \"%1$s\" + + Doties uz sarunu + + + Vai piesaistīt ierīci? + + Šķiet, ka mēģināt piesaistīt Signal ierīci. Lai to piesaistītu, pieskarieties pie \"Turpināt\" un vēlreiz noskenējiet kodu. + + Turpināt + Manas nozīmītes Izceltā nozīmīte @@ -5110,7 +5165,7 @@ Maksājums tiek apstrādāts - Jūsu bankas pārskaitījums %1$s apmērā tiek apstrādāts. Bankas pārskaitījumu apstrāde parasti ilgst 1 darbdienu. + Jūsu bankas pārskaitījums %1$s apmērā tiek apstrādāts. Bankas pārskaitījumu process var ilgt no 1 līdz 14 darbdienām. Uzzināt vairāk @@ -6073,9 +6128,9 @@ Jums jau ir viens ziedojums procesā - Bankas pārskaitījumu apstrāde parasti ilgst 1 darbdienu. Pirms abonementa atjaunināšanas, lūdzu, uzgaidiet, līdz šis maksājums tiks pabeigts. + Bankas pārskaitījumu apstrāde var ilgt no 1 līdz 14 darbdienām. Pirms abonementa atjaunināšanas, lūdzu, uzgaidiet, līdz šis maksājums tiks pabeigts. - Bankas pārskaitījumu apstrāde parasti ilgst 1 darbdienu. Pirms cita ziedojuma veikšanas, lūdzu, uzgaidiet, līdz šis maksājums tiks pabeigts. + Bankas pārskaitījumu apstrāde var ilgt no 1 līdz 14 darbdienām. Pirms cita ziedojuma veikšanas, lūdzu, uzgaidiet, līdz šis maksājums tiks pabeigts. Jūsu ziedojums joprojām tiek apstrādāts. Apstrāde var ilgt dažas minūtes atkarībā no jūsu savienojuma. Pirms abonementa atjaunināšanas, lūdzu, uzgaidiet, līdz šis maksājums tiks pabeigts. @@ -6228,7 +6283,7 @@ Jūsu vienreizējais ziedojums ir ceļā. Kad ziedojums tiks saņemts, savam profilam varēsiet pievienot %1$s nozīmīti. - Bankas pārskaitījumu apstrāde parasti ilgst 1 darbdienu. %1$s + Bankas pārskaitījumu apstrāde var ilgt no 1 līdz 14 darbdienām. %1$s Uzzināt vairāk @@ -6573,6 +6628,8 @@ Zvana informācija + + Rediģēt zvana nosaukumu Pievienot audiozvana nosaukumu @@ -6640,6 +6697,10 @@ Jūsu QR kods un saite tika atiestatīti, un tika izveidots jauns QR kods un saite. Noskenē šo QR kodu ar savu tālruni, lai sarunātos ar mani pakalpojumā Signal. + + QR kods netika atrasts. + + Mēģiniet skenēt citu attēlu, kas satur Signal QR kodu. Ikviens, kuram ir pieejama šī saite, var skatīt jūsu lietotājvārdu un uzsākt sarunu ar jums. Kopīgojiet šo saiti tikai ar uzticamiem cilvēkiem. @@ -6733,6 +6794,10 @@ %1$s nav Signal lietotājs. Vai vēlaties uzaicināt šī numura īpašnieku? Uzaicināt + + Skenēt kvadrātkodu + + Radās tīkla kļūda. Vēlāk mēģiniet vēlreiz. diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 3eeef29896..17954ee3cf 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -426,6 +426,8 @@ Signal повеќе не поддржува SMS пораки. Signal повеќе не поддржува SMS пораки. Испратете покана на %1$s за користење Signal за да продолжите со разговорот тука. + + Оваа личност повеќе не користи Molly. Поканете ја на Molly за да продолжите со разговорот тука. Испрати покана за Molly @@ -536,7 +538,7 @@ Пријавено како спам - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal е известен дека оваа личност можеби испраќа спам. Signal не може да ја види содржината на ниеден разговор. Пријавено како спам @@ -557,7 +559,7 @@ Измами со крипто или пари - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Доколку некој кој не го познавате ви испрати порака за криптовалути (како Bitcoin) или за некоја финансиска можност, внимавајте—најверојатно се работи за спам. Нејасни или неповрзани пораки @@ -818,7 +820,7 @@ Преглед - Трајно неуспешна комуникација со Signal + Трајно неуспешна комуникација со Molly Molly не успеа да се регистрира со Google Play услуги. Пораките и повиците од Molly се оневозможени. Ве молиме пробајте да се регистрирате повторно во Поставувања > Напредно. @@ -1386,6 +1388,8 @@ %1$s го промени името на својот профил во %2$s. %1$s го промени името на својот профил од %2$s во %3$s. %1$s го промени профилот. + + Го започнавте овој разговор со %1$s. Создадовте група. @@ -1861,8 +1865,10 @@ Неповрзан Линк за Signal повик - - Сите кои ќе се придружат на повикот преку линкот ќе можат да ги видат вашите име, слика и телефонски број. + + Сите кои ќе се придружат на повикот преку линкот ќе можат да ги видат вашите име, слика и телефонски број. + + Сите кои ќе се придружат на повикот преку линкот ќе можат да ги видат вашите име и слика. Чекате да се вклучите… @@ -2296,7 +2302,7 @@ Успешно отстрането корисничко име. Се случи мрежна грешка. - Too many attempts made, please try again later. + Направивте премногу обиди, ве молиме обидете се повторно подоцна. Корисничкото име е веќе во употреба. Корисничките имиња можат да се состојат од а-Ш, 0-9 и долни цртички. Корисничкото име не може да започне со број. @@ -2320,7 +2326,7 @@ Овој број не може да биде 00. Внесете цифра од 1 до 9 - Numbers with more than 2 digits can\'t start with 0 + Броевите со повеќе од 2 цифри не може да почнуваат со 0 Менувањето на вашето корисничко име ќе ги ресетира вашите постоечки QR код и линк. Дали сте сигурни? @@ -3894,6 +3900,12 @@ Никој нема да може да види дека сте на Signal освен ако не им испратите порака или имате постоечки разговор со нив. "За да го промените ова поставување, сменето го поставувањето за „Кој може да го види мојот број“ на „Никој“." + + Дали сте сигурни? + + Ќе биде потешко да ве пронајдат на Signal доколку ја поставите опцијата „Кој може да ме пронајде со мојот телефонски број“ на „Никој“. + + Откажи Сите Никој Заклучување на екранот @@ -4391,11 +4403,16 @@ Опис на групата + Стандарден + Побрзо, помалку податоци + Висок + Побавно, повеќе податоци - Квалитет на фотографија + + Квалитет на медиумски датотеки Покани ги пријателите @@ -4871,6 +4888,28 @@ Еден или повеќе предмети беа премногу големи Еден или повеќе предмети беа невалидни Премногу избрани предмети + + Видеото е поставено на еднократен преглед + + Сликата е поставена на еднократен преглед + + Видеото е поставено на висок квалитет + + Видеото е поставено на стандарден квалитет + + Сликата е поставена на висок квалитет + + Сликата е поставена на стандарден квалитет + + + %1$d датотека е поставена на висок квалитет + %1$d датотеки се поставени на висок квалитет + + + + %1$d датотека е поставена на стандарден квалитет + %1$d датотеки се поставени на стандарден квалитет + Откажи Цртај @@ -4895,6 +4934,20 @@ Да ги откажам промените? Ќе ги изгубите сите промени направени на оваа фотографија. + + Пронајден е корисникот %1$s + + Започнете разговор со „%1$s“ + + Оди до разговорот + + + Сакате да се поврзе уредот? + + Изгледа дека сакате да поврзете Signal уред. Допрете „продолжи“ и скенирајте го кодот уште еднаш за поврзување. + + Продолжи + Мои беџови Истакнат беџ @@ -4993,7 +5046,7 @@ Плаќањето е во тек - Вашиот пренос од %1$s е во тек. Вообичаено е потребен 1 работен ден за да се процесира пренос на средства. + Вашиот пренос на средства од %1$s е во тек. Потребни се од 1 до 14 работни дена за да се комплетира пренос на средства. Дознајте повеќе @@ -5937,9 +5990,9 @@ Имате донација во тек - Вообичаено е потребен 1 работен ден за да се обработи пренос на средства. Ве молиме почекајте да заврши уплатата пред да ја ажурирате вашата претплата на повеќекратни донации. + Потребни се од 1 до 14 работни дена за да се обработи пренос на средства. Ве молиме почекајте да заврши уплатата пред да ја ажурирате вашата претплата на повеќекратни донации. - Вообичаено е потребен 1 работен ден за да се обработи пренос на средства. Ве молиме почекајте да заврши уплатата пред да направите друга донација. + Потребни се од 1 до 14 работни дена за да се обработи пренос на средства. Ве молиме почекајте да заврши уплатата пред да направите друга донација. Вашата донација сѐ уште се обработува. Ова може да потрае неколку минути, во зависност од вашата мрежна поврзаност. Ве молиме почекајте да заврши уплатата пред да ја ажурирате вашата претплата на повеќекратни донации. @@ -6091,7 +6144,7 @@ Вашата еднократна донација е во тек. Ќе можете да го прикажете беџот %1$s на вашиот профил откако ќе се прими вашата донација. - Вообичаено е потребен 1 работен ден за да се обработи пренос на средства. %1$s + Потребни се од 1 до 14 работни дена за да се обработи пренос на средства. %1$s Дознајте повеќе @@ -6432,6 +6485,8 @@ Детали за повикот + + Изменете го името на повикот Додајте име на повикот @@ -6499,6 +6554,10 @@ Вашиот QR код и линк беа ресетирани и создадени се нов QR код и линк. Скенирај го овој QR код со твојот телефон за да разговараме на Signal. + + Не е пронајден QR код + + Обидете се да скенирарате друга слика која содржи Signal QR код. Секој што го има линкот може да го види вашето корисничко име и да започне разговор со вас. Споделете го со луѓе на кои им верувате. @@ -6590,6 +6649,10 @@ %1$s не е Signal корисник. Дали сакате да испратите покана? Покани + + Скенирајте го QR кодот + + Се случи мрежна грешка. Обидете се повторно подоцна. diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index f588325cee..66b27d7e7e 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -426,6 +426,8 @@ SMS സന്ദേശമയയ്‌ക്കൽ ഇനിമുതൽ Signal-ൽ പിന്തുണയ്‌ക്കുന്നില്ല. SMS സന്ദേശമയയ്‌ക്കൽ ഇനിമുതൽ Signal-ൽ പിന്തുണയ്‌ക്കുന്നില്ല. സംഭാഷണം ഇവിടെ നിലനിർത്താൻ %1$s എന്നയാളെ Signal-ലേക്ക് ക്ഷണിക്കുക. + + ഈ വ്യക്തി ഇപ്പോൾ Molly ഉപയോഗിക്കുന്നില്ല. സംഭാഷണം ഇവിടെ നിലനിർത്താൻ അവരെ Molly-ലേക്ക് ക്ഷണിക്കുക. Molly-ലേക്ക് ക്ഷണിക്കുക @@ -536,7 +538,7 @@ സ്പാം റിപ്പോർട്ട് ചെയ്തു - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + ഈ വ്യക്തി സ്‌പാം ആകാം അയയ്ക്കുന്നതെന്ന് Signal-ന് അറിയിപ്പ് ലഭിച്ചു. Signal-ന് ഒരു ചാറ്റിന്റെയും ഉള്ളടക്കം കാണാൻ കഴിയില്ല. സ്പാം റിപ്പോർട്ട് ചെയ്തു @@ -557,7 +559,7 @@ ക്രിപ്റ്റോ അല്ലെങ്കിൽ പണം തട്ടിപ്പുകൾ - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + നിങ്ങൾക്ക് അറിഞ്ഞുകൂടാത്ത ആരെങ്കിലും നിങ്ങൾക്ക് ക്രിപ്‌റ്റോകറൻസിയെ കുറിച്ചോ (ബിറ്റ്‌കോയിൻ പോലുള്ളവ) സാമ്പത്തികവുമായി ബന്ധപ്പെട്ട അവസരത്തെക്കുറിച്ചോ സന്ദേശങ്ങൾ അയച്ചാൽ ശ്രദ്ധയോടെ കൈകാര്യം ചെയ്യുക—അത് സ്പാം ആകാൻ സാധ്യതയുണ്ട്. അവ്യക്തമോ അപ്രസക്തമോ ആയ സന്ദേശങ്ങൾ @@ -818,7 +820,7 @@ കാണുക - സ്ഥിരമായ Signal ആശയവിനിമയ പരാജയം! + സ്ഥിരമായ Molly ആശയവിനിമയ പരാജയം! Google Play Services രജിസ്റ്റർ ചെയ്യാൻ Molly ന് കഴിഞ്ഞില്ല. Molly സന്ദേശങ്ങളും കോളുകളും പ്രവർത്തനരഹിതമാക്കി. ക്രമീകരണം > വിപുലമായ ക്രമീകരണം ൽ വീണ്ടും രജിസ്റ്റർ ചെയ്യാൻ ശ്രമിക്കുക. @@ -1386,6 +1388,8 @@ %1$s അവരുടെ പ്രൊഫൈൽ നാമം %2$s എന്ന് മാറ്റി. %1$s അവരുടെ പ്രൊഫൈൽ നാമം %2$sയിൽ നിന്ന് %3$sലേക്ക് മാറ്റി. %1$s അവരുടെ പ്രൊഫൈൽ മാറ്റി  + + %1$s എന്നയാളുമായുള്ള ഈ ചാറ്റ് നിങ്ങൾ ആരംഭിച്ചു. നിങ്ങൾ ഗ്രൂപ്പ് സൃഷ്ടിച്ചു. @@ -1861,8 +1865,10 @@ വിച്ഛേദിച്ചു Signal കോൾ ലിങ്ക് - - ലിങ്കിലൂടെ ഈ കോളിൽ ചേരുന്ന ആർക്കും നിങ്ങളുടെ പേര്, ഫോട്ടോ, ഫോൺ നമ്പർ എന്നിവ കാണാനാകും. + + ലിങ്കിലൂടെ ഈ കോളിൽ ചേരുന്ന ആർക്കും നിങ്ങളുടെ പേര്, ഫോട്ടോ, ഫോൺ നമ്പർ എന്നിവ കാണാനാകും. + + ലിങ്ക് വഴി ഈ കോളിൽ ചേരുന്ന ആർക്കും നിങ്ങളുടെ പേരും ഫോട്ടോയും കാണാനാകും. പ്രവേശനം അനുവദിക്കാൻ കാത്തിരിക്കുന്നു… @@ -2296,7 +2302,7 @@ ഉപയോക്തൃനാമം നീക്കം ചെയ്തു. ഒരു നെറ്റ്‌വർക്ക് പിശക് നേരിട്ടു. - Too many attempts made, please try again later. + വളരെയധികം ശ്രമങ്ങൾ നടത്തി, പിന്നീട് വീണ്ടും ശ്രമിക്കുക. ഈ ഉപയോക്തൃനാമം എടുത്തിട്ടുണ്ട്. ഉപയോക്തൃനാമങ്ങളിൽ a–Z, 0–9, അണ്ടർ സ്കോറുകൾ എന്നിവ മാത്രമേ ഉൾപ്പെടുത്താനാകൂ. ഉപയോക്തൃനാമം ഒരു നമ്പറിൽ ആരംഭിക്കാൻ കഴിയില്ല. @@ -2320,7 +2326,7 @@ ഈ സംഖ്യ 00 ആകാൻ പാടില്ല. 1-നും 9-നും ഇടയിലുള്ള ഒരു അക്കം നൽകുക - Numbers with more than 2 digits can\'t start with 0 + 2 അക്കങ്ങളിൽ കൂടുതലുള്ള സംഖ്യകൾ 0-ൽ ആരംഭിക്കാനാകില്ല നിങ്ങളുടെ ഉപയോക്തൃനാമം വീണ്ടെടുക്കുന്നതിലൂടെ നിങ്ങളുടെ നിലവിലുള്ള QR കോഡും ലിങ്കും പുനഃക്രമീകരിക്കും. ഉറപ്പാണോ? @@ -3894,6 +3900,12 @@ നിങ്ങൾ സന്ദേശമയയ്‌ക്കുകയോ മുമ്പ് ചാറ്റ് ചെയ്തിട്ടുണ്ടെങ്കിലോ മാത്രമേ നിങ്ങൾ Signal-ൽ ഉണ്ടെന്ന് കാണാനാകൂ. "ഈ ക്രമീകരണം മാറ്റാൻ, \'ആർക്കൊക്കെ എന്റെ നമ്പർ കാണാൻ കഴിയും\' എന്നത് \'ആരും കാണണ്ട\' എന്ന് സജ്ജീകരിക്കുക." + + ഉറപ്പാണോ? + + \"നമ്പർ പ്രകാരം ആർക്കൊക്കെ എന്നെ കണ്ടെത്താനാകും\" എന്നത് \"ആർക്കുമില്ല\" എന്ന് ക്രമീകരിക്കുന്നത് ആളുകൾക്ക് നിങ്ങളെ Signal-ൽ കണ്ടെത്തുന്നത് ബുദ്ധിമുട്ടാക്കും. + + റദ്ദാക്കുക എല്ലാവരും ആരുംതന്നെയില്ല സ്‌ക്രീൻ ലോക്ക് @@ -4391,11 +4403,16 @@ ഗ്രൂപ്പ് വിവരണം + സ്റ്റാൻഡേർഡ് + വേഗത്തിൽ, കുറഞ്ഞ ഡാറ്റ + ഉയർന്നത് + സാവധാനം, കൂടുതൽ ഡാറ്റ - ഫോട്ടോ നിലവാരം + + മീഡിയ നിലവാരം സുഹൃത്തുക്കളെ ക്ഷണിക്കുക @@ -4871,6 +4888,28 @@ ഒന്നോ അതിലധികമോ ഇനങ്ങൾ വളരെ വലുതായിരുന്നു ഒന്നോ അതിലധികമോ ഇനങ്ങൾ അസാധുവാണ് വളരെയധികം ഇനങ്ങൾ തിരഞ്ഞെടുത്തു + + വീഡിയോ ഒരിക്കൽ കാണാൻ സജ്ജമാക്കി + + ഫോട്ടോ ഒരിക്കൽ കാണാൻ സജ്ജമാക്കി + + വീഡിയോ ഉയർന്ന നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + + വീഡിയോ സാധാരണ നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + + ഫോട്ടോ ഉയർന്ന നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + + ഫോട്ടോ സാധാരണ നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + + + %1$d ഇനം ഉയർന്ന നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + %1$d ഇനങ്ങൾ ഉയർന്ന നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + + + + %1$d ഇനം സാധാരണ നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + %1$d ഇനങ്ങൾ സാധാരണ നിലവാരത്തിലേക്ക് സജ്ജമാക്കി + റദ്ദാക്കൂ വരയ്ക്കുക @@ -4895,6 +4934,20 @@ മാറ്റങ്ങൾ ഉപേക്ഷിക്കുക? ഈ ഫോട്ടോയിൽ നിങ്ങൾ വരുത്തിയ മാറ്റങ്ങളെല്ലാം നഷ്‌ടമാകും. + + %1$s എന്നയാളെ കണ്ടെത്തി + + \"%1$s\" എന്നയാളുമായി ഒരു ചാറ്റ് ആരംഭിക്കുക + + ചാറ്റിലേക്ക് പോകുക + + + ഉപകരണം ലിങ്ക് ചെയ്യണോ? + + നിങ്ങൾ ഒരു Signal ഉപകരണം ലിങ്ക് ചെയ്യാൻ ശ്രമിക്കുന്നതായി തോന്നുന്നു. കോഡ് ലിങ്ക് ചെയ്യാൻ തുടരുക ടാപ്പ് ചെയ്‌ത് വീണ്ടും സ്‌കാൻ ചെയ്യുക. + + തുടരുക + എന്റെ ബാഡ്‌ജുകൾ ഫീച്ചർ ചെയ്യുന്ന ബാഡ്‌ജ് @@ -4993,7 +5046,7 @@ പേയ്മെന്റ് തീർപ്പാക്കപ്പെട്ടിട്ടില്ല - നിങ്ങളുടെ %1$s തുകയുടെ ബാങ്ക് ട്രാൻസ്ഫർ തീർപ്പാക്കിയിട്ടില്ല. ബാങ്ക് ട്രാൻസ്ഫറുകൾ പൂർത്തിയാക്കാൻ സാധാരണയായി 1 പ്രവൃത്തി ദിവസം എടുക്കും. + നിങ്ങളുടെ %1$s തുകയുടെ ബാങ്ക് ട്രാൻസ്ഫർ തീർപ്പാക്കിയിട്ടില്ല. ബാങ്ക് ട്രാൻസ്ഫറുകൾ പൂർത്തിയാകാൻ 1 മുതൽ 14 വരെ പ്രവൃത്തി ദിവസം എടുക്കും. കൂടുതലറിയുക @@ -5937,9 +5990,9 @@ നിങ്ങൾക്ക് തീർപ്പാക്കാത്ത ഒരു സംഭാവനയുണ്ട് - ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിന് സാധാരണയായി 1 പ്രവൃത്തി ദിവസമെടുക്കും. നിങ്ങളുടെ സബ്‌സ്‌ക്രിപ്‌ഷൻ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിന് മുമ്പ്, ഈ പേയ്‌മെന്റ് പൂർത്തിയാകുന്നത് വരെ കാത്തിരിക്കുക. + ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യാൻ 1 മുതൽ 14 വരെ പ്രവൃത്തി ദിവസം എടുക്കും. നിങ്ങളുടെ സബ്‌സ്‌ക്രിപ്‌ഷൻ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിന് മുമ്പ്, ഈ പേയ്‌മെന്റ് പൂർത്തിയാകുന്നത് വരെ കാത്തിരിക്കുക. - ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിന് സാധാരണയായി 1 പ്രവൃത്തി ദിവസമെടുക്കും. മറ്റൊരു സംഭാവന നൽകുന്നതിന് മുമ്പ്, ഈ പേയ്‌മെന്റ് പൂർത്തിയാകുന്നതുവരെ കാത്തിരിക്കുക. + ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യാൻ 1 മുതൽ 14 വരെ പ്രവൃത്തി ദിവസം എടുക്കും. മറ്റൊരു സംഭാവന നൽകുന്നതിന് മുമ്പ്, ഈ പേയ്‌മെന്റ് പൂർത്തിയാകുന്നതുവരെ കാത്തിരിക്കുക. നിങ്ങളുടെ സംഭാവന ഇപ്പോഴും പ്രോസസ് ചെയ്യുകയാണ്. നിങ്ങളുടെ കണക്ഷൻ അനുസരിച്ച്, ഇതിന് കുറച്ച് മിനിറ്റ് എടുത്തേക്കാം. നിങ്ങളുടെ സബ്‌സ്‌ക്രിപ്‌ഷൻ അപ്‌ഡേറ്റ് ചെയ്യുന്നതിന് മുമ്പ്, ഈ പേയ്‌മെന്റ് പൂർത്തിയാകുന്നത് വരെ കാത്തിരിക്കുക. @@ -6091,7 +6144,7 @@ നിങ്ങളുടെ ഒറ്റത്തവണ സംഭാവന തീർപ്പാക്കപ്പെട്ടിട്ടില്ല. നിങ്ങളുടെ സംഭാവന ലഭിക്കുമ്പോൾ നിങ്ങളുടെ പ്രൊഫൈലിൽ %1$s ബാഡ്ജ് പ്രദർശിപ്പിക്കാൻ നിങ്ങൾക്ക് കഴിയും. - ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യുന്നതിന് സാധാരണയായി 1 പ്രവൃത്തി ദിവസമെടുക്കും. %1$s + ബാങ്ക് ട്രാൻസ്ഫറുകൾ പ്രോസസ്സ് ചെയ്യാൻ 1 മുതൽ 14 വരെ പ്രവൃത്തി ദിവസം എടുക്കും. %1$s കൂടുതലറിയുക @@ -6432,6 +6485,8 @@ കോൾ വിശദാംശങ്ങൾ + + കോളിന്റെ പേര് എഡിറ്റ് ചെയ്യുക കോളിന്‍റെ പേര് ചേർക്കുക @@ -6499,6 +6554,10 @@ നിങ്ങളുടെ QR കോഡും ലിങ്കും പുനഃക്രമീകരിച്ചു, പുതിയൊരു QR കോഡും ലിങ്കും സൃഷ്‌ടിച്ചു. Signal-ൽ ഞാനുമായി ചാറ്റ് ചെയ്യാൻ ഈ QR കോഡ് സ്കാൻ ചെയ്യുക. + + QR കോഡ് കണ്ടെത്തിയില്ല + + ഒരു Signal QR കോഡ് അടങ്ങിയ മറ്റൊരു ചിത്രം സ്കാൻ ചെയ്യാൻ ശ്രമിക്കുക. ഈ ലിങ്കുള്ള ആർക്കും നിങ്ങളുടെ ഉപയോക്തൃനാമം കാണാനും നിങ്ങളുമായി ചാറ്റ് ചെയ്യാനും കഴിയും. നിങ്ങൾ വിശ്വസിക്കുന്ന ആളുകളുമായി മാത്രം ഇത് പങ്കിടുക. @@ -6590,6 +6649,10 @@ %1$s ഒരു Signal ഉപയോക്താവല്ല. ഈ നമ്പറിനെ ക്ഷണിക്കാൻ നിങ്ങൾക്ക് താൽപ്പര്യമുണ്ടോ? ക്ഷണിക്കുക + + QR കോഡ് സ്‌കാൻ ചെയ്യുക + + ഒരു നെറ്റ്‌വർക്ക് പിശക് നേരിട്ടു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക. diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 4bd0d0c8a6..fe21b9d1bf 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -426,6 +426,8 @@ SMS संदेशन यापुढे Signal मध्ये समर्थित नाही. SMS संदेशन यापुढे Signal मध्ये समर्थित नाही. संभाषण येथे ठेवण्यासाठी %1$s ला Signal वर आमंत्रित करा. + + ही व्यक्ती आता Molly वापरत नाही. संभाषण येथे ठेवण्यासाठी त्यांना Molly वर आमंत्रित करा. Molly वर आमंत्रित करा @@ -536,7 +538,7 @@ स्पॅम कळवा - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ने सूचित केले आहे की कदाचित ही व्यक्ती स्पॅम पाठवत आहे. Signal कोणत्याही चॅट्सचा मजकूर पाहू शकत नाही. स्पॅम म्हणून रिपोर्ट केले @@ -557,7 +559,7 @@ क्रिप्टो किंवा पैशांचे घोटाळे - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + जर आपण ओळखत नसलेल्या कोणी आपणाला क्रिप्टोकरन्सी (बीटकॉइन सारख्या) किंवा आर्थिक लाभाच्या संधीबद्दल संदेश पाठवल्यास, सावध रहा—ते स्पॅम असण्याची शक्यता आहे. अस्पष्ट किंवा असंबंधित संदेश @@ -818,7 +820,7 @@ बघा - स्थायी Signal संदेशन अपयश! + स्थायी Molly संदेशन अपयश! Google प्ले सेवांसोबत नोंदणी करण्यात Molly अक्षम झाला. Molly संदेश आणि कॉल अक्षम केले गेले आहेत, कृपया सेटिंग आणि प्रगत मधून पुन्हा-नोंदणी करण्याचा प्रयत्न करा. @@ -1386,6 +1388,8 @@ %1$s ने त्यांचे प्रोफाईल नाव %2$s वर बदलले आहे. %1$s ने त्यांचे प्रोफाईल नाव %2$s वरून %3$s ला बदलले आहे. %1$s ने त्यांची प्रोफाईल बदलली. + + आपण हे चॅट %1$s सह सुरू केले. आपण गट तयार केला. @@ -1861,8 +1865,10 @@ डिसकनेक्ट झाले Signal कॉल लिंक - - लिंकद्वारे या कॉलमध्ये जोडला जाणारा कोणीही आपले नाव, फोटो, आणि फोन नंबर पाहील. + + लिंकद्वारे या कॉलमध्ये जोडला जाणारा कोणीही आपले नाव, फोटो, आणि फोन नंबर पाहील. + + लिंकद्वारे या कॉलमध्ये जोडला जाणारा कोणीही आपले नाव आणि फोटो पाहील. आत येण्याची वाट पाहत आहे… @@ -2296,7 +2302,7 @@ वापरकर्तानाव यशस्वीरीत्या काढून टाकले. एक नेटवर्क त्रुटी आढळली. - Too many attempts made, please try again later. + आपण खूप प्रयत्न केले, कृपया पुन्हा प्रयत्न करा. हे वापरकर्तानाव घेतलेले आहे. वापरकर्तानावांमध्ये फक्त a–Z, 0–9, आणि अंडरस्कोर याचा समावेश असू शकतो. वापरकर्तानाव अंकांसोबत सोबत चालू होऊ शकत नाही. @@ -2320,7 +2326,7 @@ हा क्रमांक 00 असू शकत नाही. 1–9 मधील अंक प्रविष्ट करा - Numbers with more than 2 digits can\'t start with 0 + 2 पेक्षा जास्त अंक असलेल्या संख्या 0 ने सुरू होऊ शकत नाहीत आपले वापरकर्ता नाव पुर्नप्राप्त करण्याने आपला सध्याचा QR कोड आणि लिंक रिसेट होईल. आपल्याला खात्री आहे? @@ -3894,6 +3900,12 @@ आपण त्यांना संदेश पाठवल्याशिवाय किंवा त्यांच्यासोबत सध्याचे चॅट्स असल्यााशिवाय आपणाला कोणीही Signal वर पाहू शकणार नाही. "हे सेटिंग्ज बदलण्यासाठी, माझा नंबर कोण पाहू शकतो ते कोणीही नाही ला सेट करा." + + आपल्याला खात्री आहे? + + सेटिंग्ज \"नंबरनुसार मला कोण शोधू शकेल\" हे \"कोणीही नाही\" वर सेट करून Signal वर लोकांना आपणांस शोधणे कठीण होईल. + + रद्द करा प्रत्येकजण कोणीही नाही स्क्रीन लॉक @@ -4391,11 +4403,16 @@ गट विवरण + मानक + जलद, कमी डेटा + उच्च + हळू, अधिक डेटा - फोटो दर्जा + + मिडिया दर्जा आपल्या मित्रांना आमंत्रित करा @@ -4871,6 +4888,28 @@ एक किंवा अधिक आयटम खूप मोठे होते एक किंवा अधिक आयटम अवैध होते जास्त आयटम निवडले + + व्हिडिओ एकदा पाहण्यासाठी सेट करा + + एकदा फोटो पाहण्यासाठी सेट करा + + व्हिडिओ उच्च गुणवत्तेवर सेट करा + + व्हिडिओ मानक गुणवत्तेवर सेट केला आहे + + फोटो उच्च गुणवत्तेवर सेट करा + + फोटो मानक गुणवत्तेवर सेट करा + + + %1$d आयटम उच्च गुणवत्तेवर सेट केला आहे + %1$d आयटम्स उच्च गुणवत्तेवर सेट केले आहेत + + + + %1$d आयटम मानक गुणवत्तेवर सेट केला आहे + %1$d आयटम्स मानक गुणवत्तेवर सेट केले आहेत + रद्द करा रेखाटा @@ -4895,6 +4934,20 @@ बदल रद्द करायचे ? या फोटोमध्ये केलेले कोणतेही बदल तुम्ही गमावाल. + + %1$s सापडले + + \"%1$s\" सह चॅट सुरू करा + + चॅटवर जा + + + डिव्हाइस लिंक करायचे? + + आपण Signal डिव्हाइस लिंक करण्याचा प्रयत्न करत आहात असे दिसते. पुढे सुरू ठेवा टॅप करा आणि त्याला पुन्हा लिंक करण्यासाठी कोड स्कॅन करा. + + सुरू ठेवा + माझे बॅजेस वैशिष्ट्यीकृत बॅज @@ -4993,7 +5046,7 @@ पेमेंट प्रलंबित - आपले %1$s चे बँक हस्तांतरण प्रलंबित आहे. बँक हस्तांतरण सामान्यपणे पूर्ण होण्यासाठी 1 व्यावसायिक दिवसाचा कालावधी घेतात. + आपले %1$s चे बँक हस्तांतरण प्रलंबित आहे. बँक हस्तांतरण पूर्ण होण्यासाठी 1 ते 14 व्यावसायिक दिवस लागू शकतात. अधिक जाणून घ्या @@ -5937,9 +5990,9 @@ आपली देणगी प्रलंबित आहे - बँक हस्तांतरणावर प्रक्रिया होण्यासाठी सामान्यपणे 1 व्यावसायिक दिवसाचा कालावधी लागतो. कृपया आपल्या सदस्यत्वाला अद्ययावत करण्यापूर्वी या पेमेंट्स वर प्रक्रिया होण्याची प्रतिक्षा करा. + बँक हस्तांतरणावर प्रक्रिया होण्यासाठी 1 ते 14 दिवस लागू शकतात. कृपया आपल्या सदस्यत्वाला अद्ययावत करण्यापूर्वी या पेमेंट्स वर प्रक्रिया होण्याची प्रतिक्षा करा. - बँक हस्तांतरणावर प्रक्रिया होण्यासाठी सामान्यपणे 1 व्यावसायिक दिवसाचा कालावधी लागतो. कृपया आणखी एक देणगी देण्यापूर्वी हे पेमेंट्स पूर्ण होण्याची प्रतिक्षा करा. + बँक हस्तांतरणावर प्रक्रिया होण्यासाठी 1 ते 14 दिवस लागू शकतात. कृपया आणखी एक देणगी देण्यापूर्वी हे पेमेंट्स पूर्ण होण्याची प्रतिक्षा करा. आपल्या देणगीवर अद्याप प्रक्रिया केली जात आहे. आपल्या कनेक्शन वर अवलंबून हे काही मिनिटांचा वेळ घेऊ शकते. कृपया आपल्या सदस्यत्वाला अद्ययावत करण्यापूर्वी या पेमेंट्स वर प्रक्रिया होण्याची प्रतिक्षा करा. @@ -6091,7 +6144,7 @@ आपली एक-वेळ देणगी प्रलंबित आहे. आपली देणगी प्राप्त झाल्यानंतर आपण आपल्या प्रोफाईलवर %1$s बॅज प्रदर्शित करू शकाल. - बँक हस्तांतरण सामान्यपणे प्रक्रिया होण्यासाठी 1 व्यावसायिक दिवसाचा कालावधी घेतात. %1$s + बँक हस्तांतरणावर प्रक्रिया होण्यासाठी 1 ते 14 दिवस लागू शकतात. %1$s अधिक जाणून घ्या @@ -6432,6 +6485,8 @@ कॉल तपशील + + कॉल नाव संपादित करा कॉलचे नाव जोडा @@ -6499,6 +6554,10 @@ आपला QR कोड आणि लिंक रीसेट करण्यात आली आहे आणि नवीन QR कोड आणि लिंक तयार करण्यात आली आहे. माझ्यासोबत Signal वर चॅट करण्यासाठी आपल्या फोनसब हा QR कोड स्कॅन करा. + + QR कोड सापडला नाही + + Signal QR कोड असलेली दुसरी प्रतिमा स्कॅन करण्याचा प्रयत्न करा. या लिंकसह असलेले कोणीही आपले वापरकर्ता नाव पाहू शकेल आणि आपणासह चॅट करणे सुरू करेल. आपण ज्यांच्यावर विश्वास ठेवता फक्त त्याच्यासह शेअर करा. @@ -6590,6 +6649,10 @@ %1$s हा Signal वापरकर्ता नाही. या नंबराला आमंत्रित करणे आपणाला आवडेल का? आमंत्रित करा + + QR कोड स्कॅन करा + + नेटवर्क त्रुटी आली. पुन्हा प्रयत्न करा diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index 473215950a..c59f40f360 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -423,6 +423,8 @@ Pemesejan SMS tidak lagi disokong dalam Signal. Pemesejan SMS tidak lagi disokong dalam Signal. Jemput %1$s ke Signal untuk meneruskan perbualan di sini. + + Orang ini tidak lagi menggunakan Molly. Jemput ke Molly untuk meneruskan perbualan di sini. Jemput ke Molly @@ -527,7 +529,7 @@ Spam yang dilaporkan - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal telah dimaklumkan bahawa orang ini mungkin menghantar spam. Signal tidak dapat melihat kandungan dalam mana-mana sembang. Dilaporkan sebagai spam @@ -548,7 +550,7 @@ Kripto atau penipuan wang - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Jika seseorang yang tidak dikenali menghantar mesej tentang mata wang kripto (seperti Bitcoin) atau peluang menjana duit, berhati-hati—ia mungkin spam. Mesej yang tidak jelas atau tidak berkaitan @@ -800,7 +802,7 @@ Lihat - Kegagalan komunikasi Signal tetap! + Kegagalan komunikasi Molly tetap! Molly tidak dapat mendaftar dengan Perkhidmatan Google Play. Mesej dan panggilan Molly telah dinyahdayakan, sila daftar semula dalam Tetapan > Lanjutan. @@ -1339,6 +1341,8 @@ %1$s telah mengubah nama profil mereka kepada %2$s. %1$s telah mengubah nama profil mereka daripada %2$s kepada %3$s. %1$s telah mengubah profil mereka. + + Anda mulakan sembang ini dengan %1$s. Anda mencipta kumpulan. @@ -1794,8 +1798,10 @@ Terputus sambungan Pautan panggilan Signal - - Sesiapa sahaja yang menyertai panggilan ini melalui pautan akan melihat nama, foto dan nombor telefon anda. + + Sesiapa sahaja yang menyertai panggilan ini melalui pautan akan melihat nama, foto dan nombor telefon anda. + + Sesiapa yang sertai panggilan ini melalui pautan akan melihat nama dan foto anda. Menunggu untuk dibenarkan masuk… @@ -2216,7 +2222,7 @@ Berjaya mengalih keluar nama pengguna. Menghadapi ralat rangkaian. - Too many attempts made, please try again later. + Terlalu banyak percubaan, sila cuba lagi nanti. Nama pengguna ini telah diambil. Nama pengguna hanya boleh mengandungi a–Z, 0–9 dan garis bawah. Nama pengguna tidak boleh bermula dengan nombor. @@ -2240,7 +2246,7 @@ Nombor ini tidak boleh 00. Masukkan digit antara 1–9 - Numbers with more than 2 digits can\'t start with 0 + Nombor dengan lebih daripada 2 digit, tidak boleh bermula dengan 0 Memulihkan nama pengguna anda akan menetapkan semula kod QR dan pautan anda yang sedia ada. Adakah anda pasti? @@ -3788,6 +3794,12 @@ Tiada sesiapa boleh melihat anda di Signal melainkan anda menghantar mesej kepada mereka atau mempunyai sembang sedia ada dengan mereka. "Untuk menukar tetapan ini, tetapkan \"Siapa yang boleh lihat nombor saya\" kepada \"Tiada sesiapa\"." + + Adakah anda pasti? + + Menetapkan \"Siapa boleh cari saya dengan nombor telefon\" kepada \"Tiada sesiapa\" akan menyukarkan orang ramai untuk cari anda di Signal. + + Batal Semua orang Tiada sesiapa Kunci skrin @@ -4281,11 +4293,16 @@ Penerangan kumpulan + Standard + Lebih cepat, kurang data + Tinggi + Lebih lambat, lebih banyak data - Kualiti foto + + Kualiti media Jemput rakan anda @@ -4754,6 +4771,26 @@ Saiz satu atau lebih item terlalu besar Satu atau lebih item tidak sah Terlalu banyak item dipilih + + Video ditetapkan kepada tonton sekali + + Foto ditetapkan untuk lihat sekali + + Video ditetapkan kepada kualiti tinggi + + Video ditetapkan kepada kualiti standard + + Foto ditetapkan kepada kualiti tinggi + + Foto ditetapkan kepada kualiti standard + + + %1$d item ditetapkan kepada kualiti tinggi + + + + %1$d item ditetapkan kepada kualiti standard + Batal Lukis @@ -4778,6 +4815,20 @@ Abaikan perubahan? Anda akan kehilangan sebarang perubahan yang dilakukan terhadap foto ini. + + %1$s Ditemui + + Mulakan sembang dengan \"%1$s\" + + Pergi ke sembang + + + Paut peranti? + + Nampaknya anda cuba memautkan peranti Signal. Ketik teruskan dan imbas kod sekali lagi untuk memautkannya. + + Teruskan + Lencana saya Pemberian lencana @@ -4876,7 +4927,7 @@ Pembayaran belum selesai - Pindahan bank anda sebanyak %1$s belum selesai. Pindahan bank biasanya mengambil masa 1 hari perniagaan untuk diselesaikan. + Pindahan bank anda sebanyak %1$s belum selesai. Pindahan bank boleh mengambil masa 1 hingga 14 hari perniagaan untuk diselesaikan. Ketahui lebih lanjut @@ -5801,9 +5852,9 @@ Anda mempunyai derma yang belum selesai - Pindahan bank biasanya mengambil masa 1 hari bekerja untuk diproses. Sila tunggu sehingga pembayaran ini selesai sebelum mengemas kini langganan anda. + Pindahan bank boleh mengambil masa 1 hingga 14 hari perniagaan untuk diproses. Sila tunggu sehingga pembayaran ini selesai sebelum mengemas kini langganan anda. - Pindahan bank biasanya mengambil masa 1 hari bekerja untuk diproses. Sila tunggu sehingga pembayaran ini selesai sebelum membuat derma lain. + Pindahan bank boleh mengambil masa 1 hingga 14 hari perniagaan untuk diproses. Sila tunggu sehingga pembayaran ini selesai sebelum membuat derma lain. Derma anda sedang diproses. Ini boleh mengambil masa beberapa minit bergantung pada sambungan anda. Sila tunggu sehingga pembayaran ini selesai sebelum mengemas kini langganan anda. @@ -5954,7 +6005,7 @@ Derma sekali anda belum selesai. Anda akan dapat memaparkan lencana %1$s pada profil anda apabila derma anda diterima. - Pindahan bank biasanya mengambil masa 1 hari bekerja untuk diproses. %1$s + Pindahan bank boleh mengambil masa 1 hingga 14 hari perniagaan untuk diproses. %1$s Ketahui lebih lanjut @@ -6291,6 +6342,8 @@ Butiran panggilan + + Edit nama panggilan Tambah nama panggilan @@ -6358,6 +6411,10 @@ Kod QR dan pautan anda telah ditetapkan semula dan kod QR dan pautan baharu telah dibuat. Imbas kod QR ini dengan telefon anda untuk sembang dengan saya di Signal. + + Kod QR tidak ditemui + + Cuba imbas imej lain yang mengandungi kod QR Signal. Sesiapa sahaja yang mempunyai pautan ini boleh melihat nama pengguna anda dan memulakan sembang dengan anda. Hanya kongsi dengan orang yang anda percayai. @@ -6447,6 +6504,10 @@ %1$s bukan pengguna Signal. Adakah anda ingin menjemput nombor ini? Jemput + + Imbas Kod QR + + Menghadapi ralat network. Cuba lagi kemudian. diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index 04cc43545f..a7889051a1 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -423,6 +423,8 @@ SMS မက်ဆေ့ချ်လုပ်ဆောင်ချက်ကို Signal တွင် မပံ့ပိုးပေးတော့ပါ။ SMS မက်ဆေ့ချ်လုပ်ဆောင်ချက်ကို Signal တွင် မပံ့ပိုးပေးတော့ပါ။ ဤတွင် ဆက်လက်ဆွေးနွေးနိုင်ရန် %1$s အား Signal သို့ ဖိတ်ခေါ်ပါ။ + + ဤပုဂ္ဂိုလ်သည် Molly မသုံးတော့ပါ။ ဤနေရာတွင် ဆက်လက်ဆွေးနွေးနိုင်ရန် သူ့ကို Molly သို့ ဖိတ်ခေါ်ပါ။ Molly သို့ ဖိတ်ခေါ်မည် @@ -527,7 +529,7 @@ လိမ်လည်မှု ရီပို့(တ်)လုပ်ပြီးပါပြီ - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + ဤပုဂ္ဂိုလ်သည် လိမ်လည်ရန် စာပို့နေခြင်း ဖြစ်နိုင်ကြောင်း Signal သို့ အကြောင်းကြားလိုက်ပါပြီ။ Signal သည် မည်သည့်ချက်(တ်)၏ အကြောင်းအရာကိုမျှ မမြင်နိုင်ပါ။ လိမ်လည်မှုအဖြစ် ရီပို့(တ်)လုပ်ပြီးပါပြီ @@ -548,7 +550,7 @@ ခရစ်ပ်တို သို့မဟုတ် ငွေကြေး လိမ်လည်မှုများ - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + သင်မသိသူတစ်ဦးက ခရစ်ပ်တိုငွေကြေး (Bitcoin ကဲ့သို့) သို့မဟုတ် ငွေကြေးဆိုင်ရာ အခွင့်အလမ်းတစ်ရပ်နှင့် ပတ်သက်၍ သင့်ကို မက်ဆေ့ချ်ပို့လာပါက သတိထားပါ—လိမ်လည်မှု ဖြစ်နိုင်ပါသည်။ မရှင်းလင်းသော သို့မဟုတ် မသက်ဆိုင်သော မက်ဆေ့ချ်များ @@ -800,7 +802,7 @@ ကြည့်မည်။ - Signal ဆက်သွယ်မှု လုံးဝမလုပ်နိုင်ပါ။ + Molly ဆက်သွယ်မှု လုံးဝမလုပ်နိုင်ပါ။ Molly ကို Google Play Services ဖြင့် မှတ်ပုံတင်၍မရနိုင်ပါ။ Molly စာတိုနှင့် ဖုန်းခေါ်ဆိုမှု ကိုပိတ်လိုက်သည်။ ပြင်ဆင်ခြင်း > အဆင့်မြင့်တွင် ပြန်လည်မှတ်ပုံတင်ကြည့်ပါ။ @@ -1339,6 +1341,8 @@ %1$s သည် ၎င်း၏ ပရိုဖိုင်းအမည်ကို %2$s သို့ ပြောင်းလဲထားခဲ့ပါသည်။ %1$s သည် ၎င်း၏ ပရိုဖိုင်းအမည်ကို %2$s မှ %3$s သို့ ပြောင်းလဲထားခဲ့ပါသည်။ %1$s သည် ၎င်း၏ ပရိုဖိုင်းကို ပြောင်းခဲ့ပါသည်။ + + ဤချက်(တ်)ကို %1$s နှင့် သင် စတင်ပြုလုပ်ခဲ့ပါသည်။ သင်သည် အဖွဲ့ဖွဲ့ခဲ့ပါသည်။ @@ -1794,8 +1798,10 @@ ချိတ်ဆက်ပြတ်သည် Signal ကောလ် လင့်ခ် - - လင့်ခ်မှတစ်ဆင့် ဤကောလ်တွင် ပါဝင်လာသူမှန်သမျှသည် သင့်အမည်၊ ဓာတ်ပုံနှင့် ဖုန်းနံပါတ်တို့ကို မြင်တွေ့ရပါမည်။ + + လင့်ခ်မှတစ်ဆင့် ဤကောလ်တွင် ပါဝင်လာသူမှန်သမျှသည် သင့်အမည်၊ ဓာတ်ပုံနှင့် ဖုန်းနံပါတ်တို့ကို မြင်တွေ့ရပါမည်။ + + လင့်ခ်မှတစ်ဆင့် ဤကောလ်တွင် ပါဝင်လာသူတိုင်းသည် သင့်အမည်နှင့် ဓာတ်ပုံကို မြင်တွေ့ရပါမည်။ ပါဝင်ခွင့်ရရန် စောင့်ဆိုင်းနေဆဲ… @@ -2216,7 +2222,7 @@ အသုံးပြုသူအမည်ကို အောင်မြင်စွာ ဖယ်ရှားခဲ့ပြီး။ ကွန်ယက်အမှားတစ်ခုနှင့် ကြုံတွေ့ခဲ့ရသည်။ - Too many attempts made, please try again later. + ကြိုးစားသည့်အကြိမ်ရေ များလွန်းသည်၊ နောက်မှ ထပ်စမ်းကြည့်ပါ။ ဤသုံးစွဲသူအမည်ကို ယူထားပြီးပါပြီ။ သုံးစွဲသူအမည်များတွင် A–Z၊ 0-9 နှင့် \"_\" သင်္ကေတများသာ ပါဝင်နိုင်ပါသည်။ သုံးစွဲသူအမည်များသည် နံပါတ်နှင့် စတင်၍ မရပါ။ @@ -2240,7 +2246,7 @@ ဤနံပါတ်သည် 00 ဖြစ်၍မရပါ။ 1–9 အကြား ကိန်းဂဏန်းတစ်ခု ရိုက်ထည့်ပါ - Numbers with more than 2 digits can\'t start with 0 + ဂဏန်း 2 လုံးအထက် ကိန်းဂဏန်းများသည် 0 ဖြင့် စ၍မရပါ သင်၏ သုံးစွဲသူအမည်ကို ပြန်လည်ရယူပါက သင့်မူလ QR ကုဒ်နှင့် လင့်ခ်ကို ပြန်လည်သတ်မှတ်လိုက်ပါမည်။ သေချာပါသလား။ @@ -3788,6 +3794,12 @@ သင် ၎င်းတို့ကို မက်ဆေ့ချ်မပို့ပါက သို့မဟုတ် ၎င်းတို့နှင့် ပြောလက်စ ချက်(တ်)တစ်ခု မရှိပါက သင် Signal သုံးနေကြောင်း မည်သူမျှ မြင်တွေ့ရမည်မဟုတ်ပါ။ "ဤဆက်တင်ကို ပြောင်းရန် ကျွန်ုပ်၏နံပါတ်ကို မည်သူတို့မြင်တွေ့နိုင်သနည်းအား Nobody ဟု သတ်မှတ်ပါ။" + + သေချာပါသလား။ + + \"ကျွန်ုပ်ကို ဖုန်းနံပါတ်ဖြင့် ရှာဖွေနိုင်သူများ\" ကို \"မည်သူမျှမရှာနိုင်\" ဟု သတ်မှတ်ထားခြင်းဖြင့် သင့်ကို Signal တွင် ရှာဖွေရန် ပိုမိုခက်ခဲစေပါမည်။ + + မလုပ်တော့ပါ လူသားတိုင်း ဘယ်သူမှ စကင်ရင် ပိတ်ထားခြင်း @@ -4281,11 +4293,16 @@ အဖွဲ့ ဖော်ပြချက် + အသင့်အတင့် + ပိုမြန်ဆန်ပြီး ဒေတာ နည်းနည်းသာ လိုသည် + မြင့်သော + ပိုနှေးပြီး ဒေတာ ပိုလိုသည် - ဓာတ်ပုံ အရည်အသွေး + + ဓာတ်ပုံ အရည်အသွေး သူငယ်ချင်းများကို ဖိတ်ပါ။ @@ -4754,6 +4771,26 @@ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဖိုင်များသည် ကြီးလွန်းနေပါသည် တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဖိုင်များသည် အကျုံးမဝင်ပါ ဖိုင်များစွာကို ရွေးထားပါသည် + + ဗီဒီယိုကို တစ်ခါကြည့်အဖြစ် သတ်မှတ်ထားသည် + + ဓာတ်ပုံကို တစ်ခါကြည့်အဖြစ် သတ်မှတ်ထားသည် + + ဗီဒီယိုကို အရည်အသွေးအမြင့် သတ်မှတ်ထားသည် + + ဗီဒီယိုကို ပုံမှန်အရည်အသွေးအဖြစ် သတ်မှတ်ထားသည် + + ဓာတ်ပုံကို အရည်အသွေးအမြင့် သတ်မှတ်ထားသည် + + ဓာတ်ပုံကို ပုံမှန်အရည်အသွေးအဖြစ် သတ်မှတ်ထားသည် + + + ဖိုင် %1$d ဖိုင်ကို အရည်အသွေးအမြင့် သတ်မှတ်ထားသည် + + + + ဖိုင် %1$d ဖိုင်ကို ပုံမှန်အရည်အသွေးအဖြစ် သတ်မှတ်ထားသည် + ပယ်ဖျက်မယ် ရေးဆွဲရန် @@ -4778,6 +4815,20 @@ ပြောင်းလဲမှုများကို ဖယ်ပစ်မည်လား။ ဤဓာတ်ပုံတွင် ပြုလုပ်ထားသည့် ပြောင်းလဲမှုများ ပျောက်သွားပါမည်။ + + %1$s ကို တွေ့ရှိသည် + + \"%1$s\" နှင့် ချက်(တ်) စတင်မည် + + ချက်(တ်)သို့ သွားရန် + + + စက်ကို ချိတ်ဆက်မည်လား။ + + သင်သည် Signal စက်တစ်လုံးကို ချိတ်ဆက်ရန် ကြိုးစားနေပုံရပါသည်။ ဆက်လုပ်မည်ကို နှိပ်ပြီး ထိုစက်ကို ချိတ်ဆက်ရန် ကုဒ်ကို ထပ်မံ၍စကန်ဖတ်ပါ။ + + ဆက်လုပ်ရန် + ကျွန်ုပ်၏ ဘဲ့ဂျ်များ အသားပေးထားသည့် ဘဲ့ဂျ် @@ -4876,7 +4927,7 @@ ငွေပေးချေမှုကို လုပ်ဆောင်နေဆဲ - သင်၏ %1$s ဘဏ်ငွေလွှဲပြောင်းမှုကို လုပ်ဆောင်ဆဲဖြစ်ပါသည်။ ဘဏ်ငွေလွှဲပြောင်းမှုများ ပြီးစီးရန် များသောအားဖြင့် ရုံးဖွင့်ရက် 1 ရက် ကြာပါသည်။ + သင်၏ %1$s ဘဏ်ငွေလွှဲပြောင်းမှုကို လုပ်ဆောင်ဆဲဖြစ်ပါသည်။ ဘဏ်ငွေလွှဲပြောင်းမှုများ ပြီးစီးရန် ရုံးဖွင့်ရက် 1 ရက်မှ 14 ရက်အထိ ကြာနိုင်ပါသည်။ ပိုမိုလေ့လာရန် @@ -5801,9 +5852,9 @@ သင့်တွင် လုပ်ဆောင်နေဆဲ လှူဒါန်းမှုတစ်ခု ရှိပါသည် - ဘဏ်ငွေလွှဲပြောင်းမှုများကို စီမံဆောင်ရွက်ရန် များသောအားဖြင့် ရုံးဖွင့်ရက် 1 ရက် ကြာပါသည်။ သင့်ပုံမှန်လှူဒါန်းငွေကို အပ်ဒိတ်မလုပ်မီ ထိုငွေပေးချေမှု ပြီးစီးသည်အထိ စောင့်ဆိုင်းပေးပါ။ + ဘဏ်ငွေလွှဲပြောင်းမှုများကို ဆောင်ရွက်ရန် ရုံးဖွင့်ရက် 1 ရက်မှ 14 ရက်အထိ ကြာနိုင်ပါသည်။ သင့်ပုံမှန်လှူဒါန်းငွေကို အပ်ဒိတ်မလုပ်မီ ထိုငွေပေးချေမှု ပြီးစီးသည်အထိ စောင့်ဆိုင်းပေးပါ။ - ဘဏ်ငွေလွှဲပြောင်းမှုများကို စီမံဆောင်ရွက်ရန် များသောအားဖြင့် ရုံးဖွင့်ရက် 1 ရက် ကြာပါသည်။ နောက်ထပ်လှူဒါန်းမှု မပြုလုပ်မီ ထိုငွေပေးချေမှု ပြီးစီးသည်အထိ စောင့်ဆိုင်းပေးပါ။ + ဘဏ်ငွေလွှဲပြောင်းမှုများကို ဆောင်ရွက်ရန် ရုံးဖွင့်ရက် 1 ရက်မှ 14 ရက်အထိ ကြာနိုင်ပါသည်။ နောက်ထပ်လှူဒါန်းမှု မပြုလုပ်မီ ထိုငွေပေးချေမှု ပြီးစီးသည်အထိ စောင့်ဆိုင်းပေးပါ။ သင့်လှူဒါန်းမှုကို လုပ်ဆောင်နေဆဲ ဖြစ်ပါသည်။ သင့်ချိတ်ဆက်မှုအပေါ် မူတည်၍ မိနစ်အနည်းငယ် ကြာနိုင်ပါသည်။ သင့်ပုံမှန်လှူဒါန်းငွေကို အပ်ဒိတ်မလုပ်မီ ထိုငွေပေးချေမှု ပြီးစီးသည်အထိ စောင့်ဆိုင်းပေးပါ။ @@ -5954,7 +6005,7 @@ သင်၏ တစ်ကြိမ်စာ လှူဒါန်းမှုကို လုပ်ဆောင်နေဆဲဖြစ်ပါသည်။ သင့်လှူဒါန်းမှုကို လက်ခံရရှိသောအခါ သင့်ပရိုဖိုင်တွင် %1$s ဘဲ့ဂျ်ကို ပြသနိုင်ပါမည်။ - ဘဏ်ငွေလွှဲပြောင်းမှုများကို စီမံဆောင်ရွက်ရန် များသောအားဖြင့် ရုံးဖွင့်ရက် 1 ရက် ကြာပါသည်။ %1$s + ဘဏ်ငွေလွှဲပြောင်းမှုများကို ဆောင်ရွက်ရန် ရုံးဖွင့်ရက် 1 ရက်မှ 14 ရက်အထိ ကြာနိုင်ပါသည်။ %1$s ပိုမိုလေ့လာရန် @@ -6291,6 +6342,8 @@ ကောလ် အသေးစိတ်အချက်များ + + ကောလ်အမည် ပြင်ဆင်ရန် ကောလ်အမည် ပေါင်းထည့်ရန် @@ -6358,6 +6411,10 @@ သင့် QR ကုဒ်နှင့် လင့်ခ်ကို ပြန်လည်သတ်မှတ်လိုက်ပြီဖြစ်ပြီး QR ကုဒ်နှင့် လင့်ခ် အသစ်တစ်ခုကို ဖန်တီးလိုက်ပါပြီ။ ကျွန်ုပ်နှင့် Signal တွင် ချက်(တ်)ရန်အတွက် ဤ QR ကုဒ်ကို သင့်ဖုန်းဖြင့် စကန်ဖတ်ပါ။ + + QR ကုဒ် မတွေ့ပါ + + Signal QR ကုဒ် ပါဝင်သော အခြားပုံတစ်ပုံကို စကန်ဖတ်ကြည့်ပါ။ အောက်ပါလင့်ခ်ရှိသူတိုင်းသည် သင့်သုံးစွဲသူအမည်ကို ကြည့်ရှုပြီး သင်နှင့် စတင်၍ ချက်(တ်)နိုင်ပါသည်။ ထိုလင့်ခ်ကို သင် ယုံကြည်ရသူများနှင့်သာ မျှဝေပေးပါ။/ @@ -6447,6 +6504,10 @@ %1$s သည် Signal သုံးစွဲသူ မဟုတ်ပါ။ ဤနံပါတ်ကို ဖိတ်ကြားလိုပါသလား။ ဖိတ်ခေါ်မယ် + + QR ကုဒ်ကို စကင်ဖတ်မယ် + + ကွန်ယက် အမှားတစ်ခုနှင့် ကြုံတွေ့ခဲ့သည်။ နောက်မှ ပြန်လည် ကြိုးစားပါ။ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index c967004350..81916b3d6a 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -426,6 +426,8 @@ SMS-meldinger støttes ikke lenger i Signal. SMS-meldinger støttes ikke lenger i Signal. Inviter %1$s til Signal for å fortsette samtalen her. + + Denne personen bruker ikke Molly lenger. Inviter hen til Molly for å fortsette samtalen her. Inviter til Molly @@ -536,7 +538,7 @@ Rapportert som søppelpost - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal har fått beskjed om at denne personen kan ha sendt søppelpost. Signal kan ikke se innholdet i samtaler. Rapportert som søppelpost @@ -557,7 +559,7 @@ Krypto- og pengesvindel - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Hvis noen du ikke kjenner sender deg meldinger om kryptovaluta (f.eks. Bitcoin) eller økonomiske tilbud, må du være forsiktig – det er mest sannsynlig søppelpost. Vage eller irrelevante meldinger @@ -818,7 +820,7 @@ Vis - Permanent Signal kommunikasjonssvikt! + Permanent Molly kommunikasjonssvikt! Molly klarte ikke å registrere seg i Google Play-tjenesten. Molly-meldinger og -samtaler er derfor slått av. Prøv å registrere programmet på nytt under Innstillinger > Avansert. @@ -1386,6 +1388,8 @@ %1$s byttet profilnavnet sitt til %2$s. %1$s byttet profilnavnet sitt fra %2$s til %3$s. %1$s endret profilen sin. + + Du startet denne samtalen med %1$s. Du laget gruppen. @@ -1861,8 +1865,10 @@ Koblet fra Samtalelenke for Signal - - Alle som blir med i samtalen via lenken, kan se navnet, profilbildet og telefonnummeret ditt. + + Alle som blir med i samtalen via lenken, kan se navnet, profilbildet og telefonnummeret ditt. + + Alle som blir med i samtalen via lenken, får se navnet og profilbildet ditt. Venter på tilgang … @@ -2296,7 +2302,7 @@ Brukernavnet er fjernet. Det oppstod en nettverksfeil. - Too many attempts made, please try again later. + Du har gjort for mange forsøk. Prøv igjen senere. Dette brukernavnet er tatt. Brukernavn kan bare inneholde a–Z, 0–9 og understrek. Brukernavn kan ikke begynne med et tall. @@ -2320,7 +2326,7 @@ Dette tallet kan ikke være 00. Angi et tall mellom 1 og 9. - Numbers with more than 2 digits can\'t start with 0 + Tall som består av mer enn to sifre, kan ikke starte med 0 Hvis du gjenoppretter brukernavnet, får du også en ny QR-kode og profillenke. Vil du gå videre? @@ -3894,6 +3900,12 @@ Ingen kan se at du er på Signal med mindre du sender dem en melding, eller hvis dere allerede har en samtale gående. "For å endre dette velger du «Ingen» under «Hvem kan se telefonnummeret mitt?»." + + Vil du gå videre? + + Hvis du velger «Ingen» under «Hvem kan finne meg ved å søke opp telefonnummeret mitt?», blir det vanskeligere for andre å finne deg på Signal. + + Avbryt Alle Ingen Skjermlås @@ -4391,11 +4403,16 @@ Gruppebeskrivelse + Standard + Raskere, mindre data + Høy + Tregere, mer data - Fotokvalitet + + Mediekvalitet Inviter vennene dine @@ -4871,6 +4888,28 @@ Elementene er for store Elementene er ugyldige For mange valgte elementer + + Videoen er satt til «vis én gang» + + Bildet er satt til «vis én gang» + + Videoen vises i høy oppløsning + + Videoen vises i standard oppløsning + + Bildet vises i høy oppløsning + + Bildet vises i standard oppløsning + + + %1$d element vises i høy oppløsning + %1$d elementer vises i høy oppløsning + + + + %1$d element vises i standard oppløsning + %1$d elementer vises i standard oppløsning + Avbryt Tegn @@ -4895,6 +4934,20 @@ Vil du forkaste endringene? Dette vil slette alle endringene du har gjort i dette bildet. + + Fant %1$s + + Start en samtale med %1$s + + Gå til samtale + + + Koble til enheten? + + Det ser ut til at du prøver å koble til en enhet med Signal. Trykk på «fortsett» og skann QR-koden for å koble til. + + Fortsett + Mine merker Utvalgt merke @@ -4993,7 +5046,7 @@ Betalingen behandles - Overføringen av %1$s behandles. Det tar vanligvis én virkedag å behandle bankoverføringer. + Overføringen av %1$s behandles. Bankoverføringer har en behandlingstid på 1 til 14 virkedager. Les mer @@ -5937,9 +5990,9 @@ Pengegave under behandling - Det tar vanligvis én virkedag å behandle bankoverføringer. Du kan oppdatere abonnementet ditt når betalingen er gjennomført. + Bankoverføringer har en behandlingstid på 1 til 14 virkedager. Du kan oppdatere abonnementet ditt når betalingen er gjennomført. - Det tar vanligvis én virkedag å behandle bankoverføringer. Du kan gi flere pengegaver når denne betalingen er gjennomført. + Bankoverføringer har en behandlingstid på 1 til 14 virkedager. Du kan gi flere pengegaver når denne betalingen er gjennomført. Betalingen av pengegaven er fremdeles under behandling. Dette kan ta et par minutter, avhengig av internettilkoblingen. Du kan oppdatere abonnementet ditt når betalingen er gjennomført. @@ -6091,7 +6144,7 @@ Engangsbeløpet behandles. Du kan vise frem %1$s-merket på profilen din når vi har mottatt pengegaven. - Det tar vanligvis én virkedag å behandle bankoverføringer. %1$s + Bankoverføringer har en behandlingstid på 1 til 14 virkedager. %1$s Les mer @@ -6432,6 +6485,8 @@ Anropsinformasjon + + Endre navnet på samtalen Gi samtalen et navn @@ -6499,6 +6554,10 @@ QR-koden og lenken er tilbakestilt, og vi har opprettet en ny QR-kode og lenke for deg. Skann denne QR-koden for å innlede en samtale med meg på Signal. + + QR-koden ble ikke funnet + + Prøv å skanne et annet bilde av QR-koden. Alle som har denne lenken, kan se brukernavnet ditt og starte nye samtaler med deg. Ikke del lenken med personer du ikke stoler på. @@ -6590,6 +6649,10 @@ %1$s er ikke en Signal-bruker. Vil du invitere dette telefonnummeret? Inviter + + Skann QR-kode + + Det oppstod en nettverksfeil. Prøv igjen senere. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6143ce52f9..5e3b602af0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -180,7 +180,7 @@ Blokkeren Blokkeren en verlaten - Rapporteren en blokkeren + Melden en blokkeren Spam melden? @@ -254,12 +254,12 @@ Bellen Onbeveiligde oproep Je mobielentelefonie-aanbieder brengt misschien extra kosten in rekening. Het nummer dat je wil bellen is niet geregistreerd bij Signal. Deze oproep zal via het telefonienetwerk lopen, niet over internet. - Kan niet deelnemen aan gesprek + Kan niet deelnemen aan oproep De oproeplink is niet langer geldig. Ongeldige link - Dit is geen geldige groepslink. Ga na dat je de volledige link gebruikt met de juiste karakters voordat je probeert deel te nemen. + Dit is geen geldige oproeplink. Ga na dat je de volledige link gebruikt met de juiste karakters voordat je probeert deel te nemen. @@ -426,6 +426,8 @@ Sms-berichten worden niet langer ondersteund in Signal. Sms-berichten worden niet langer ondersteund in Signal. Nodig %1$s uit voor Signal om het gesprek hier te houden. + + Deze persoon gebruikt Molly niet meer. Nodig deze persoon uit voor Molly om het gesprek hier te houden. Uitnodigen voor Molly @@ -536,7 +538,7 @@ Gemeld als spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal is op de hoogte gebracht dat deze persoon mogelijk spam verstuurt. Signal kan de inhoud van chats niet zien. Gemeld als spam @@ -557,7 +559,7 @@ Crypto- of geldscams - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Als iemand die je niet kent je berichten stuurt over cryptocurrency (zoals Bitcoin) of een financiële investering, wees dan voorzichtig — het is waarschijnlijk spam. Vage of irrelevante berichten @@ -818,7 +820,7 @@ Weergeven - Pertinente Signal-communicatiefout! + Pertinente Molly-communicatiefout! Molly was niet in staat zich bij Google Play services op je telefoon te registreren. Molly-berichten en -oproepen zijn nu uitgeschakeld, probeer opnieuw te registreren via Instellingen > Privacy > Geavanceerd. @@ -1036,7 +1038,7 @@ Je hebt geen recht om dit te doen - Één of meer van de door jou toegevoegde personen ondersteunen de vernieuwde groepen nog niet. Zij moeten Signal bijwerken. + Eén of meer van de door jou toegevoegde personen ondersteunen de vernieuwde groepen nog niet. Zij moeten Signal bijwerken. Ten minste een persoon die je hebt toegevoegd moet eerst Signal bijwerken voordat ze aan mededelingsgroepen kunnen worden toegevoegd. Bijwerken van de groep is mislukt Je bent geen lid van deze groep @@ -1047,7 +1049,7 @@ Verouderde groep Dit is een verouderde groep. Om nieuwe functionaliteiten zoals groepsbeheer te kunnen gebruiken moet je een nieuwe groep aanmaken. Dit is een verouderde groep; om nieuwe functionaliteiten te kunnen gebruiken zoals @vermeldingen en beheerders, - Deze verouderde groep kan niet worden omgezet naar een nieuwe-stijl groep omdat het teveel leden bevat. Het maximum ledenaantal voor een groep is %1$d. + Deze verouderde groep kan niet worden omgezet naar een nieuwe-stijl groep omdat het te veel leden bevat. Het maximum ledenaantal voor een groep is %1$d. moet je deze groep omzetten. Dit is een onbeveiligde mms-groep. Om beveiligde berichten uit te wisselen en om functionaliteiten te kunnen gebruiken zoals groepsnamen en groepsbeheer, moet je je contactpersonen uitnodigen om Signal Messenger te gebruiken. Nu uitnodigen @@ -1192,7 +1194,7 @@ “%1$s” toevoegen aan de groep? Verzoek van “%1$s” afwijzen? - Wil je het lidmaatschapverzoek van “%1$s” afwijzen? Als je dit doet dan kan deze persoon niet opnieuw via de groepslink verzoeken om lid te worden van de groep. + Wil je het lidmaatschapsverzoek van “%1$s” afwijzen? Als je dit doet dan kan deze persoon niet opnieuw via de groepslink verzoeken om lid te worden van de groep. Toevoegen Afwijzen @@ -1386,6 +1388,8 @@ %1$s heeft diens profielnaam naar “%2$s” gewijzigd. %1$s heeft diens profielnaam van “%2$s” naar “%3$s” gewijzigd. %1$s heeft diens profiel aangepast. + + Je bent deze chat met %1$s begonnen. Je hebt de groep aangemaakt. @@ -1619,7 +1623,7 @@ Wil je updates en nieuws van %1$s ontvangen? Je zult geen berichten ontvangen totdat je diegene hebt gedeblokkeerd. Wil je je profielnaam, -foto en -omschrijving voor deze groep zichtbaar maken om je chat met de groep voort te kunnen zetten? Dit is een verouderde groep en deze kan niet meer gebruikt worden. Maak een nieuwe groep om nieuwe functies zoals @vermeldingen en beheerders te activeren. - Deze verouderde groep kan niet langer gebruikt worden omdat die teveel leden heeft. Het maximum ledenaantal voor een groep is %1$d. + Deze verouderde groep kan niet langer gebruikt worden omdat die te veel leden heeft. Het maximum ledenaantal voor een groep is %1$d. Doorgaan met deze chat met %1$s en je naam en foto met hen delen? Wil je lid worden van deze groep, en sta je toe dat alle leden van de groep je profielnaam, -foto en -omschrijving kunnen zien? Leden van de groep weten niet dat je hun berichten hebt gezien totdat je het gespreksverzoek hebt geaccepteerd. Wil je lid worden van deze groep, en sta je toe dat alle leden van de groep je profielnaam, -foto en -omschrijving kunnen zien? Je kunt hun berichten nog niet zien totdat je de uitnodiging hebt geaccepteerd. @@ -1717,7 +1721,7 @@ Je hebt nog %1$d poging resterend. Wanneer je geen pogingen meer over hebt, dan kun je nog wel een nieuwe pincode aanmaken. Je kunt je opnieuw registreren en je account gebruiken maar je verliest wel een aantal opgeslagen instellingen, zoals je profielinformatie. Je hebt nog %1$d pogingen resterend. Wanneer je geen pogingen meer over hebt, dan kun je nog wel een nieuwe pincode aanmaken. Je kunt je opnieuw registreren en je account gebruiken maar je verliest wel een aantal opgeslagen instellingen, zoals je profielinformatie. - Signal-registratratie - Ik heb hulp nodig bij de Signal-pincode op een Android-apparaat + Signal-registratie - Ik heb hulp nodig bij de Signal-pincode op een Android-apparaat Pincode aanmaken @@ -1814,8 +1818,8 @@ Alle goedkeuren - %1$d persoon wordt aan het gesprek toegevoegd. - %1$d personen worden aan het gesprek toegevoegd. + %1$d persoon wordt aan de oproep toegevoegd. + %1$d personen worden aan de oproep toegevoegd. @@ -1824,8 +1828,8 @@ - %1$d persoon wordt niet toegevoegd aan het gesprek. - %1$d personen worden niet toegevoegd aan het gesprek. + %1$d persoon wordt niet toegevoegd aan de oproep. + %1$d personen worden niet toegevoegd aan de oproep. Alle weigeren @@ -1844,9 +1848,9 @@ Je verzoek om deel te nemen aan deze oproep is geweigerd. - Verwijderd van oproep + Verwijderd uit oproep - Iemand heeft je uit het gesprek verwijderd. + Iemand heeft je uit de oproep verwijderd. Signal-oproep @@ -1861,10 +1865,12 @@ Verbinding verbroken Signal oproeplink - - Iedereen die via de link aan deze oproep deelneemt, ziet je naam, foto en telefoonnummer. + + Iedereen die via de link aan deze oproep deelneemt, ziet je naam, foto en telefoonnummer. + + Iedereen die via de link aan deze oproep deelneemt, ziet je naam en foto. - Aan het wachten om binnengelaten te worden… + Aan het wachten op toelating… Signal zal %1$s bellen Signal zal %1$s en %2$s bellen @@ -2072,7 +2078,7 @@ We moeten verifiëren dat je een mens bent. - Audio-oproep + Spraakoproep Annuleren Volgende @@ -2296,7 +2302,7 @@ Gebruikersnaam succesvol verwijderd. Er is een netwerkfout opgetreden. - Too many attempts made, please try again later. + Je hebt te veel pogingen gedaan. Probeer het later opnieuw. Deze gebruikersnaam is al in gebruik. Gebruikersnamen mogen alleen uit a-z, 0-9 en _ bestaan. Gebruikersnamen mogen niet met een cijfer beginnen. @@ -2320,7 +2326,7 @@ Dit nummer kan niet 00 zijn. Voer een cijfer tussen 1-9 in - Numbers with more than 2 digits can\'t start with 0 + Een cijfercombinatie van meer dan 2 cijfers kan niet met 0 beginnen Wanneer je je gebruikersnaam herstelt, werken je bestaande QR-code en link niet langer en worden deze vernieuwd. Weet je het zeker? @@ -2888,7 +2894,7 @@ Signal heeft mms-instellingen nodig om via je telefoonabonnement media te kunnen verzenden. Je apparaat biedt deze informatie niet aan Signal aan, wat wel vaker voorkomt bij apparaten met abonnementsvergrendeling en andere beperkende configuraties. - Om media- en groepsberichten te verzenden tik je op ‘Oké’ en voer je de gevraagde gegevens in. De mms-instellingen voor je provider kunnen meestal gevonden worden door on-line te zoeken naar ‘naam-van-je-provider APN’. Dit hoef je maar één keer te doen. + Om media- en groepsberichten te verzenden tik je op ‘Oké’ en voer je de gevraagde gegevens in. De mms-instellingen voor je provider kunnen meestal gevonden worden door online te zoeken naar ‘naam-van-je-provider APN’. Dit hoef je maar één keer te doen. Afleveringsprobleem @@ -2937,7 +2943,7 @@ Vergelijk bovenstaande nummers met het apparaat van je contact om end-to-end-versleuteling met %1$s te verifiëren. Je kunt ook de QR-code op het apparaat van je contact scannen. Tik om te scannen De nummers komen overeen - Verifieren niet gelukt + Verifiëren niet gelukt Aan het laden… Als geverifieerd markeren Verificatie ongedaan maken @@ -3156,25 +3162,25 @@ Thema Chatkleur & -achtergrond - App-icoon + App-pictogram Begrepen Annuleren - Wijzig het app-icoon en de naam in %1$s + Wijzig het app-pictogram en de naam in %1$s - Molly moet worden gesloten om het app-icoon en de naam te wijzigen. Meldingen geven altijd het standaard Molly-icoon en de standaard app-naam weer. + Molly moet worden gesloten om het app-pictogram en de naam te wijzigen. Meldingen geven altijd het standaard Molly-pictogram en de standaard app-naam weer. - Selecteer een app-icoon en naam die zichtbaar zijn op het startscherm en het appoverzicht van je telefoon. Meldingen geven altijd het standaard Molly-icoon en de standaard app-naam weer. Meer informatie + Selecteer een app-pictogram en naam die zichtbaar zijn op het startscherm en het appoverzicht van je telefoon. Meldingen geven altijd het standaard Molly-pictogram en de standaard app-naam weer. Meer informatie - App-iconen en -namen zijn zichtbaar op het startscherm en appoverzicht. + App-pictogrammen en -namen zijn zichtbaar op het startscherm en appoverzicht. - Meldingen geven altijd het standaard Molly-icoon en de standaard app-naam weer. + Meldingen geven altijd het standaard Molly-pictogram en de standaard app-naam weer. Meer informatie - Afbeelding die illustreert waar het vervangende app-icoon zichtbaar zal zijn. + Afbeelding die illustreert waar het vervangende app-pictogram zichtbaar zal zijn. Pincode uitschakelen Pincode inschakelen Als je de pincode uitschakelt zul je wanneer je Signal opnieuw registreert alle gegevens kwijtraken, tenzij je ze handmatig herstelt vanuit een back-up. Daarnaast kun je zolang de pincode is uitgeschakeld de registratievergrendeling niet inschakelen. @@ -3894,6 +3900,12 @@ Niemand kan zien dat je een Signal-gebruiker bent, tenzij je hen een bericht stuurt of een bestaande chat met iemand hebt. "Om deze instelling te wijzigen, stel je ‘Wie kan mijn nummer zien’ in op ‘Niemand’." + + Weet je het zeker? + + Als je ‘Wie kan mij via mijn nummer vinden’ instelt op ‘Niemand’, wordt het moeilijker voor mensen om je te vinden op Signal. + + Annuleren Iedereen Niemand Appvergrendeling @@ -4180,8 +4192,8 @@ Het verwijderen van je account zal: Voer je telefoonnummer in Account verwijderen - Je accountinformatie en profielfoto verwijderen - Al je berichten verwijderen + Je accountinformatie en profielfoto verwijderen + Al je berichten verwijderen %1$s verwijderen van je betalingsaccount Er is geen landcode gespecificeerd Er is geen telefoonnummer ingevuld @@ -4391,11 +4403,16 @@ Groepsomschrijving + Standaard + Sneller, minder dataverbruik + Hoog + Langzamer, meer dataverbruik - Afbeeldingskwaliteit + + Mediakwaliteit Vrienden uitnodigen @@ -4758,7 +4775,7 @@ Berichten - Audio-oproep + Spraakoproep Video-oproep @@ -4871,6 +4888,28 @@ Een of meerdere items zijn te groot Een of meerdere items zijn ongeldig Te veel items geselecteerd + + Video ingesteld op eenmalige weergave + + Foto ingesteld op eenmalige weergave + + Video ingesteld op hoge kwaliteit + + Video ingesteld op standaardkwaliteit + + Foto ingesteld op hoge kwaliteit + + Foto ingesteld op standaardkwaliteit + + + %1$d item ingesteld op hoge kwaliteit + %1$d items ingesteld op hoge kwaliteit + + + + %1$d item ingesteld op standaardkwaliteit + %1$d items ingesteld op standaardkwaliteit + Annuleren Tekenen @@ -4895,6 +4934,20 @@ Aanpassingen verwerpen? Veranderingen die je aan deze afbeelding hebt gemaakt zullen verloren gaan. + + %1$s gevonden + + Begin een chat met ‘%1$s’ + + Chat openen + + + Apparaat koppelen? + + Het lijkt erop dat je een Signal-apparaat probeert te koppelen. Tik op doorgaan en scan de code opnieuw om het apparaat te koppelen. + + Doorgaan + Jouw badges Zichtbare badge @@ -4993,7 +5046,7 @@ Betaling in behandeling - Je bankoverschrijving van %1$s is in behandeling. De verwerking van een bankoverschrijving duurt doorgaans 1 werkdag. + Je bankoverschrijving van %1$s is in behandeling. Het kan 1 tot 14 werkdagen duren voordat een bankoverschrijving is voltooid. Meer lezen @@ -5899,7 +5952,7 @@ Groepsverhaal verwijderen - Overflow menu + Overloopmenu 1 @@ -5937,9 +5990,9 @@ Je donatie is in behandeling - De verwerking van een bankoverschrijving duurt doorgaans 1 werkdag. Wacht tot deze betaling is voltooid voordat je je maandelijkse donatie bijwerkt. + Het kan 1 tot 14 werkdagen duren voordat een bankoverschrijving is verwerkt. Wacht tot deze betaling is voltooid voordat je je maandelijkse donatie bijwerkt. - De verwerking van een bankoverschrijving duurt doorgaans 1 werkdag. Wacht tot deze betaling is voltooid voordat je nog een donatie doet. + Het kan 1 tot 14 werkdagen duren voordat een bankoverschrijving is verwerkt. Wacht tot deze betaling is voltooid voordat je nog een donatie doet. Je donatie is nog in behandeling. Dit kan een paar minuten duren afhankelijk van je internetverbinding. Wacht tot deze betaling is voltooid voordat je je maandelijkse donatie bijwerkt. @@ -6091,7 +6144,7 @@ Je eenmalige donatie is in behandeling. De ‘%1$s’-badge kun je op je profiel weergeven wanneer je donatie is ontvangen. - De verwerking van een bankoverschrijving duurt doorgaans 1 werkdag. %1$s + Het kan 1 tot 14 werkdagen duren voordat een bankoverschrijving is verwerkt. %1$s Meer lezen @@ -6248,13 +6301,13 @@ Start een video-oproep - Start een audio-oproep + Start een spraakoproep Video-oproep - Audio-oproep + Spraakoproep Chat openen @@ -6432,6 +6485,8 @@ Gegevens van oproep + + Oproepnaam bewerken Oproepnaam toevoegen @@ -6499,6 +6554,10 @@ Je QR-code en link zijn vernieuwd, een nieuwe QR-code en link zijn beschikbaar. Scan deze QR-code met je telefoon om met mij te chatten op Signal. + + QR-code niet gevonden + + Probeer een andere afbeelding met daarop een Signal QR-code te scannen. Iedereen met deze link kan jouw gebruikersnaam zien en een chat met je starten. Deel deze alleen met mensen die je vertrouwt. @@ -6590,6 +6649,10 @@ %1$s is geen Signal-gebruiker. Wil je dit nummer uitnodigen? Uitnodigen + + QR-code scannen + + Er is een netwerkfout opgetreden. Probeer het later opnieuw. diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 1b787872db..b76de9f49d 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -426,6 +426,8 @@ ਹੁਣ Signal ਰਾਹੀਂ SMS ਸੁਨੇਹੇ ਭੇਜਣਾ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ। ਹੁਣ Signal ਰਾਹੀਂ SMS ਸੁਨੇਹੇ ਭੇਜਣਾ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ। ਗੱਲਬਾਤ ਨੂੰ ਇੱਥੇ ਜਾਰੀ ਰੱਖਣ ਲਈ %1$s ਨੂੰ Signal \'ਤੇ ਆਉਣ ਦਾ ਸੱਦਾ ਦਿਓ। + + ਇਹ ਵਿਅਕਤੀ ਹੁਣ Molly ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ। ਗੱਲਬਾਤ ਨੂੰ ਇੱਥੇ ਜਾਰੀ ਰੱਖਣ ਲਈ ਉਹਨਾਂ ਨੂੰ Molly \'ਤੇ ਆਉਣ ਦਾ ਸੱਦਾ ਦਿਓ। Molly ਲਈ ਸੱਦਾ ਦਿਓ @@ -536,7 +538,7 @@ ਸਪੈਮ ਦੀ ਰਿਪੋਰਟ ਕੀਤੀ ਗਈ - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ਨੂੰ ਸੂਚਿਤ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ ਕਿ ਇਹ ਵਿਅਕਤੀ ਸ਼ਾਇਦ ਸਪੈਮ ਭੇਜ ਰਿਹਾ ਹੈ। Signal ਕਿਸੇ ਵੀ ਚੈਟ ਦੀ ਸਮੱਗਰੀ ਨੂੰ ਨਹੀਂ ਦੇਖ ਸਕਦਾ ਹੈ। ਸਪੈਮ ਵਜੋਂ ਰਿਪੋਰਟ ਕੀਤੀ ਗਈ @@ -557,7 +559,7 @@ ਕ੍ਰਿਪਟੋ ਜਾਂ ਪੈਸਿਆਂ ਦਾ ਘੁਟਾਲਾ - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + ਜੇਕਰ ਕੋਈ ਅਣਜਾਣ ਵਿਅਕਤੀ ਕ੍ਰਿਪਟੋਕੁਰੰਸੀ (ਜਿਵੇਂ ਕਿ ਬਿਟਕੋਇਨ) ਜਾਂ ਪੈਸੇ ਕਮਾਉਣ ਦੇ ਮੌਕੇ ਬਾਰੇ ਤੁਹਾਨੂੰ ਸੁਨੇਹੇ ਭੇਜਦਾ ਹੈ, ਤਾਂ ਸਾਵਧਾਨ ਰਹੋ—ਇਹ ਸਪੈਮ ਹੋ ਸਕਦਾ ਹੈ। ਅਜੀਬ ਜਾਂ ਅਢੁਕਵੇਂ ਸੁਨੇਹੇ @@ -818,7 +820,7 @@ ਵੇਖੋ - ਸਥਾਈ Signal ਸੰਚਾਰ ਅਸਫ਼ਲ! + ਸਥਾਈ Molly ਸੰਚਾਰ ਅਸਫ਼ਲ! Molly Google Play ਸੇਵਾਵਾਂ ਨਾਲ ਰਜਿਸਟਰ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਸੀ। Molly ਸੁਨੇਹੇ ਅਤੇ ਕਾਲਾਂ ਅਸਮਰੱਥ ਕੀਤੇ ਗਏ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਸੈਟਿੰਗਾਂ > ਤਕਨੀਕੀ ਵਿੱਚੋਂ ਮੁੜ-ਰਜਿਸਟਰ ਕਰੋ। @@ -1386,6 +1388,8 @@ %1$s ਨੇ ਆਪਣੇ ਪ੍ਰੋਫਾਈਲ ਨਾਂ ਨੂੰ %2$s ਵਿੱਚ ਬਦਲਿਆ। %1$s ਨੇ ਆਪਣਾ ਪ੍ਰੋਫ਼ਾਈਲ ਨਾਂ %2$s ਤੋਂ %3$s ਵਿੱਚ ਬਦਲਿਆ। %1$s ਨੇ ਆਪਣਾ ਪ੍ਰੋਫ਼ਾਈਲ ਬਦਲਿਆ। + + ਤੁਸੀਂ %1$s ਨਾਲ ਇਹ ਚੈਟ ਸ਼ੁਰੂ ਕੀਤੀ ਹੈ। ਤੁਸੀਂ ਗਰੁੱਪ ਬਣਾਇਆ। @@ -1861,8 +1865,10 @@ ਕੁਨੈਕਸ਼ਨ ਬੰਦ Signal ਕਾਲ ਲਿੰਕ - - ਕੋਈ ਵੀ ਵਿਅਕਤੀ ਜੋ ਲਿੰਕ ਰਾਹੀਂ ਇਸ ਕਾਲ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ, ਉਹ ਤੁਹਾਡਾ ਨਾਮ, ਫ਼ੋਟੋ ਅਤੇ ਫ਼ੋਨ ਨੰਬਰ ਦੇਖ ਸਕਦਾ ਹੈ। + + ਕੋਈ ਵੀ ਵਿਅਕਤੀ ਜੋ ਲਿੰਕ ਰਾਹੀਂ ਇਸ ਕਾਲ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ, ਉਹ ਤੁਹਾਡਾ ਨਾਮ, ਫ਼ੋਟੋ ਅਤੇ ਫ਼ੋਨ ਨੰਬਰ ਦੇਖ ਸਕਦਾ ਹੈ। + + ਕੋਈ ਵੀ ਵਿਅਕਤੀ ਜੋ ਲਿੰਕ ਰਾਹੀਂ ਇਸ ਕਾਲ ਵਿੱਚ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ, ਉਹ ਤੁਹਾਡਾ ਨਾਮ ਅਤੇ ਫ਼ੋਟੋ ਦੇਖ ਸਕਦਾ ਹੈ। ਕਾਲ ਦੇ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤੇ ਜਾਣ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ… @@ -2296,7 +2302,7 @@ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਸਫਲਤਾਪੂਰਵਕ ਹਟਾਇਆ ਗਿਆ। ਨੈੱਟਵਰਕ ਗਲਤੀ ਆਈ ਹੈ। - Too many attempts made, please try again later. + ਬਹੁਤ ਸਾਰੀਆਂ ਕੋਸ਼ਿਸ਼ਾਂ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਇਹ ਵਰਤੋਂਕਾਰ ਨਾਂ ਕੋਈ ਹੋਰ ਵਰਤ ਰਿਹਾ ਹੈ। ਵਰਤੋਂਕਾਰ ਨਾਂ ਵਿੱਚ ਸਿਰਫ਼ a–Z, 0–9 ਅਤੇ ਅੰਡਰਸਕੋਰ ਸ਼ਾਮਲ ਹੋ ਸਕਦੇ ਹਨ। ਵਰਤੋਂਕਾਰ ਨਾਂ ਅੰਕ ਨਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ। @@ -2320,7 +2326,7 @@ ਇਹ ਨੰਬਰ 00 ਨਹੀਂ ਹੋ ਸਕਦਾ। 1–9 ਵਿਚਕਾਰ ਕੋਈ ਅੰਕ ਦਾਖਲ ਕਰੋ - Numbers with more than 2 digits can\'t start with 0 + 2 ਤੋਂ ਵੱਧ ਅੰਕਾਂ ਵਾਲੇ ਨੰਬਰ 0 ਨਾਲ ਸ਼ੁਰੂ ਨਹੀਂ ਹੋ ਸਕਦੇ ਆਪਣੇ ਵਰਤੋਂਕਾਰ ਨਾਂ ਨੂੰ ਰਿਕਵਰ ਕਰਨ ਨਾਲ ਤੁਹਾਡਾ ਮੌਜੂਦਾ QR ਕੋਡ ਅਤੇ ਲਿੰਕ ਰੀਸੈੱਟ ਹੋ ਜਾਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਅਜਿਹਾ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? @@ -3894,6 +3900,12 @@ ਕੋਈ ਵੀ ਇਹ ਨਹੀਂ ਦੇਖ ਸਕੇਗਾ ਕਿ ਤੁਸੀਂ Signal \'ਤੇ ਹੋ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਦੇ ਜਾਂ ਉਹਨਾਂ ਨਾਲ ਤੁਹਾਡੀ ਕੋਈ ਪੁਰਾਣੀ ਚੈਟ ਮੌਜੂਦਾ ਨਹੀਂ ਹੁੰਦੀ। "ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ, \"ਮੇਰਾ ਨੰਬਰ ਕੌਣ ਦੇਖ ਸਕਦਾ ਹੈ\" ਨੂੰ \"ਕੋਈ ਨਹੀਂ\" \'ਤੇ ਸੈੱਟ ਕਰੋ।" + + ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਅਜਿਹਾ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? + + \"ਮੈਨੂੰ ਮੇਰੇ ਨੰਬਰ ਨਾਲ ਕੌਣ ਲੱਭ ਸਕਦਾ ਹੈ\" ਸੈਟਿੰਗ ਨੂੰ \"ਕੋਈ ਨਹੀਂ\" \'ਤੇ ਸੈੱਟ ਕਰਨ ਨਾਲ ਲੋਕਾਂ ਲਈ Signal ਉੱਤੇ ਤੁਹਾਨੂੰ ਲੱਭਣਾ ਔਖਾ ਹੋ ਜਾਵੇਗਾ। + + ਰੱਦ ਕਰੋ ਹਰ ਕੋਈ ਕੋਈ ਵੀ ਨਹੀਂ ਸਕ੍ਰੀਨ ਲੌਕ @@ -4391,11 +4403,16 @@ ਗਰੁੱਪ ਬਾਰੇ ਜਾਣਕਾਰੀ + ਸਟੈਂਡਰਡ + ਵੱਧ ਤੇਜ਼, ਘੱਟ ਡਾਟਾ + ਉੱਚਾ + ਹੌਲੀ, ਵੱਧ ਡਾਟਾ - ਫ਼ੋਟੋ ਦੀ ਕੁਆਲਟੀ + + ਮੀਡੀਆ ਕੁਆਲਟੀ ਆਪਣੇ ਦੋਸਤਾਂ ਨੂੰ ਸੱਦਾ ਦਿਓ @@ -4871,6 +4888,28 @@ ਇੱਕ ਜਾਂ ਵੱਧ ਚੀਜ਼ਾਂ ਬਹੁਤ ਵੱਡੀਆਂ ਸਨ ਇੱਕ ਜਾਂ ਵੱਧ ਆਈਟਮਾਂ ਵਾਜਬ ਨਹੀਂ ਹਨ ਬਹੁਤ ਵੱਧ ਚੀਜ਼ਾਂ ਚੁਣੀਆਂ ਗਈਆਂ + + ਵੀਡੀਓ ਨੂੰ ਇੱਕ ਵਾਰ ਦੇਖਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + ਫ਼ੋਟੋ ਨੂੰ ਇੱਕ ਵਾਰ ਦੇਖਣ ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + ਵੀਡੀਓ ਨੂੰ ਉੱਚ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + ਵੀਡੀਓ ਨੂੰ ਸਟੈਂਡਰਡ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + ਫ਼ੋਟੋ ਨੂੰ ਉੱਚ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + ਫ਼ੋਟੋ ਨੂੰ ਸਟੈਂਡਰਡ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + + %1$d ਆਈਟਮ ਨੂੰ ਉੱਚ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + %1$d ਆਈਟਮਾਂ ਨੂੰ ਉੱਚ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + + + + %1$d ਆਈਟਮ ਨੂੰ ਸਟੈਂਡਰਡ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + %1$d ਆਈਟਮਾਂ ਨੂੰ ਸਟੈਂਡਰਡ ਕੁਆਲਿਟੀ \'ਤੇ ਸੈੱਟ ਕੀਤਾ ਗਿਆ + ਰੱਦ ਕਰੋ ਖਿੱਚੋ @@ -4895,6 +4934,20 @@ ਤਬਦੀਲੀਆਂ ਅਣਡਿੱਠੀਆਂ ਕਰਨੀਆਂ ਹਨ? ਤੁਹਾਡੇ ਵਲੋਂ ਇਸ ਫ਼ੋਟੋੋ ਲਈ ਕੀਤੀਆਂ ਕੋਈ ਵੀ ਤਬਦੀਲੀਆਂ ਖਤਮ ਹੋ ਜਾਣਗੀਆਂ। + + %1$s ਲੱਭਿਆ + + \"%1$s\" ਨਾਲ ਚੈਟ ਸ਼ੁਰੂ ਕਰੋ + + ਚੈਟ \'ਤੇ ਜਾਓ + + + ਕੀ ਡਿਵਾਈਸ ਨੂੰ ਲਿੰਕ ਕਰਨਾ ਹੈ? + + ਇੰਝ ਲੱਗਦਾ ਹੈ ਕਿ ਤੁਸੀਂ Signal ਡਿਵਾਈਸ ਨੂੰ ਲਿੰਕ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹੋ। ਜਾਰੀ ਰੱਖੋ \'ਤੇ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸ ਨੂੰ ਲਿੰਕ ਕਰਨ ਲਈ ਕੋਡ ਨੂੰ ਦੁਬਾਰਾ ਸਕੈਨ ਕਰੋ। + + ਜਾਰੀ ਰੱਖੋ + ਮੇਰੇ ਬੈਜ ਖਾਸ ਬੈਜ @@ -4993,7 +5046,7 @@ ਭੁਗਤਾਨ ਬਾਕੀ ਹੈ - ਤੁਹਾਡਾ %1$s ਦਾ ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਅਜੇ ਬਾਕੀ ਹੈ। ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਨੂੰ ਪੂਰਾ ਹੋਣ ਵਿੱਚ ਆਮ ਤੌਰ \'ਤੇ 1 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗਦਾ ਹੈ। + ਤੁਹਾਡਾ %1$s ਦਾ ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਅਜੇ ਬਾਕੀ ਹੈ। ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਨੂੰ ਪੂਰਾ ਹੋਣ ਵਿੱਚ 1 ਤੋਂ 14 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗ ਸਕਦੇ ਹਨ। ਹੋਰ ਜਾਣੋ @@ -5937,9 +5990,9 @@ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦਾਨ ਦੇਣਾ ਬਾਕੀ ਹੈ - ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ ਆਮ ਤੌਰ \'ਤੇ 1 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗਦਾ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਭੁਗਤਾਨ ਪੂਰਾ ਹੋਣ ਤੱਕ ਉਡੀਕ ਕਰੋ। + ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ 1 ਤੋਂ 14 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗ ਸਕਦੇ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਭੁਗਤਾਨ ਪੂਰਾ ਹੋਣ ਤੱਕ ਉਡੀਕ ਕਰੋ। - ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ ਆਮ ਤੌਰ \'ਤੇ 1 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗਦਾ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵਾਰ ਹੋਰ ਦਾਨ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਭੁਗਤਾਨ ਪੂਰਾ ਹੋਣ ਤੱਕ ਉਡੀਕ ਕਰੋ। + ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ 1 ਤੋਂ 14 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗ ਸਕਦੇ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵਾਰ ਹੋਰ ਦਾਨ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਭੁਗਤਾਨ ਪੂਰਾ ਹੋਣ ਤੱਕ ਉਡੀਕ ਕਰੋ। ਤੁਹਾਡੇ ਦਾਨ ਉੱਤੇ ਹਾਲੇ ਵੀ ਕਾਰਵਾਈ ਜਾਰੀ ਹੈ। ਤੁਹਾਡੇ ਕਨੈਕਸ਼ਨ ਉੱਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹੋਏ ਇਸ ਵਿੱਚ ਕੁਝ ਮਿੰਟ ਲੱਗ ਸਕਦੇ ਹਨ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਭੁਗਤਾਨ ਪੂਰਾ ਹੋਣ ਤੱਕ ਉਡੀਕ ਕਰੋ। @@ -6091,7 +6144,7 @@ ਤੁਹਾਡੇ ਵੱਲੋਂ ਇੱਕ ਵਾਰ ਦਿੱਤਾ ਜਾਣ ਵਾਲਾ ਦਾਨ ਬਾਕੀ ਹੈ। ਜਦੋਂ ਤੁਹਾਡਾ ਦਾਨ ਪ੍ਰਾਪਤ ਹੋ ਜਾਵੇਗਾ ਤਾਂ ਤੁਸੀਂ ਆਪਣੀ ਪ੍ਰੋਫਾਈਲ ਉੱਤੇ %1$s ਬੈਜ ਦਿਖਾ ਸਕੋਗੇ। - ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ ਆਮ ਤੌਰ \'ਤੇ 1 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗਦਾ ਹੈ। %1$s + ਬੈਂਕ ਟ੍ਰਾਂਸਫਰ ਉੱਤੇ ਕਾਰਵਾਈ ਕਰਨ ਵਿੱਚ 1 ਤੋਂ 14 ਕਾਰੋਬਾਰੀ ਦਿਨ ਲੱਗ ਸਕਦੇ ਹਨ। %1$s ਹੋਰ ਜਾਣੋ @@ -6432,6 +6485,8 @@ ਕਾਲ ਦੇ ਵੇਰਵੇ + + ਕਾਲ ਦਾ ਨਾਮ ਸੋਧੋ ਕਾਲ ਦਾ ਨਾਮ ਸ਼ਾਮਲ ਕਰੋ @@ -6499,6 +6554,10 @@ ਤੁਹਾਡਾ QR ਕੋਡ ਅਤੇ ਲਿੰਕ ਰੀਸੈੱਟ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ ਅਤੇ ਇੱਕ ਨਵਾਂ QR ਕੋਡ ਅਤੇ ਲਿੰਕ ਬਣਾਇਆ ਗਿਆ ਹੈ। Signal ਉੱਤੇ ਮੇਰੇ ਨਾਲ ਚੈਟ ਕਰਨ ਲਈ ਆਪਣੇ ਫ਼ੋਨ ਦੇ ਨਾਲ QR ਕੋਡ ਸਕੈਨ ਕਰੋ। + + QR ਕੋਡ ਨਹੀਂ ਲੱਭਿਆ + + Signal QR ਕੋਡ ਵਾਲੀ ਕੋਈ ਹੋਰ ਤਸਵੀਰ ਸਕੈਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਇਹ ਲਿੰਕ ਜਿਸ ਵਿਅਕਤੀ ਕੋਲ ਵੀ ਹੈ ਉਹ ਤੁਹਾਡਾ ਵਰਤੋਂਕਾਰ ਨਾਂ ਦੇਖ ਸਕਦਾ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਨਾਲ ਚੈਟ ਸ਼ੁਰੂ ਕਰ ਸਕਦਾ ਹੈ। ਇਸਨੂੰ ਸਿਰਫ਼ ਉਹਨਾਂ ਲੋਕਾਂ ਨਾਲ ਸਾਂਝਾ ਕਰੋ ਜਿਹਨਾਂ ਉੱਤੇ ਤੁਸੀਂ ਭਰੋਸਾ ਕਰਦੇ ਹੋ। @@ -6590,6 +6649,10 @@ %1$s Signal ਦੇ ਵਰਤੋਂਕਾਰ ਨਹੀਂ ਹਨ। ਕੀ ਤੁਸੀਂ ਇਸ ਨੰਬਰ ਨੂੰ ਸੱਦਾ ਦੇਣਾ ਚਾਹੋਗੇ? ਸੱਦਾ + + QR ਕੋਡ ਸਕੈਨ ਕਰੋ + + ਨੈੱਟਵਰਕ ਤਰੁੱਟੀ ਹੋਈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 2d102eb9e7..a105e854e5 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -432,6 +432,8 @@ Wiadomości SMS nie są już obsługiwane w Signal. Wiadomości SMS nie są już obsługiwane w Signal. Zaproś %1$s do Signal i kontynuujcie rozmowę tutaj. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Zaproś do Molly @@ -554,7 +556,7 @@ Zgłoszono spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Zostaliśmy powiadomieni o tym, że ten użytkownik może wysyłać spam. Signal nie widzi treści czatów. Zgłoszono jako spam @@ -575,7 +577,7 @@ Oszustwa związane z kryptowalutami lub pieniędzmi - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Jeśli ktoś, kogo nie znasz, wysyła Ci wiadomości o kryptowalutach (takich jak Bitcoin) lub okazjach finansowych, uważaj — prawdopodobnie jest to spam. Wiadomości ogólnikowe lub nie na temat @@ -854,7 +856,7 @@ Zobacz - Permanentny błąd komunikacji Signal! + Permanentny błąd komunikacji Molly! Molly nie był w stanie zarejestrować się w Usługach Google Play. Wiadomości i połączenia Molly zostały wyłączone. Spróbuj zarejestrować się ponownie w Ustawienia > Zaawansowane. @@ -1480,6 +1482,8 @@ %1$s zmienił(a) nazwę profilu na %2$s. %1$s zmienił(a) nazwę profilu z %2$s na %3$s. %1$s zmienił(a) swój profil. + + You started this chat with %1$s. Utworzyłeś(aś) grupę. @@ -1995,8 +1999,10 @@ Niepołączony Link do połączenia Signal - - Każda osoba, która dołączy do połączenia za pomocą linku, zobaczy Twoje imię, zdjęcie oraz numer telefonu. + + Każda osoba, która dołączy do połączenia za pomocą linku, zobaczy Twoje imię, zdjęcie oraz numer telefonu. + + Każda osoba, która dołączy do połączenia za pomocą linku, zobaczy Twoje imię oraz zdjęcie. Oczekiwanie na wpuszczenie… @@ -2456,7 +2462,7 @@ Pomyślnie usunięto nazwę użytkownika. Wystąpił błąd sieci. - Too many attempts made, please try again later. + Zbyt dużo nieudanych prób. Spróbuj ponownie później. Nazwa użytkownika jest zajęta. Nazwy użytkowników mogą zawierać wyłącznie a–Z, 0–9 i podkreślenia (_). Nazwy użytkowników nie mogą zaczynać się od cyfry. @@ -2480,7 +2486,7 @@ Nie możesz wybrać cyfr 00. Wprowadź cyfrę 1–9. - Numbers with more than 2 digits can\'t start with 0 + Liczby składające się z więcej niż dwóch cyfr nie mogą zaczynać się od 0. Odzyskanie nazwy użytkownika spowoduje zresetowanie obecnego kodu QR i linku. Chcesz kontynuować? @@ -4106,6 +4112,12 @@ Nikt nie będzie mógł zobaczyć, że korzystasz z Signal, chyba że wyślesz tej osobie wiadomość lub macie już rozpoczętą rozmowę na czacie. "Aby zmienić to ustawienie, w sekcji Kto może zobaczyć mój numer wybierz opcję Nikt." + + Chcesz kontynuować? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Anuluj Wszyscy Nikt Blokada ekranu @@ -4611,11 +4623,16 @@ Opis grupy + Standardowa + Szybciej, mniejszy plik + Wysoka + Wolniej, większy plik - Jakość zdjęcia + + Jakość multimediów Zaproś znajomych @@ -5105,6 +5122,32 @@ Co najmniej jeden element był zbyt duży Co najmniej jeden element był nieprawidłowy Zbyt wiele wybranych elementów + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + Anuluj Rysuj @@ -5129,6 +5172,20 @@ Odrzucić zmiany? Utracisz wszystkie zmiany dokonane w tym zdjęciu. + + Found %1$s + + Start a chat with \"%1$s\" + + Przejdź do czatu + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Kontynuuj + Moje odznaki Wyświetlana odznaka @@ -5227,7 +5284,7 @@ Płatność oczekuje na realizację - Twój przelew bankowy w wysokości %1$s oczekuje na realizację. Przelewy bankowe są zazwyczaj realizowane w ciągu 1 dnia roboczego. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Dowiedz się więcej @@ -6209,9 +6266,9 @@ Twoja darowizna oczekuje na realizację - Przelewy bankowe są zazwyczaj realizowane w ciągu 1 dnia roboczego. Poczekaj, aż płatność zostanie zakończona, zanim zmienisz swoją subskrypcję. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Przelewy bankowe są zazwyczaj realizowane w ciągu 1 dnia roboczego. Poczekaj, aż płatność zostanie zakończona, zanim przekażesz kolejną darowiznę. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Twoja darowizna wciąż jest przetwarzana. W zależności od Twojego połączenia z siecią może to potrwać kilka minut. Poczekaj, aż płatność zostanie zakończona, zanim zmienisz swoją subskrypcję. @@ -6365,7 +6422,7 @@ Twoja jednorazowa darowizna oczekuje na realizację. Odznaka %1$s będzie widoczna na Twoim profilu, gdy otrzymamy Twoją darowiznę. - Przelewy bankowe są zazwyczaj realizowane w ciągu 1 dnia roboczego. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Dowiedz się więcej @@ -6714,6 +6771,8 @@ Szczegóły połączenia + + Edytuj nazwę połączenia Dodaj nazwę połączenia @@ -6781,6 +6840,10 @@ Twój kod QR i link zostały zresetowane. Utworzono nowy kod QR i link. Aby rozmawiać ze mną w Signal, zeskanuj kod QR za pomocą swojego telefonu. + + QR code not found + + Try scanning another image containing a Signal QR code. Każdy posiadacz tego linku może zobaczyć Twoją nazwę użytkownika i rozpocząć czat z Tobą. Udostępniaj go tylko zaufanym osobom. @@ -6876,6 +6939,10 @@ %1$s nie jest użytkownikiem Signal. Chcesz zaprosić ten numer? Zaproś + + Skanuj kod QR + + Wystąpił błąd sieci. Spróbuj później. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 381908a9a6..d1794279d4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -426,6 +426,8 @@ O envio de mensagens SMS não é mais suportado no Signal. O envio de mensagens SMS não é mais suportado no Signal. Convide %1$s para o Signal para salvar a conversa aqui. + + Essa pessoa não está mais usando o Molly. Convide essa pessoa para o Molly para salvar a conversa aqui. Convidar para o Molly @@ -536,7 +538,7 @@ Spam denunciado - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + O Signal foi notificado de que essa pessoa pode estar enviando spam. O Signal não pode ver o conteúdo de chats. Denunciado como spam @@ -557,7 +559,7 @@ Golpes de cripto ou dinheiro - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Se alguém que você não conhece enviar mensagens sobre criptomoedas (como bitcoin) ou falar sobre alguma oportunidade financeira, tome cuidado. Provavelmente é spam. Mensagens vagas ou irrelevantes @@ -818,7 +820,7 @@ Exibir - Falha permanente de comunicação do Signal! + Falha permanente de comunicação do Molly! O Molly não conseguiu cadastrar-se no Google Play Services. Mensagens e chamadas do Molly foram desabilitadas; tente recadastrar em Configurações > Avançado. @@ -1386,6 +1388,8 @@ %1$s alterou o nome de perfil para %2$s. %1$s alterou o nome de perfil de %2$s para %3$s. %1$s alterou o perfil. + + Você iniciou este chat com %1$s. Você criou o grupo. @@ -1861,8 +1865,10 @@ Desconectado Link da chamada do Signal - - Todas as pessoas que entrarem nesta chamada pelo link poderão ver seu nome, foto e número de telefone. + + Todas as pessoas que entrarem nesta chamada pelo link poderão ver seu nome, foto e número de telefone. + + Qualquer pessoa que entrar nesta chamada pelo link verá seu nome e foto. Esperando pra entrar… @@ -2296,7 +2302,7 @@ Usuário excluído com sucesso Foi encontrado um erro de rede. - Too many attempts made, please try again later. + Foram feitas muitas tentativas, tente novamente mais tarde. Este nome de usuário já está sendo utilizado. Os nomes de usuário só podem incluir a–Z, 0–9, e sublinhado. Os nomes de usuários não podem começar com um número. @@ -2320,7 +2326,7 @@ Este número não pode ser 00. Insira um dígito entre 1-9 - Numbers with more than 2 digits can\'t start with 0 + Os números com mais de dois dígitos não podem começar com zero Se você recuperar seu nome de usuário, o QR code e o link existentes também serão alterados. Tem certeza? @@ -3894,6 +3900,12 @@ Ninguém poderá ver que você está no Signal, a não ser que você envie uma mensagem ou participe de um chat com alguém. "Para alterar esta configuração, defina \"Quem pode ver meu número\" como \"Ninguém\"." + + Tem certeza? + + Se você definir \"Quem pode ver meu número\" como \"Ninguém\", vai ser mais difícil para as pessoas te acharem no Signal. + + Cancelar Todo mundo Ninguém Bloqueio de tela @@ -4391,11 +4403,16 @@ Descrição do grupo + Padrão + Mais rápido, tamanho menor + Alta + Mais lento, tamanho maior - Qualidade da foto + + Qualidade das fotos Convide seus amigos @@ -4871,6 +4888,28 @@ Um ou mais itens são muito grandes Um ou mais itens são inválidos Muitos itens foram selecionados + + Vídeo configurado para visualização única + + Foto definida para visualização única + + Vídeo configurado para alta qualidade + + Vídeo definido com qualidade padrão + + Foto configurada para alta qualidade + + Foto configurada para qualidade padrão + + + %1$d item configurado para alta qualidade + %1$d itens configurados para alta qualidade + + + + %1$d item configurado para alta qualidade + %1$d itens configurados para alta qualidade + Cancelar Desenhar @@ -4895,6 +4934,20 @@ Descartar alterações? Você perderá todas as alterações feitas nessa foto. + + Encontramos %1$s + + Inicie um chat com \"%1$s\" + + Ir para o chat + + + Vincular dispositivo? + + Parece que você está tentando vincular um dispositivo Signal. Toque em continuar e escaneie o código novamente para vincular. + + Continuar + Meus selos Selo em destaque @@ -4993,7 +5046,7 @@ Pagamento pendente - Sua transferência bancária de %1$s está pendente. As transferências bancárias normalmente demoram 1 dia útil para serem concluídas. + Sua transferência bancária de %1$s está pendente. As transferências bancárias podem levar de 1 a 14 dias para serem concluídas. Saiba mais @@ -5937,9 +5990,9 @@ Você tem uma doação pendente - As transferências bancárias normalmente demoram 1 dia útil para serem processadas. Espere até que o pagamento seja concluído para atualizar sua assinatura. + As transferências bancárias podem levar de 1 a 14 dias para serem processadas. Espere até que o pagamento seja concluído para atualizar sua assinatura. - As transferências bancárias normalmente demoram 1 dia útil para serem processadas. Espere até que o pagamento seja concluído para fazer outra doação. + As transferências bancárias podem levar de 1 a 14 dias para serem processadas. Espere até que o pagamento seja concluído para fazer outra doação. Sua doação ainda está sendo processada. Isso pode demorar alguns minutos, dependendo da sua conexão. Espere até que o pagamento seja concluído para atualizar sua assinatura. @@ -6091,7 +6144,7 @@ Sua doação única está pendente. Você poderá exibir o selo %1$s no seu perfil quando sua doação for recebida. - As transferências bancárias normalmente demoram 1 dia útil para serem processadas. %1$s + As transferências bancárias podem levar de 1 a 14 dias para serem processadas. %1$s Saiba mais @@ -6432,6 +6485,8 @@ Detalhes da chamada + + Editar nome da chamada Adicionar nome da chamada @@ -6499,6 +6554,10 @@ Seu QR code e link foram redefinidos, e um novo código QR e link foram criados. Escaneie o QR Code com o seu telefone para conversar comigo no Signal. + + QR code não encontrado + + Escaneie outra imagem com um QR code do Signal. Qualquer pessoa com este link pode visualizar seu nome de usuário e começar a conversar com você. Compartilhe isso apenas com pessoas em quem você confia. @@ -6590,6 +6649,10 @@ %1$s não usa o Signal. Gostaria de enviar um convite para esse número? Convidar + + Escanear o código QR + + Foi encontrado um erro de rede. Tente mais tarde. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 6dafdbe851..22cc96efda 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -426,6 +426,8 @@ As mensagens SMS já não são suportadas pelo Signal. As mensagens SMS já não são suportadas pelo Signal. Convide %1$s para o Signal para manter a conversa aqui. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Convidar para o Molly @@ -536,7 +538,7 @@ Spam denunciado - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + O Signal foi notificado de que esta pessoa pode estar a enviar spam. O Signal não consegue ver o conteúdo de nenhum chat. Denunciado como spam @@ -557,7 +559,7 @@ Fraudes de cripto ou dinheiro - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Se alguém que não conhece lhe enviar mensagens sobre criptomoedas (como Bitcoin) ou uma oportunidade financeira, tenha cuidado. É provável que seja spam. Mensagens vagas ou irrelevantes @@ -818,7 +820,7 @@ Ver - Falha permanente de comunicação do Signal! + Falha permanente de comunicação do Molly! O Molly não se conseguiu registar com os Serviços Google Play. As mensagens e chamadas do Molly estão desativadas, por favor tente registar-se novamente em Definições > Avançado. @@ -1386,6 +1388,8 @@ %1$s alterou o seu nome de perfil para %2$s. %1$s alterou o seu nome de perfil de %2$s para %3$s. %1$s alterou o seu perfil. + + You started this chat with %1$s. Criou o grupo. @@ -1861,8 +1865,10 @@ Desligado Link de chamada do Signal - - Qualquer pessoa que entre nesta chamada através do link verá o seu nome, foto e número de telemóvel. + + Qualquer pessoa que entre nesta chamada através do link verá o seu nome, foto e número de telemóvel. + + Qualquer pessoa que se junte a esta chamada através do link verá o seu nome e fotografia. À espera de entrar… @@ -2296,7 +2302,7 @@ Nome de utilizador removido com sucesso. Encontrado um erro de rede. - Too many attempts made, please try again later. + Foram feitas demasiadas tentativas, tente novamente mais tarde. Este nome de utilizador já se encontra em utilização. Os nomes de utilizadores apenas podem incluir a-Z, 0-9 e underscores. Os nomes de utilizadores não podem começar com um número. @@ -2320,7 +2326,7 @@ Este número não pode ser 00. Introduza um algarismo entre 1 e 9 - Numbers with more than 2 digits can\'t start with 0 + Os números com mais de 2 algarismos não podem começar por 0 Recuperar o seu nome de utilizador irá repor o seu código QR e link existentes. Tem a certeza? @@ -3894,6 +3900,12 @@ Ninguém conseguirá ver que está no Signal, exceto as pessoas a quem envie mensagem ou com quem já tenha aberto um chat. "Para alterar esta definição, selecione Ninguém em Quem pode ver o meu número." + + Tem a certeza? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Cancelar Todos Ninguém Bloqueio de ecrã @@ -4391,11 +4403,16 @@ Descrição do grupo + Standard + Mais rápido, menos dados + Elevada + Mais lento, mais dados - Qualidade das fotografias + + Qualidade média Convide os seus amigos @@ -4871,6 +4888,28 @@ Um ou mais itens são demasiado grandes Um ou mais itens são inválidos Demasiados itens selecionados + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Cancelar Desenhar @@ -4895,6 +4934,20 @@ Descartar alterações? Irá perder quaisquer alterações que fez nesta fotografia. + + Found %1$s + + Start a chat with \"%1$s\" + + Ir para o chat + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Continuar + Os meus crachás Crachá em destaque @@ -4993,7 +5046,7 @@ Pagamento pendente - A sua transferência bancária de %1$s está pendente. As transferências bancárias geralmente demoram 1 dia útil a serem concluídas. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Saber mais @@ -5937,9 +5990,9 @@ Tem uma doação pendente - As transferências bancárias geralmente demoram 1 dia útil a ser processadas. Aguarde até que este pagamento seja concluído antes de atualizar a sua subscrição. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - As transferências bancárias geralmente demoram 1 dia útil a ser processadas. Aguarde até que este pagamento seja concluído antes de fazer outra doação. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. O seu donativo ainda está a ser processado. Isto pode demorar alguns minutos, dependendo da sua ligação. Aguarde até que este pagamento seja concluído antes de atualizar a sua subscrição. @@ -6091,7 +6144,7 @@ A sua doação única está pendente. Poderá exibir o crachá %1$s no seu perfil quando a sua doação for recebida. - As transferências bancárias geralmente demoram 1 dia útil a ser processadas. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Saber mais @@ -6432,6 +6485,8 @@ Detalhes da chamada + + Editar nome da chamada Adicionar nome de chamada @@ -6499,6 +6554,10 @@ O seu código QR e o seu link foram repostos e foram criados um novo código QR e link. Leia este código QR com o seu telemóvel para falar comigo no Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Qualquer pessoa com este link pode ver o seu nome de utilizador e iniciar um chat consigo. Partilhe-o apenas com pessoas da sua confiança. @@ -6590,6 +6649,10 @@ %1$s não é um utilizador Signal. Gostaria de convidar este número? Convidar + + Ler código QR + + Foi encontrado um erro de rede. Por favor, tete novamente mais tarde. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 12e40ffc0c..78d5100f7e 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -429,6 +429,8 @@ Mesajele SMS nu mai sunt acceptat în Signal. Mesajele SMS nu mai sunt acceptate pe Signal. Invită pe %1$s pe Signal ca să continui conversația aici. + + Această persoană nu mai folosește Molly. Invit-o pe Molly ca să continui conversația aici. Invită la Molly @@ -545,7 +547,7 @@ Spam raportat - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal a fost notificat că această persoană ar putea trimite spam. Signal nu poate vedea conținutul niciunei conversații. Raportat ca spam @@ -566,7 +568,7 @@ Escrocherii cu cripto sau bani - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Dacă cineva pe care nu îl cunoști îți trimite mesaje despre criptomonede (cum ar fi Bitcoin) sau despre o oportunitate financiară, ai grijă—este foarte probabil că este vorba de spam. Mesaje vagi sau irelevante @@ -836,7 +838,7 @@ Vizualizare - Eroare permanentă de comunicare cu Signal! + Eroare permanentă de comunicare cu Molly! Molly nu s-a putut înregistra la Google Play Services. Mesajele și apelurile Molly au fost dezactivate, te rugăm încearcă să te înregistrezi din nou din meniul Setări > Avansat. @@ -1433,6 +1435,8 @@ %1$s și-a schimbat numele profilului în %2$s. %1$s și-a schimbat numele profilul din %2$s în %3$s. %1$s și-a schimbat profilul. + + Ai început această conversație cu %1$s. Ai creat grupul. @@ -1928,8 +1932,10 @@ Deconectat Link de apel Signal - - Oricine se alătură acestui apel prin intermediul linkului îți va vedea numele, fotografia și numărul de telefon. + + Oricine se alătură acestui apel prin intermediul linkului îți va vedea numele, fotografia și numărul de telefon. + + Oricine se va alătura acestui apel prin intermediul acestui link va vedea numele și fotografia ta. Așteaptă să fie lăsat să intre… @@ -2376,7 +2382,7 @@ Numele de utilizator a fost eliminat cu succes. A apărut o eroare de rețea. - Too many attempts made, please try again later. + Prea multe încercări efectuate, încearcă din nou mai târziu. Acest nume de utilizator este luat. Numele de utilizatori pot conține doar a-Z, 0-9, și _. Numele de utilizator nu pot începe cu un număr. @@ -2400,7 +2406,7 @@ Acest număr nu poate fi 00. Introdu o cifră între 1–9 - Numbers with more than 2 digits can\'t start with 0 + Numerele cu mai mult de 2 cifre nu pot începe cu 0 Schimbarea numelui de utilizator va reseta codul tău QR existent și linkul. Ești sigur/ă? @@ -4000,6 +4006,12 @@ Nimeni nu va putea să vadă că eșți pe Signal decât dacă îi trimiți un mesaj sau dacă ai o conversație existentă cu acesta. "Pentru a schimba această setare, setează „Cine poate vedea numărul meu” la „Nimeni”." + + Ești sigur/ă? + + Dacă setezi \"Cine mă poate găsi după număr\" la \"Nimeni\", oamenii te vor găsi mai greu pe Signal. + + Anulează Toată lumea Nimeni Blocare ecran @@ -4501,11 +4513,16 @@ Descriere grup + Standard + Mai rapid, mai puține date + Mare + Mai lent, mai multe date - Calitate fotografie + + Calitate Media Invită-ți prietenii @@ -4988,6 +5005,30 @@ Unul sau mai multe elemente au fost prea mari Unul sau mai multe elemente au fost invalide Prea multe elemente selectate + + Videoclip setat pentru a fi vizualizat o singură dată + + Fotografie setată pentru a fi vizualizată o dată + + Videoclip setat la calitate înaltă + + Video setat la calitate standard + + Fotografie setată la calitate înaltă + + Fotografie setată la calitate standard + + + %1$d element setat la calitate înaltă + %1$d elemente setate la calitate înaltă + %1$d de elemente setate la calitate înaltă + + + + %1$d articol setat la calitate standard + %1$d articole setate la calitate standard + %1$d de articole setate la calitate standard + Anulare Desenează @@ -5012,6 +5053,20 @@ Renunți la modificări? Vei pierde toate modificările făcute acestei fotografii. + + %1$s a fost găsit + + Începe o conversație cu \"%1$s\" + + Arată conversația + + + Asociezi dispozitivul? + + Se pare că încerci să conectezi un dispozitiv Signal. Atinge continuă și scanează din nou codul, pentru a-l asocia. + + Continuă + Insignele mele Insignă principală @@ -5110,7 +5165,7 @@ Plata în așteptare - Transferul tău bancar de %1$s este în așteptare. Procesarea transferurilor bancare durează de obicei 1 zi lucrătoare. + Transferul tău bancar de %1$s este în așteptare. Procesarea transferurilor bancare durează de obicei între 1 zi și 14 zile lucrătoare. Află mai multe @@ -6073,9 +6128,9 @@ Ai o donație în așteptare - Procesarea transferurilor bancare durează de obicei 1 zi lucrătoare. Așteaptă până la finalizarea acestei plăți înainte de a-ți actualiza abonamentul. + Procesarea transferurilor bancare poate dura între 1 și 14 zile lucrătoare. Așteaptă până la finalizarea acestei plăți înainte de a-ți actualiza abonamentul. - Procesarea transferurilor bancare durează de obicei 1 zi lucrătoare. Așteaptă până la finalizarea acestei plăți înainte de a face o altă donație. + Procesarea transferurilor bancare poate dura între 1 și 14 zile lucrătoare. Așteaptă până la finalizarea acestei plăți, înainte de a face o altă donație. Donația ta este încă în procesare. Ceea ce poate dura câteva minute, în funcție de conexiunea ta. Așteaptă până la finalizarea acestei plăți înainte de a-ți actualiza abonamentul. @@ -6228,7 +6283,7 @@ Donația ta unică este în așteptare. Vei putea afișa insigna %1$s pe profilul tău când va fi primită donația. - Procesarea transferurilor bancare durează de obicei 1 zi lucrătoare. %1$s + Procesarea transferurilor bancare poate dura între 1 și 14 zile lucrătoare. %1$s Află mai multe @@ -6573,6 +6628,8 @@ Detaliile apelului + + Editează numele apelului Adaugă numele apelului @@ -6640,6 +6697,10 @@ Codul și link-ul QR au fost resetate și au fost create unele noi. Scanează acest cod QR cu telefonul tău pentru a discuta cu mine pe Signal. + + Codul QR nu a fost găsit + + Încearcă să scanezi o altă imagine care conține un cod QR Signal. Oricine cu acest link poate vedea numele și fotografia grupului și poate solicita să se alăture acestuia. Distribuie linkul persoanelor de încredere. @@ -6733,6 +6794,10 @@ %1$s nu este utilizator Signal. Ai dori să inviți acest număr? Invită + + Scanează codul QR + + A apărut o eroare de rețea. Încearcă mai târziu. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 03ecb15dbc..89aeda77f0 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -432,6 +432,8 @@ Обмен SMS-сообщениями больше не поддерживается в Signal. Обмен SMS-сообщениями больше не поддерживается в Signal. Пригласите %1$s в Signal, чтобы продолжить разговор здесь. + + Этот человек больше не пользуется Molly. Пригласите его в Molly, чтобы продолжить разговор здесь. Пригласить в Molly @@ -554,7 +556,7 @@ Было сообщено о спаме - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal был уведомлен о том, что этот человек может рассылать спам. Signal не видит содержимое чатов. Было сообщено о спаме @@ -575,7 +577,7 @@ Мошенничество с криптовалютой или деньгами - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Если кто-то, кого вы не знаете, присылает сообщения о криптовалюте (например, биткоине) или финансовых возможностях, будьте осторожны — скорее всего, это спам. Подозрительные или неуместные сообщения @@ -1480,6 +1482,8 @@ %1$s изменил(-а) своё имя профиля на %2$s. %1$s изменил(-а) своё имя профиля с %2$s на %3$s. %1$s изменил(-а) свой профиль. + + Вы начали этот чат с %1$s. Вы создали группу. @@ -1995,8 +1999,10 @@ Отключено Ссылка на звонок Signal - - Все, кто присоединится к этому звонку по ссылке, будут видеть ваше имя, фото и номер телефона. + + Все, кто присоединится к этому звонку по ссылке, будут видеть ваше имя, фото и номер телефона. + + Все, кто присоединится к этому звонку по ссылке, будут видеть ваше имя и фото. Ожидание добавления… @@ -2456,7 +2462,7 @@ Имя пользователя успешно удалено. Обнаружена ошибка сети. - Too many attempts made, please try again later. + Сделано слишком много попыток. Пожалуйста, попробуйте ещё раз позже. Это имя пользователя занято. Имена пользователей могут содержать только a–Z, 0–9 и нижние подчёркивания. Имена пользователей не могут начинаться с цифр. @@ -2480,7 +2486,7 @@ Этот номер не может быть 00. Введите цифру от 1 до 9 - Numbers with more than 2 digits can\'t start with 0 + Числа, состоящие более чем из 2 цифр, не могут начинаться с 0 При восстановлении имени пользователя ваши существующие QR-код и ссылка будут сброшены. Вы уверены? @@ -4106,6 +4112,12 @@ Никто не сможет увидеть, что вы в Signal, если только вы не отправите этому человеку сообщение или не продолжите с ним чат. "Чтобы изменить эту настройку, установите для параметра «Кто может видеть мой номер» значение «Никто»." + + Вы уверены? + + Если вы установите для параметра «Кто может найти меня по номеру» значение «Никто», найти вас в Signal будет сложнее. + + Отменить Все Никто Блокировка экрана @@ -4611,11 +4623,16 @@ Описание группы + Стандартное + Быстрее, меньше данных + Высокое + Медленнее, больше данных - Качество фото + + Качество медиа Пригласить друзей @@ -5105,6 +5122,32 @@ Один или несколько элементов были слишком большими Один или несколько элементов были недействительными Выбрано слишком много элементов + + Видео для однократного просмотра + + Фото для однократного просмотра + + Высокое качество видео + + Стандартное качество видео + + Высокое качество фото + + Стандартное качество фото + + + %1$d файл высокого качества + %1$d файла высокого качества + %1$d файлов высокого качества + %1$d файла высокого качества + + + + %1$d файл стандартного качества + %1$d файла стандартного качества + %1$d файлов стандартного качества + %1$d файла стандартного качества + Отменить Нарисовать @@ -5129,6 +5172,20 @@ Сбросить изменения? Вы потеряете все изменения, которые вы сделали в этой фотографии. + + Найдено: %1$s + + Начать чат с «%1$s» + + Перейти к чату + + + Привязать устройство? + + Похоже, вы пытаетесь привязать устройство Signal. Нажмите «Продолжить» и просканируйте код снова, чтобы привязать устройство. + + Продолжить + Мои значки Главный значок @@ -5227,7 +5284,7 @@ Платёж на рассмотрении - Ваш банковский перевод на сумму %1$s находится на рассмотрении. Обработка банковских переводов обычно занимает 1 рабочий день. + Ваш банковский перевод на сумму %1$s находится на рассмотрении. Обработка банковских переводов может занимать от 1 до 14 рабочих дней. Узнать больше @@ -6209,9 +6266,9 @@ Ваше пожертвование на рассмотрении - Обработка банковских переводов обычно занимает 1 рабочий день. Пожалуйста, дождитесь завершения обработки платежа, прежде чем обновлять подписку. + Обработка банковских переводов может занимать от 1 до 14 рабочих дней. Пожалуйста, дождитесь завершения обработки платежа, прежде чем обновлять подписку. - Обработка банковских переводов обычно занимает 1 рабочий день. Пожалуйста, дождитесь завершения обработки платежа, прежде чем обновлять подписку. + Обработка банковских переводов может занимать от 1 до 14 рабочих дней. Пожалуйста, дождитесь завершения обработки платежа, прежде чем обновлять подписку. Ваше пожертвование всё ещё обрабатывается. Это может занять несколько минут в зависимости от вашего соединения. Пожалуйста, дождитесь завершения обработки платежа, прежде чем обновлять подписку. @@ -6365,7 +6422,7 @@ Ваше разовое пожертвование на рассмотрении. После получения пожертвования вы сможете показать в своем профиле значок %1$s. - Обработка банковских переводов обычно занимает 1 рабочий день. %1$s + Обработка банковских переводов может занимать от 1 до 14 рабочих дней. %1$s Узнать больше @@ -6714,6 +6771,8 @@ Подробности звонка + + Изменить имя звонка Добавить имя звонка @@ -6781,6 +6840,10 @@ Ваш QR-код и ссылка были сброшены, и были созданы новый QR-код и ссылка. Просканируйте этот QR-код с помощью вашего телефона, чтобы начать чат со мной в Signal. + + QR-код не найден + + Попробуйте отсканировать другое изображение, содержащее QR-код Signal. Любой, у кого есть эта ссылка, может видеть ваше имя пользователя и начать чат с вами. Делитесь информацией только с теми, кому доверяете. @@ -6876,6 +6939,10 @@ %1$s не является пользователем Signal. Вы хотите пригласить этот номер? Пригласить + + Сканировать QR-код + + Произошла ошибка сети. Попробуйте ещё раз позже. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 9c363f7343..bb009cb42d 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -432,6 +432,8 @@ Signal už nepodporuje odosielanie SMS správ. Signal už nepodporuje odosielanie SMS správ. Ak chcete konverzáciu zachovať tu, pozvite používateľa %1$s, aby sa pripojil k Signalu. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Pozvať do Mollyu @@ -554,7 +556,7 @@ Nahlásený spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal bol upozornený na to, že tento používateľ môže rozposielať spam. Signal nevidí obsah žiadneho četu. Nahlásené ako spam @@ -575,7 +577,7 @@ Peňažné podvody alebo podvody s kryptomenou - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Ak vám niekto, koho nepoznáte, posiela správy týkajúce sa kryptomeny (ako je bitcoin) alebo finančnej príležitosti, buďte obozretní – pravdepodobne ide o spam. Nejasné alebo irelevantné správy @@ -854,7 +856,7 @@ Zobraziť - Trvalá chyba komunikácie Signal! + Trvalá chyba komunikácie Molly! Molly sa nebol schopný registrovať k službám Google Play. Molly správy a hovory boli vypnuté, prosím zaregistrujte sa opätovne cez Nastavenia > Rozšírené. @@ -1480,6 +1482,8 @@ %1$s zmenil/a názov svojho profilu na %2$s. %1$s zmenil/a názov svojho profilu z %2$s na %3$s. %1$s zmenil/a svoj profil. + + You started this chat with %1$s. Vytvorili ste skupinu. @@ -1995,8 +1999,10 @@ Odpojený Odkaz na Signal hovor - - Každý, kto sa pripojí k tomuto hovoru prostredníctvom odkazu, uvidí vaše meno, fotku a telefónne číslo. + + Každý, kto sa pripojí k tomuto hovoru prostredníctvom odkazu, uvidí vaše meno, fotku a telefónne číslo. + + Každý, kto sa pripojí k tomuto hovoru prostredníctvom odkazu, uvidí vaše meno a fotku. Čakajú na pridanie sa k hovoru… @@ -2456,7 +2462,7 @@ Používateľské meno bolo úspešne odstránené. Vyskytla sa chyba siete. - Too many attempts made, please try again later. + Urobili ste príliš veľa pokusov, skúste to znova neskôr Toto používateľské meno je obsadené. Používateľské mená môžu obsahovať iba znaky a-Z, 0-9 a podčiarkovníky. Používateľské mená nemôžu začínať číslicou. @@ -2480,7 +2486,7 @@ Toto číslo nemôže byť 00. Zadajte číslicu medzi 1–9 - Numbers with more than 2 digits can\'t start with 0 + Čísla s viac ako 2 číslicami nemôžu začínať nulou Obnovením používateľského mena sa resetuje váš existujúci QR kód a odkaz. Naozaj chcete pokračovať? @@ -4106,6 +4112,12 @@ Nikto vás v aplikácii Signal neuvidí, pokiaľ mu nenapíšete správu alebo s ním nebudete četovať. "Ak chcete toto nastavenie zmeniť, v časti Kto môže vidieť moje telefónne číslo zvoľte „Nikto“." + + Naozaj chcete pokračovať? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Zrušiť Každý Nikto Zámok obrazovky @@ -4611,11 +4623,16 @@ Popis skupiny + Štandardné + Rýchlejšie, menej dát + Vysoká + Pomalšie, viac dát - Kvalita fotografie + + Kvalita médií Pozvite vašich priateľov @@ -5105,6 +5122,32 @@ Jedna, alebo viac položiek bolo príliš veľkých Jedna, alebo viac položiek je neplatných Je vybratých príliš veľa položiek + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + Zrušiť Nakreslite @@ -5129,6 +5172,20 @@ Zrušiť zmeny? Prídete o všetky zmeny, ktoré ste urobili na tejto fotografii. + + Found %1$s + + Start a chat with \"%1$s\" + + Prejsť na čet + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Pokračovať + Moje odznaky Zobrazený odznak @@ -5227,7 +5284,7 @@ Čaká sa na platbu - Čaká sa na váš bankový prevod vo výške %1$s. Dokončenie bankového prevodu zvyčajne trvá jeden pracovný deň. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Zistiť viac @@ -6209,9 +6266,9 @@ Čaká sa na príspevok - Spracovanie bankového prevodu zvyčajne trvá jeden pracovný deň. Pred aktualizáciou prispievania počkajte, kým sa platba nedokončí. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Spracovanie bankového prevodu zvyčajne trvá jeden pracovný deň. Pred odoslanim ďalšieho príspevku počkajte, kým sa platba nedokončí. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Váš príspevok sa stále spracováva. V závislosti od vášho pripojenia to môže trvať niekoľko minút. Pred aktualizáciou prispievania počkajte, kým sa platba nedokončí. @@ -6365,7 +6422,7 @@ Čaká sa na váš jednorazový príspevok. Akonáhle bude váš príspevok prijatý, budete môcť vo svojom profile zobraziť odznak %1$s. - Spracovanie bankového prevodu zvyčajne trvá jeden pracovný deň. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Zistiť viac @@ -6714,6 +6771,8 @@ Podrobnosti hovoru + + Upraviť názov hovoru Pridať názov hovoru @@ -6781,6 +6840,10 @@ Váš QR kód a odkaz boli resetované a bol vytvorený nový QR kód a odkaz. Naskenujte tento QR kód pomocou telefónu a četujte so mnou v aplikácii Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Ktokoľvek s týmto odkazom si môže pozrieť vaše používateľské meno a začať s vami čet. Zdieľajte ho iba s ľuďmi, ktorým dôverujete. @@ -6876,6 +6939,10 @@ %1$s nepoužíva Signal. Chceli by ste pozvať toto číslo? Pozvať + + Skenovať QR kód + + Vyskytla sa chyba siete. Skúste znovu neskôr. diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 251fe781eb..a40ef80c39 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -432,6 +432,8 @@ SMS sporočila niso več podprta v Signalu. SMS sporočila niso več podprta v Signalu. Povabite stik %1$s v Signal, da ohranite pogovor tukaj. + + Ta oseba Mollya ne uporablja več. Povabite jo/ga v Molly, da ohranite pogovor tukaj. Povabi na Molly @@ -554,7 +556,7 @@ Prijavljeno kot neželeno - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal je bil obveščen, da ta oseba morda pošilja neželeno vsebino. Signal ne vidi vsebine klepetov. Prijavljeno kot neželeno @@ -575,7 +577,7 @@ Kripto ali denarne prevare - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Če vam neznana oseba pošlje sporočilo o kriptovaluti (kot je Bitcoin) ali finančni priložnosti, bodite previdni—verjetno gre za neželeno vsebino. Nejasna ali nepomembna sporočila @@ -854,7 +856,7 @@ Ogled - Trajna okvara pri komunikaciji aplikacije Signal! + Trajna okvara pri komunikaciji aplikacije Molly! Registracija z Google Play Services ni bila uspešna. Podatkovna komunikacija je izklopljena, prosimo, poskusite s ponovno registracijo v meniju Nastavive > Napredno. @@ -1480,6 +1482,8 @@ %1$s je preimenoval_a svoj profil v \"%2$s\". %1$s je preimenoval_a svoj profil iz %2$s v %3$s. %1$s je spremenil_a svoj profil. + + Začeli ste klepet s/z %1$s. Ustvarili ste skupino. @@ -1995,8 +1999,10 @@ Povezava je prekinjena Signalova klicna povezava - - Vsakdo, ki se pridruži temu klicu prek povezave, bo videl vaše ime, fotografijo in telefonsko številko. + + Vsakdo, ki se pridruži temu klicu prek povezave, bo videl vaše ime, fotografijo in telefonsko številko. + + Vsi, ki se bodo pridružili temu klicu prek povezave, bodo videli vaše ime in fotografijo. Čakanje na dostop … @@ -2456,7 +2462,7 @@ Uspešno ste izbrisali uporabniško ime. Prišlo je do napake na omrežju. - Too many attempts made, please try again later. + Preveč poskusov, poskusite znova pozneje. Uporabniško ime je že zasedeno. Uporabniška imena lahko vsebujejo samo znake a-Z, 0-9 in podčrtaje. Uporabniška imena se ne smejo začeti s števikami. @@ -2480,7 +2486,7 @@ Ta številka ne sme biti 00. Vnesite številko med 1 in 9 - Numbers with more than 2 digits can\'t start with 0 + Številke z več kot dvema števkama se ne morejo začeti z 0 Obnovitev vašega uporabniškega imena bo ponastavila vašo obstoječo QR kodo in povezavo. Ste prepričani? @@ -4106,6 +4112,12 @@ Nihče ne bo mogel videti, da ste na Signalu, razen če mu/ji ne pošljete sporočila ali že klepetate z njim/njo. "Če želite spremeniti to nastavitev, nastavite »Kdo lahko vidi mojo številko« na »Nihče«." + + Ste prepričani? + + Če nastavite \"Kdo me lahko najde po številki\" na \"Nihče\", vas bodo ljudje težje našli v Signalu. + + Prekliči Kdorkoli Nikogar Zaklep zaslona @@ -4611,11 +4623,16 @@ Opis skupine + Standardna + Hitreje, manj podatkov + Visoka + Počasneje, več podatkov - Kvaliteta fotografije + + Kvaliteta medisjkih datotek Povabite svoje prijatelje_ice @@ -5105,6 +5122,32 @@ En ali več predmetov je bilo prevelikih En ali več predmetov je bilo neveljavnih Preveč izbranih predmetov + + Videoposnetek je nastavljen za enkratni ogled + + Fotografija je nastavljena za enkratni ogled + + Videoposnetek je nastavljen na visoko kakovost + + Videoposnetek je nastavljen na standardno kakovost + + Fotografija je nastavljena na visoko kakovost + + Fotografija je nastavljena na standardno kakovost + + + %1$d medij je nastavljen na visoko kakovost + %1$d medija sta nastavljena na visoko kakovost + %1$d mediji so nastavljeni na visoko kakovost + %1$d medijev je nastavljenih na visoko kakovost + + + + %1$d medij je nastavljen na standardno kakovost + %1$d medija sta nastavljena na standardno kakovost + %1$d mediji so nastavljeni na standardno kakovost + %1$d medijev je nastavljenih na standardno kakovost + Prekliči Riši @@ -5129,6 +5172,20 @@ Želite zavreči spremembe? Vse spremembe, narejene na tej fotografiji, bodo izgubljene. + + Najden_a: %1$s + + Začni klepetati s/z \"%1$s\" + + Pojdi na klepet + + + Poveži z napravo? + + Zdi se, da poskušate povezati napravo Signal. Tapnite Nadaljuj in znova poskenirajte kodo, da jo povežete. + + Nadaljuj + Moje značke Izpostavljene značke @@ -5227,7 +5284,7 @@ Plačilo v teku - Vaše bančno nakazilo v višini %1$s čaka. Dokončanje bančnih nakazil običajno traja 1 delovni dan. + Vaše bančno nakazilo v višini %1$s čaka. Bančna nakazila lahko trajajo od 1 do 14 delovnih dni. Preberite več @@ -6209,9 +6266,9 @@ Vaša donacija je na čakanju - Obdelava bančnih nakazil običajno traja 1 delovni dan. Počakajte, da se to plačilo zaključi, preden posodobite svojo naročnino. + Obdelava bančnih nakazil lahko traja od 1 do 14 delovnih dni. Počakajte, da se to plačilo zaključi, preden posodobite svojo naročnino. - Obdelava bančnih nakazil običajno traja 1 delovni dan. Prosimo, počakajte, da se to plačilo izvede, preden znova prispevate. + Obdelava bančnih nakazil lahko traja od 1 do 14 delovnih dni. Prosimo, počakajte, da se to plačilo izvede, preden znova prispevate. Vaša donacija je še v obdelavi. To lahko traja nekaj minut, odvisno od vaše povezave. Počakajte, da se to plačilo zaključi, preden posodobite svojo naročnino. @@ -6365,7 +6422,7 @@ Vaša enkratna donacija je na čakanju. Ko prejmemo vašo donacijo, boste lahko na svojem profilu prikazali značko %1$s. - Obdelava bančnih nakazil običajno traja 1 delovni dan. %1$s + Obdelava bančnih nakazil lahko traja od 1 do 14 delovnih dni. %1$s Preberite več @@ -6714,6 +6771,8 @@ Podrobnosti klica + + Uredi ime klica Dodaj ime klica @@ -6781,6 +6840,10 @@ Vaša QR koda in povezava sta bili ponastavljeni in ustvarjeni sta bili nova QR koda in povezava. S svojim telefonom skeniraj to QR kodo in klepetaj z mano na Signalu. + + QR koda ni bila najdena + + Poskusite skenirati drugo sliko, ki vsebuje Signalovo QR kodo. Vsakdo s to povezavo si lahko ogleda vaše uporabniško ime in začne klepet z vami. Delite jo samo z ljudmi, ki jim zaupate. @@ -6876,6 +6939,10 @@ %1$s ni uporabnik_ca Signala. Želite povabiti to številko? Povabi + + Skeniraj kodo QR + + Prišlo je do napake na omrežju. Poskusite spet kasneje. diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 5dbd6e923c..61e3ada5d0 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -88,9 +88,9 @@ Nuk gjendet një aplikacion për të përzgjedhur median. - Molly kërkon lejen e Storage për të bashkëngjitur foto, video ose audio, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menyja e cilësimeve të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Storage\". - Molly kërkon lejen e Kontakteve për të bashkangjitur informacionin e kontaktit, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menyja e cilësimeve të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Kontaktet\". - Molly kërkon lejen e Vendndodhjes për të bashkangjitur një vendndodhje, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menyja e cilësimeve të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Vendndodhja\". + Molly kërkon lejen e Storage për të bashkëngjitur foto, video ose audio, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menuja e parametrave të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Storage\". + Molly kërkon lejen e Kontakteve për të bashkangjitur informacionin e kontaktit, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menuja e parametrave të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Kontaktet\". + Molly kërkon lejen e Vendndodhjes për të bashkangjitur një vendndodhje, por i është refuzuar përgjithmonë. Ju lutemi, vazhdoni te menuja e parametrave të aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Vendndodhja\". %1$s nuk ka aktivizuar Pagesat @@ -390,13 +390,13 @@ Anuloje kërkesën Për të dërguar mesazhe audio, lejo qasjen e Molly-it në mikrofonin tënd. - Molly kërkon lejen e aktivizimit të Mikrofonit për të dërguar mesazhe audio, por është i mbyllur përgjithmonë. Ju lutemi, vazhdoni te cilësimet e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\". - Molly ka nevojë për lejet e aktivizimit të mikrofonit dhe të kamerës për të telefonuar%1$s, por janë mbyllur përgjithmonë. Ju lutemi, vazhdoni te cilësimet e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\" dhe \"Kamera\". + Molly kërkon lejen e aktivizimit të Mikrofonit për të dërguar mesazhe audio, por është i mbyllur përgjithmonë. Ju lutemi, vazhdoni te parametrat e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\". + Molly ka nevojë për lejet e aktivizimit të mikrofonit dhe të kamerës për të telefonuar%1$s, por janë mbyllur përgjithmonë. Ju lutemi, vazhdoni te parametrat e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\" dhe \"Kamera\". Për të bërë foto dhe video, lejo qasjen e Molly-it në kamerë. - Molly ka nevojë për lejen e aktivizimit të kamerës për të bërë foto ose video, por është i mbyllur përgjithmonë. Ju lutemi, vazhdoni te cilësimet e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Kamera\". + Molly ka nevojë për lejen e aktivizimit të kamerës për të bërë foto ose video, por është i mbyllur përgjithmonë. Ju lutemi, vazhdoni te parametrat e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Kamera\". Molly ka nevojë për lejet e aktivizimit të kamerës për të bërë foto ose video Aktivizo lejen e mikrofonit për të bërë video me zë. - Molly ka nevojë për lejet e aktivizimit të mikrofonit për të regjistruar video, por ato janë refuzuar. Ju lutemi, vazhdoni te cilësimet e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\" dhe \"Kamera\". + Molly ka nevojë për lejet e aktivizimit të mikrofonit për të regjistruar video, por ato janë refuzuar. Ju lutemi, vazhdoni te parametrat e aplikacionit, zgjidhni \"Lejet\" dhe aktivizoni \"Mikrofoni\" dhe \"Kamera\". Molly ka nevojë për lejet e aktivizimit të mikrofonit për të regjistruar video. %1$s %2$s @@ -426,6 +426,8 @@ Mesazhet SMS nuk mbështeten më në Signal. Mesazhet SMS nuk mbështeten më nga Signal. Fto %1$s te Signal për ta vazhduar bisedën këtu. + + Ky person nuk përdor më Molly. Ftoji në Molly për ta vazhduar bisedën këtu. Ftoje në Molly @@ -536,7 +538,7 @@ Mesazh i padëshiruar i raportuar - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal është njoftuar që ky person mund të jetë duke dërguar mesazhe të padëshiruara. Signal nuk mund të shohë përmbajtjen e asnjë bisede. Raportuar si mesazh i padëshiruar @@ -557,7 +559,7 @@ Mashtrime me para apo kripto - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Nëse merr mesazhe nga persona të cilët nuk i njeh në lidhje me kriptomonedha (si Bitcoin) apo me mundësi të tjera financiare, ki kujdes—pasi ka të ngjarë të jetë mashtrim. Mesazhe të paqarta ose të papërshtatshme @@ -715,7 +717,7 @@ %1$d deri më tani… %1$s%% deri më tani… - Që të mund të krijohen kopjeruajtje, Molly-i lyp leje mbi depozitë të jashtme, por kjo i është mohuar. Ju lutemi, kaloni te rregullime aplikacioni, përzgjidhni \"Leje\" dhe aktivizoni \"Depozitim\". + Që të mund të krijohen kopjeruajtje, Molly kërkon leje mbi depozitë të jashtme, por kjo i është mohuar. Ju lutemi, kaloni te parametrat e aplikacionit, përzgjidhni \"Leje\" dhe aktivizoni \"Depozitim\". Vendos kohën e kopjeruajtjes @@ -818,8 +820,8 @@ Shihni - Dështim i përhershëm komunikimi nga Signal! - Molly-i s\\’arriti të bëjë regjistrimin me Google Play Services. Mesashet dhe thirrjet Molly janë çaktivizuar, ju lutemi, provoni riregjistrimin që nga Rregullime > Të mëtejshme. + Dështim i përhershëm komunikimi nga Molly! + Molly s’arriti të bëjë regjistrimin me Google Play Services. Mesashet dhe thirrjet Molly janë çaktivizuar, ju lutemi, provoni riregjistrimin që nga Parametrat > Të mëtejshme. @@ -1120,7 +1122,7 @@ Përshtateni Ndryshoni tingull dhe dridhje - Rregullime thirrjeje + Parametrat e thirrjes Zile Parazgjedhje I panjohur @@ -1386,6 +1388,8 @@ %1$s ndryshoi emrin e tij te profili si %2$s. %1$s ndryshoi emrin e tij të profilit nga %2$s në %3$s. %1$s ndryshoi profilin e tij. + + Ke nisur bisedën me %1$s. E krijuat grupin. @@ -1483,12 +1487,12 @@ Te \"%1$s\" është ndryshuas se kush mund të përpunojë anëtarësi te grupi. - Ndryshuat rregullimet e grupit për të lejuar krejt anëtarët të dërgojnë mesazhe. - Ndryshuat rregullimet e grupit për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. - %1$s ndryshoi rregullimet e grupit për të lejuar krejt anëtarët të dërgojnë mesazhe. - %1$s ndryshoi rregullimet e grupit për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. - Rregullimet e grupit u ndryshuan për të lejuar krejt anëtarët të dërgojnë mesazhe. - Rregullimet e grupit u ndryshuan për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. + Ndryshuat parametrat e grupit për të lejuar krejt anëtarët të dërgojnë mesazhe. + Ndryshuat parametrat e grupit për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. + %1$s ndryshoi parametrat e grupit për të lejuar krejt anëtarët të dërgojnë mesazhe. + %1$s ndryshoi parametrat e grupit për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. + Parametrat e grupit u ndryshuan për të lejuar krejt anëtarët të dërgojnë mesazhe. + Parametrat e grupit u ndryshuan për të lejuar vetëm përgjegjësit të dërgojnë mesazhe. Aktivizuat lidhjen e grupit me miratim nga përgjegjësi të çaktivizuar. @@ -1675,7 +1679,7 @@ Të lidhet një pajisje Signal? Duket sikur po provoni të lidhni një pajisje Signal duke përdorur skaner të një pale të tretë. Si masë mbrojtëse, ju lutemi, riskanojeni kodin që nga brenda Signal-it. - Që të mund të skanojë një kod QR, Molly lyp leje përdorimi të Kamerës, por kjo i është mohuar. Ju lutemi, kaloni te rregullimet e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kamerën\". + Që të mund të skanojë një kod QR, Molly lyp leje përdorimi të Kamerës, por kjo i është mohuar. Ju lutemi, kaloni te parametrat e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kamerën\". S\\’arrihet të skanohet kod QR pa leje mbi Kamerën @@ -1707,21 +1711,21 @@ PIN i pasaktë Të anashkalohet dhënie PIN-i? Ju duhet ndihmë? - PIN-i juaj është një kod me %1$d ose më tepër shifra që krijuat dhe që mund të jetë numerik ose alfanumerik.\n\nNëse s\\’mbani mend PIN-in tuaj, mund të krijoni një të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga rregullimet e ruajtura, bie fjala, të dhënat e profilit tuaj. - Nëse s\\’mbani mend PIN-in tuaj, mund të krijoni një të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga rregullimet e ruajtura, bie fjala, të dhëna të profilit tuaj. + PIN-i juaj është një kod me %1$d ose më tepër shifra që krijuat dhe që mund të jetë numerik ose alfanumerik.\n\nNëse s’mbani mend PIN-in tuaj, mund të krijoni një të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga parametrat e ruajtura, bie fjala, të dhënat e profilit tuaj. + Nëse s’mbani mend PIN-in tuaj, mund të krijoni një të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga parametrat e ruajtura, bie fjala, të dhëna të profilit tuaj. Krijoni PIN të Ri Lidhuni Me Asistencën Anuloje Anashkaloje - Keni edhe %1$d provë. Nëse ju mbarohen provat, mund të krijoni një PIN të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga rregullimet e ruajtura, bie fjala, të dhënat e profilit tuaj. - Keni edhe %1$d prova. Nëse ju mbarohen provat, mund të krijoni një PIN të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga rregullimet e ruajtura, bie fjala, të dhënat e profilit tuaj. + Keni edhe %1$d provë. Nëse ju mbarohen provat, mund të krijoni një PIN të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga parametrat e ruajtura, bie fjala, të dhënat e profilit tuaj. + Keni edhe %1$d prova. Nëse ju mbarohen provat, mund të krijoni një PIN të ri. Mund të regjistroni dhe përdorni llogarinë tuaj, por do të humbni disa nga parametrat e ruajtura, bie fjala, të dhënat e profilit tuaj. Regjistrim Signal-i - Ju Duhet Ndihmë me PIN-in për Android Krijoni PIN-in tuaj - Ju janë mbaruar hamendësimet e PIN-it, por prapë mundë të hyni në llogarinë tuaj Signal duke krijuar një PIN të ri. Për hir të privatësisë dhe sigurisë tuaj, llogaria juaj do të rikthehet pa ndonjë të dhënë profili apo rregullime të ruajtura. + Ju janë mbaruar hamendësimet e PIN-it, por prapë mundë të hyni në llogarinë tuaj Signal duke krijuar një PIN të ri. Për hir të privatësisë dhe sigurisë tuaj, llogaria juaj do të rikthehet pa ndonjë të dhënë profili apo parametra të ruajtura. Krijoni PIN të ri @@ -1802,7 +1806,7 @@ Aktivizo lejen e \"Pajisjeve në afërsi\" për të përdorur Bluetooth gjatë një telefonate. - Hap cilësimet + Hap parametrat Jo tani @@ -1861,8 +1865,10 @@ I shkëputur Lidhja e thirrjes në Signal - - Kushdo që i bashkohet kësaj telefonate nëpërmjet lidhjes do të shohë emrin, fotografinë dhe numrin tënd të telefonit. + + Kushdo që i bashkohet kësaj telefonate nëpërmjet lidhjes do të shohë emrin, fotografinë dhe numrin tënd të telefonit. + + Kushdo që i bashkohet kësaj telefonate nëpërmjet lidhjes do të shohë emrin dhe foton tënde. Në pritje për të hyrë… @@ -2296,7 +2302,7 @@ Emri i përdoruesit u hoq me sukses. U has një gabim rrjeti. - Too many attempts made, please try again later. + Provo më vonë pasi ke bërë shumë tentativa. Ky emër përdoruesi është i zënë. Emrat e përdoruesve mund të përmbajnë vetëm a-Z, 0-9 dhe nënvija. Emrat e përdoruesve nuk mund të fillojnë me numër. @@ -2320,7 +2326,7 @@ Numri nuk mund të jetë 00. Vendos një shifër nga 1-9 - Numbers with more than 2 digits can\'t start with 0 + Numrat me më shumë se 2 shifra nuk mund të fillojnë me 0 Rivendosja e emrit të përdoruesit do të rivendosë edhe kodin QR me lidhjen ekzistuese. Je i sigurt? @@ -2344,7 +2350,7 @@ Numri ynë i sigurisë për Signal: Duket se s\\’keni ndonjë aplikacion me të cilin të ndahet. Në të papastër s\\’u gjet numër sigurie për krahasim - Që të mund të skanojë një kod QR, Molly-i lyp leje përdorimi të Kamerës, por kjo i është mohuar. Ju lutemi, kaloni te rregullimet e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kamera\". + Që të mund të skanojë një kod QR, Molly kërkon leje përdorimi të Kamerës, por kjo i është mohuar. Ju lutemi, kaloni te parametrat e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kamera\". S\\’arrihet të skanohet kodi QR pa lejim të kamerës You must first exchange messages Që të mund të shihni numrin e sigurisë për %1$s, së pari duhet të shkëmbeni mesazhe. @@ -2381,7 +2387,7 @@ Ju Lloj media i pambuluar Skicë - Për të ruajtur gjëra në depozitë të jashtme, Molly-i lyp leje Depozitimi, por kjo i është mohuar. Ju lutemi, kaloni te rregullimet e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Depozitim\". + Për të ruajtur gjëra në depozitë të jashtme, Molly kërkon leje Depozitimi, por kjo i është mohuar. Ju lutemi, kaloni te parametrat e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Depozitim\". S\\’bëhet dot ruajtje në depozitë të jashtme pa leje Të fshihet mesazhi? Kjo do ta fshijë përgjithmonë këtë mesazh. @@ -2447,7 +2453,7 @@ Reagoi me %1$s ndaj ngjitësit tënd. Ky mesazh u fshi. - Të çaktivizohen njoftime Signal për kontakte të sapoardhur? Mund t\\’i aktivizoni sërish që nga Signal > Rregullime > Njoftime. + Të çaktivizohen njoftime Signal për kontakte të sapoardhur? Mund t’i aktivizoni sërish që nga Signal > Parametrat > Njoftime. @@ -2473,7 +2479,7 @@ I panjohur Shënime Zanore Kontakti zuri të përdorë Signal-in - S\\’ka veprimtari për hapje rregullimesh kanali njoftimesh. + Nuk ofrohet asnjë aktivitet për të hapur parametrat e kanalit të njoftimeve. Lidhje në prapaskenë @@ -2568,7 +2574,7 @@ Që t’i përgjigjeni thirrjes, jepini Molly-it leje të përdorë mikrofonin tuaj. Që t\'i përgjigjesh thirrjes me video, jepi leje Molly të përdorë mikrofonin dhe kamerën. - Që të bëjë ose pranojë thirrje, Molly-i lyp leje mbi Mikrofonin dhe Kamerën, por këto i janë mohuar. Ju lutemi, kaloni te rregullimet e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Mikrofonin\" dhe \"Kamerën\". + Që të bëjë ose pranojë thirrje, Molly kërkon leje mbi Mikrofonin dhe Kamerën, por këto i janë mohuar. Ju lutemi, kaloni te parametrat e aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Mikrofonin\" dhe \"Kamerën\". U përgjigj në një pajisje të lidhur. Hedhur tej në një pajisje të lidhur. I zënë në një pajisje të lidhur. @@ -2635,7 +2641,7 @@ Foto Kontakti - Që të mund të shfaqë kontaktet tuaja, Molly-i lyp leje mbi Kontaktet, por këto i janë mohuar. Ju lutemi, kaloni te menuja e rregullimeve të aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kontakte\". + Që të mund të shfaqë kontaktet tuaja, Molly kërkon leje mbi Kontaktet, por këto i janë mohuar. Ju lutemi, kaloni te menuja e parametrave të aplikacionit, përzgjidhni \"Leje\", dhe aktivizoni \"Kontakte\". Gabim në marrje kontaktesh, kontrolloni lidhjen tuaj në rrjet Emri i përdoruesit nuk u gjet "\"%1$s\" nuk është përdorues i Signal Ju lutemi, kontrollo emrin e përdoruesit dhe riprovo." @@ -2777,11 +2783,11 @@ Tani gjithçka duket në rregull! Për të marrë njoftime thirrjesh, prekeni këtu dhe aktivizoni “Shfaq njoftime”. Për të marrë njoftime thirrjes, prekeni këtu dhe aktivizoni njoftimet dhe sigurohuni se Tinguj dhe Flluska janë të aktivizuara. - Për të marrë njoftime thirrjesh, prekeni këtu dhe aktivizoni veprimtari në prapaskenë, te rregullimet e “Baterisë”. - Rregullime - Për të marrë njoftime thirrjesh, prekni Rregullime dhe aktivizoni “Shfaq njoftime”. - Për të marrë njoftime thirrjes, prekni Rregullime dhe aktivizoni njoftimet dhe sigurohuni se Tinguj dhe Flluska janë të aktivizuara. - Për të marrë njoftime thirrjesh, prekni Rregullime dhe aktivizoni veprimtari në prapaskenë, te rregullimet e “Baterisë”. + Për të marrë njoftime thirrjesh, prekeni këtu dhe aktivizoni veprimtari në prapaskenë, te parametrat e “Baterisë”. + Parametrat + Për të marrë njoftime thirrjesh, prekni parametrat dhe aktivizoni “Shfaq njoftime”. + Për të marrë njoftime thirrjes, prekni parametrat dhe aktivizoni njoftimet dhe sigurohuni se Tinguj dhe Flluska janë të aktivizuara. + Për të marrë njoftime thirrjesh, kliko parametrat dhe aktivizoni veprimtari në prapaskenë, te parametrat e “Baterisë”. Po ngarkohen vende… @@ -2887,8 +2893,8 @@ Zhbllokoje - Që të shpërndajë media dhe mesazhe grupi përmes shërbimit tuaj celular, Signal-i lyp rregullime për MMS-në. Pajisja juaj celulare nuk ofron të dhëna të tilla, çka ndodh, me raste, për pajisje të kyçura ose formësimeve të tjera kufizuese. - Për të dërgua media dhe mesazhe grupi, prekni \'OK\' dhe plotësoni rregullimet e domosdoshme. Rregullimet MMS për operatorin tuaj zakonisht mund të gjenden duke kërkuar për \'APN-në e operatorit tuaj\'. Këtë do t\\’ju duhet ta bëni vetëm një herë. + Që të shpërndajë media dhe mesazhe grupi përmes shërbimit tuaj celular, Signal kërkon parametrat për MMS-në. Pajisja juaj celulare nuk ofron të dhëna të tilla, çka ndodh, me raste, për pajisje të kyçura ose formësimeve të tjera kufizuese. + Për të dërgua media dhe mesazhe grupi, prekni \'OK\' dhe plotësoni parametrat e domosdoshme. Parametrat MMS për operatorin tuaj zakonisht mund të gjenden duke kërkuar për \'APN-në e operatorit tuaj\'. Këtë do t’ju duhet ta bëni vetëm një herë. Problem Dërgimi @@ -3050,7 +3056,7 @@ Hiqi zërin për 7 ditë Përherë - Rregullime parazgjedhje + Parametrat parazgjedhje E aktivizuar E çaktivizuar @@ -3133,7 +3139,7 @@ Postime të përkohshme Agjent Përdoruesi MMS - Rregullime dorazi për MMS-në + Parametrat dorazi për MMS-në URL MMSC Strehë Ndërmjetësi MMS Portë Ndërmjetësi MMS @@ -3178,11 +3184,11 @@ Çaktivizoje PIN-in Aktivizoje PIN-in Nëse çaktivizoni PIN-in, do të humbni krejt të dhënat, kur riregjistroni Signal-in, veç në i kopjeruajtshi dhe rikthefshi dorazi. S\\’mund të aktivizoni Kyçje Regjistrimi, teksa PIN-i është i çaktivizuar. - PIN-et i mbajnë të fshehtëzuara të dhëna e depozituara me Signal, që kështu të mund t\\’i përdorni. Profili, rregullimet dhe kontaktet tuaja do të rikthehen, kur të riinstaloni Signal-in. S\\’do t\\’ju duhet PIN-i për të hapur aplikacionin. + PIN-et i mbajnë të koduara të dhëna e depozituara me Signal, që kështu të mund t’i përdorni. Profili, parametrat dhe kontaktet tuaja do të rikthehen, kur të riinstaloni Signal. S’do t’ju duhet PIN-i për të hapur aplikacionin. Parazgjedhje sistemi Gjuhë Mesazhe dhe thirrje Signal - Rregullimet të mëtejshme PIN-i + Parametrat e mëtejshme të PIN Mesazhe dhe thirrje falas drejt përdoruesish të Signal-it Parashtro regjistër diagnostikimi Fshije llogarinë @@ -3278,7 +3284,7 @@ U lidh te ndërmjetësi Lidhja dështoi S\\’u lidh dot te ndërmjetësi. Kontrolloni adresën e ndërmjetësit dhe riprovoni. - Jeni i lidhur te ndërmjetësi. Ndërmjetësin mund ta çaktivizoni në çfarëdo kohe, që nga Rregullimet. + Jeni i lidhur te ndërmjetësi. Ndërmjetësin mund ta çaktivizoni në çfarëdo kohe, që nga parametrat. Sukses S\\’u arrit të lidhej Jepni adresë ndërmjetësi @@ -3453,9 +3459,9 @@ Kontrolloni adresën e portofolit që po përpiqeni të shpërngulni dhe riprovoni. S\\’mund të shpërngulni te adresa e portofolit tuaj Molly. Jepni adresën e portofolit prej llogarisë tuaj në një platformë që mbulohet. Që të skanohet një kod QR, Molly-i ka nevojë të përdorë kamerën. - Molly-it i duhen leje përdorimi Kamere për të marrë një kod QR. Kaloni te rregullimet, përzgjidhni “Leje”, dhe aktivizoni “Kamera”. + Molly i duhet leje përdorimi Kamere për të marrë një kod QR. Kaloni te parametrat, përzgjidhni “Leje”, dhe aktivizoni “Kamera”. Që të skanohet një kod QR, Molly-i ka nevojë të përdorë kamerën. - Rregullime + Parametrat Skanoni Kod QR Adrese @@ -3506,7 +3512,7 @@ Ke aktivizuar kyçjen e pagesës te parametrat, por nuk mund të shfaqet. - Shko te cilësimet + Shko te parametrat Ky person s\\’ka aktivizuar pagesa S\\’arrihet të kërkohet një tarifë rrjeti. Për të vazhduar këtë pagesë, prekni OK, që të riprovohet. @@ -3584,7 +3590,7 @@ - Shkurtore rregullimesh + Shkurtore parametrash Kërko E fiksuar Bisedat @@ -3611,7 +3617,7 @@ Heshti njoftimet - Rregullime grupi + Parametrat e grupit Braktise grupin Krejt mediat Parametrat e bisedës @@ -3644,7 +3650,7 @@ Grup i ri - Rregullime + Parametrat Kyçe Shënoji krejt si të lexuar Ftoni shokë @@ -3721,7 +3727,7 @@ Ju paraqesim PIN-et - PIN-et i mbajnë të fshehtëzuara të dhëna e depozituara me Signal, që kështu të mund t\\’i përdorni vetëm ju. Profili, rregullimet dhe kontaktet tuaja do të rikthehen, kur të riinstaloni Signal-in. S\\’do t\\’ju duhet PIN-i për të hapur aplikacionin. + PIN-et i mbajnë të koduara të dhëna e depozituara me Signal, që kështu të mund t’i përdorni vetëm ju. Profili, parametrat dhe kontaktet tuaja do të rikthehen, kur të riinstaloni Signaln. S’do t’ju duhet PIN-i për të hapur aplikacionin. Mësoni Më Tepër Kyçje Regjistrimi = PIN @@ -3894,6 +3900,12 @@ Askush nuk do të shohë se je në Signal nëse nuk dërgon mesazhe ose nëse nuk ke biseda ekzistuese. "Për ta ndryshuar këtë parametër, zgjidh opsionin \"Askush\" te kategoria \"Kush mund ta shohë numrin tim\"." + + Je i sigurt? + + Vendosja e parametrit \"Kush mund të më gjejë nëpërmjet numrit\" në \"Askush\" do ta bëjë më të vështirë që njerëzit të të gjejnë në Signal. + + Anulo Cilido Askush Kyçje ekrani @@ -3955,7 +3967,7 @@ Hapni Signal-in në telefonin tuaj të vjetër Android Vazhdo 1. - Prekni mbi foton e profilit tuaj në cepin e majtë sipër, që të hapen Rregullimet + Prekni mbi foton e profilit tuaj në cepin e majtë sipër, që të hapen parametrat 2. "Prekni mbi “Llogari”" 3. @@ -3982,7 +3994,7 @@ Ndodhi një gabim i papritur teksa provohej të lidhej me pajisjen tuaj të re Android. - S\\’arrihet të hapen Rregullime Wi-Fi. Ju lutemi, hapeni dorazi Wi-Fi-n. + S’arrihet të hapen parametrat e Wi-Fi. Ju lutemi, hapeni dorazi Wi-Fi-n. Akordoni leje vendndodhjesh Aktivizoni shërbime vendndodhjesh Hapni Wi-Fi @@ -4188,8 +4200,8 @@ Numri i telefonit që dhatë nuk përputhet me atë të llogarisë tuaj. Je i sigurt që do të të fshihet llogaria? Kjo do të të fshijë llogarinë Signal dhe do të kthejë aplikacionin te parazgjedhjet. Aplikacioni do të mbyllet pasi të plotësohet procesi. - Nuk u fshinë dot të dhënat vendore. Mund t’i spastroni dorazi, që nga rregullimet e sistemit. - Hap Rregullime Aplikacioni + Nuk u fshinë dot të dhënat vendore. Mund t’i spastroni dorazi, që nga parametrat e sistemit. + Hap parametrat e aplikacionit Po braktisen grupe… @@ -4391,11 +4403,16 @@ Përshkrim grupi + Standard + Më i shpejtë, më pak të dhëna + Lartësi + Më i ngadaltë, më tepër të dhëna - Cilësi fotografie + + Cilësi media Ftoni shokët tuaj @@ -4871,6 +4888,28 @@ Një ose më tepër objekte qenë shumë të mëdhenj Një ose më tepër objekte qenë të pavlefshëm Shumë objekte të përzgjedhur + + Videoja është vendosur për t\'u parë vetëm një herë + + Foto e vendosur për t\'u parë vetëm një herë + + Video e vendosur në cilësi të lartë + + Video e vendosur në cilësi standarde + + Foto e vendosur në cilësi të lartë + + Foto e vendosur në cilësi standarde + + + %1$d artikull u vendos në cilësi të lartë + %1$d artikuj u vendosën në cilësi të lartë + + + + %1$d artikull u vendos në cilësi standarde + %1$d artikuj u vendosën në cilësi standarde + Anuloje Vizatoni @@ -4895,6 +4934,20 @@ Të hidhen tej ndryshimet? Do të humbni çfarëdo ndryshimi që bëtë te kjo foto. + + U gjet %1$s + + Fillo një bisedë me \"%1$s\" + + Kalo te biseda + + + Të lidhet pajisja? + + Me sa duket, po përpiqesh të lidhësh një pajisje Signal. Kliko \"vazhdo\" and skano sërish kodin për ta lidhur. + + Vazhdo + Distinktivët e mi Distinktiv i zgjedhur @@ -4993,7 +5046,7 @@ Pagesa në pritje - Transferta bankare prej %1$s është në pritje. Kryerja e transfertave bankare zgjat zakonisht 1 ditë pune. + Transferta bankare prej %1$s është në pritje. Transfertat bankare mund të zgjasin 1 deri në 14 ditë pune për të përfunduar. Mëso më shumë @@ -5285,7 +5338,7 @@ Mund ta aktivizosh ose çaktivizosh profilin tënd manualisht nëpërmjet menusë në listën e bisedave. - Shtoni te rregullimet një orar, që të automatizohet profili juaj. + Shtoni te parametrat një orar, që të automatizohet profili juaj. Profili juaj do të aktivizohet dhe çaktivizohet automatikisht sipas orarit tuaj. @@ -5296,7 +5349,7 @@ Deri më %1$s - Shihni rregullimet + Shiko parametrat Aktiv deri më %1$s @@ -5439,7 +5492,7 @@ Aktivizo leximin e mesazheve për të parë se kush i ka parë postimet e tua të përkohshme. - Shko te cilësimet + Shko te parametrat Fshije @@ -5923,9 +5976,9 @@ Kliko butonin \"Shko te parametrat\" - Aktivizo \"Lejo alarmet dhe rikujtuesit\". + Aktivizo \"Lejo parametrat e alarmeve dhe rikujtuesve\". - Shko te cilësimet + Shko te parametrat @@ -5937,9 +5990,9 @@ Ke një dhurim në pritje - Përpunimi i transfertave bankare zgjat zakonisht 1 ditë pune. Të lutem, prit derisa të përfundojë kjo pagesë përpara se të përditësosh abonimin tënd. + Përpunimi i transfertave bankare mund të zgjasë nga 1 deri në 14 ditë pune. Para se të përditësosh abonimin, prit derisa të përfundojë pagesa. - Përpunimi i transfertave bankare zgjat zakonisht 1 ditë pune. Të lutem, prit derisa të përfundojë kjo pagesë përpara se të bësh një dhurim tjetër. + Përpunimi i transfertave bankare mund të zgjasë nga 1 deri në 14 ditë pune. Para se të bësh dhurim tjetër, prit derisa të përfundojë kjo pagesë. Dhurimi është ende duke u përpunuar. Kjo mund të zgjasë disa minuta në varësi të lidhjes. Para se të përditësosh abonimin, prit derisa të përfundojë pagesa. @@ -6091,7 +6144,7 @@ Dhurimi që bëhet një herë të vetme është në pritje. Distinktivi do të shfaqet %1$s në profil kur të merret dhurimi. - Përpunimi i transfertave bankare zgjat zakonisht 1 ditë pune. %1$s + Përpunimi i transfertave bankare mund të zgjasë nga 1 deri në 14 ditë pune. %1$s Mëso më shumë @@ -6287,7 +6340,7 @@ Pastro filtrin - Cilësimet + Parametrat Profili i njoftimit @@ -6432,6 +6485,8 @@ Detajet e thirrjes + + Përpuno emrin e telefonuesit Shto emrin e thirrjes @@ -6499,6 +6554,10 @@ Lidhja dhe kodi QR janë rivendosur dhe është krijuar lidhje dhe kod QR i ri. Skano kodin QR nga telefoni për të biseduar me mua në Signal. + + Kodi QR nuk u gjet + + Provo të skanosh një imazh tjetër që përmban kodin QR të Signal. Kushdo që e ka këtë lidhje mund të shikojë emrin tënd të përdoruesit dhe të fillojë një bisedë me ty. Ndaje vetëm me njerëzit e besueshëm. @@ -6590,6 +6649,10 @@ %1$s nuk është përdorues i Signal. Dëshiron të ftosh këtë numër? Fto + + Skanoni kodin QR + + U has një gabim rrjeti. Riprovoni më vonë. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index ecfe1117de..54fdbfada3 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -426,6 +426,8 @@ Размена SMS порука више није подржана у Signal-у. Размена SMS порука више није подржана у Signal-у. %1$s може да се придружи у Signal-у како бисте наставили конверзацију овде. + + Ова особа више не користи Molly. Позовите је на Molly како бисте наставили разговор овде. Позивница за Molly @@ -818,7 +820,7 @@ Више - Трајни неуспех комуникације Signal-a! + Трајни неуспех комуникације Molly-a! Molly није успео да се пријави на Гуглов Плеј сервис. Комуникација преко канала података је онемогућена, покушајте поново да се пријавите преко Поставке > Напредно. @@ -1386,6 +1388,8 @@ %1$s је променио/ла име на профилу на %2$s. %1$s је променио/ла име на профилу са %2$s на %3$s. %1$s су променили профил. + + Започели сте ово ћаскање са корисником %1$s. Направили сте групу. @@ -1861,8 +1865,10 @@ Прекинуто Линк за позив преко Signal-а - - Свако ко се придружи овом позиву преко линка видеће ваше име, фотографију и број телефона. + + Свако ко се придружи овом позиву преко линка видеће ваше име, фотографију и број телефона. + + Свако ко се придружи овом позиву преко линка видеће ваше име и слику. Чека се потврда за улазак… @@ -2296,7 +2302,7 @@ Корисничко име уклоњено. Дошло је до грешке мреже. - Too many attempts made, please try again later. + Имали сте превише покушаја. Пробајте поново касније. Ово корисничко име је заузето. Корисничко име може да садржи a-Z, 0-9 и _ Корисничко име не може започети бројем. @@ -3747,7 +3753,7 @@ - Унесите ваш PIN + Унесите PIN Унесите PIN вашег налога. Ово није исто што и ваш SMS верификациони кôд. Унесите PIN који сте креирали за свој налог. @@ -3894,6 +3900,12 @@ Ниједан корисник неће моћи да види да сте на Signal-у док му не пошаљете поруку или ако већ немате постојеће ћаскање са њим. "Да бисте променили ово подешавање, подесите опцију „Ко може да види мој број“ на „Нико“." + + Да ли сте сигурни? + + Ако подесите „Ко може да ме пронађе по броју“ на „Нико“, људима ће бити теже да вас пронађу на Signal-у. + + Откажи Сви никога Закључавање екрана @@ -4391,11 +4403,16 @@ Опис групе + Стандардно + Брже, мање података + Висок + Спорије, више података - Квалитет фотографије + + Квалитет медија Позовите ваше пријатеље @@ -4871,6 +4888,28 @@ Jedna ili više stavki su prevelike Jedna ili više stavki su nevažeće Previše stavki je izabrano + + Видео је подешен на једнократно гледање + + Слика је подешена на једнократно гледање + + Видео је подешен на висок квалитет + + Видео је подешен на стандардни квалитет + + Слика је подешена на висок квалитет + + Слика је подешена на стандардни квалитет + + + Ставки подешених на висок квалитет: %1$d + Ставки подешених на висок квалитет: %1$d + + + + Ставки подешених на стандардни квалитет: %1$d + Ставки подешених на стандардни квалитет: %1$d + Поништи Нацртај @@ -4895,6 +4934,20 @@ Одбацити промене? Изгубићете све промене које сте направили на овој фотографији. + + Пронађен је корисник %1$s + + Започните ћаскање са корисником „%1$s“ + + Идите на ћаскање + + + Желите ли да повежете уређај? + + Изгледа да покушавате да повежете уређај на ком је инсталиран Signal. Додирните „Настави“ и поново скенирајте код да бисте га повезали. + + Настави + Моје значке Истакнута значка @@ -4993,7 +5046,7 @@ Уплата је на чекању - Ваш банковни од %1$s пренос је на чекању. Банковни преноси обично трају 1 радни дан. + Ваш банковни пренос од %1$s је на чекању. Банковни преноси могу да потрају од 1 до 14 радних дана. Сазнајте више @@ -5937,9 +5990,9 @@ Већ имате донацију на чекању - Обрада банковних преноса обично траје 1 радни дан. Сачекајте да се ова уплата заврши пре него што ажурирате претплату. + Обрада банковних преноса може да потраје од 1 до 14 радних дана. Сачекајте да се ово плаћање заврши пре него што ажурирате претплату. - Обрада банковних преноса обично траје 1 радни дан. Сачекајте да се ова уплата заврши пре него што дате другу донацију. + Обрада банковних преноса може да потраје од 1 до 14 радних дана. Сачекајте да се ова уплата заврши пре него што дате другу донацију. Ваша донација се и даље обрађује. То може потрајати неколико минута у зависности од ваше везе. Сачекајте да се ова уплата заврши пре него што ажурирате претплату. @@ -6091,7 +6144,7 @@ Ваша једнократна донација је на чекању. Моћи ћете да прикажете значку %1$s на свом профилу када донација буде примљена. - Обрада банковних преноса обично траје 1 радни дан. %1$s + Обрада банковних преноса може да потраје од 1 до 14 радних дана. %1$s Сазнајте више @@ -6432,6 +6485,8 @@ Детаљи позива + + Измените назив позива Унесите назив позива @@ -6499,6 +6554,10 @@ Ваш QR код и линк су ресетовани и креирани су нови QR код и линк. Скенирај овај QR код телефоном да ћаскаш са мном на Signal-у. + + QR код није пронађен + + Пробајте да скенирате другу слику која садржи QR код за Signal. Свако ко има овај линк може видети ваше корисничко име и започети ћаскање с вама. Делите га само с људима којима верујете. @@ -6590,6 +6649,10 @@ %1$s није корисник Signal-а. Желите ли да пошаљете позивницу овом броју? Пошаљи позивницу + + Скенирајте QR кôд + + Дошло је до грешке мреже. Покушајте поново касније. diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 3885c16db9..48d9983e31 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -426,6 +426,8 @@ Sms-meddelanden stöds inte längre i Signal. Sms-meddelanden stöds inte längre i Signal. Bjud in %1$s till Signal för att hålla konversationen här. + + Den här personen använder inte längre Molly. Bjud in dem till Molly för att hålla konversationen här. Bjud in till Molly @@ -818,7 +820,7 @@ Visa - Permanent kommunikationsfel med Signal! + Permanent kommunikationsfel med Molly! Molly kunde inte registrera sig på Google Play-tjänster. Molly-meddelanden och -samtal har inaktiverats, försök att återregistrera i Inställningar > Avancerat. @@ -1386,6 +1388,8 @@ %1$s ändrade sitt profilnamn till %2$s. %1$s ändrade sitt profilnamn från %2$s till %3$s. %1$s ändrade sin profil. + + Du startade den här chatten med %1$s. Du skapade gruppen. @@ -1861,8 +1865,10 @@ Frånkopplad Signal-samtalslänk - - Alla som använder länken för att gå med i detta samtal kommer att se ditt namn, foto, och telefonnummer. + + Alla som använder länken för att gå med i detta samtal kommer att se ditt namn, foto, och telefonnummer. + + Alla som ansluter sig till detta samtal via länken kommer att se ditt namn och foto. Väntar på att släppas in … @@ -2296,7 +2302,7 @@ Användarnamn borttaget. Stött på ett nätverksfel. - Too many attempts made, please try again later. + För många försök har gjorts. Försök igen senare. Detta användarnamn är taget. Användarnamn kan bara innehålla a–Z, 0–9 och understreck. Användarnamn kan inte börja med en siffra. @@ -3894,6 +3900,12 @@ Ingen kommer att kunna se att du är på Signal om du inte skickar ett meddelande eller har en befintlig chatt med dem. "Om du vill ändra den här inställningen ställer du in Vem kan se mitt nummer till Ingen." + + Är du säker? + + Om du ställer in \"Vem kan hitta mig med nummer\" till \"Ingen\" blir det svårare för andra att hitta dig på Signal. + + Avbryt Alla Ingen Skärmlås @@ -4391,11 +4403,16 @@ Gruppbeskrivning + Standard + Snabbare, mindre data + Hög + Långsammare, mera data - Fotokvalitet + + Mediekvalitet Bjud in dina vänner @@ -4871,6 +4888,28 @@ Ett eller flera objekt var för stora Ett eller flera objekt var ogiltiga För många objekt valda + + Video inställd för att visas en gång + + Photo set to view once + + Video inställd på hög kvalitet + + Video inställd på standardkvalitet + + Foto inställt på hög kvalitet + + Foto inställt på standardkvalitet + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Avbryt Dra @@ -4895,6 +4934,20 @@ Kassera ändringar? Du förlorar alla ändringar du har gjort på detta foto. + + Hittade %1$s + + Starta en chatt med \"%1$s\" + + Gå till chatt + + + Länka enhet? + + Det verkar som om du försöker länka en Signal-enhet. Tryck på fortsätt och skanna koden igen för att länka den. + + Fortsätt + Mina märken Presenterat märke @@ -4993,7 +5046,7 @@ Betalning väntar - Din banköverföring på %1$s väntar. Banköverföringar tar vanligtvis 1 arbetsdag att slutföra. + Din banköverföring på %1$s väntar. Banköverföringar kan ta 1 till 14 arbetsdagar att genomföra. Läs mer @@ -5937,9 +5990,9 @@ Du har en väntande donation - Banköverföringar tar vanligtvis 1 arbetsdag att bearbeta. Vänta tills denna betalning slutförs innan du uppdaterar ditt abonnemang. + Banköverföringar kan ta 1 till 14 arbetsdagar att bearbeta. Vänta tills denna betalning slutförs innan du uppdaterar ditt abonnemang. - Banköverföringar tar vanligtvis 1 arbetsdag att bearbeta. Vänta tills denna betalning slutförs innan du gör en ny donation. + Banköverföringar kan ta 1 till 14 arbetsdagar att bearbeta. Vänta tills denna betalning slutförs innan du gör en ny donation. Din donation bearbetas fortfarande. Detta kan ta några minuter beroende på din anslutning. Vänta tills denna betalning slutförs innan du uppdaterar ditt abonnemang. @@ -6091,7 +6144,7 @@ Din engångsdonation väntar. Du kommer att kunna visa %1$s-märket på din profil när din donation tas emot. - Banköverföringar tar vanligtvis 1 arbetsdag att bearbeta. %1$s + Banköverföringar kan ta 1 till 14 arbetsdagar att bearbeta. %1$s Läs mer @@ -6432,6 +6485,8 @@ Samtalsuppgifter + + Redigera samtalsnamn Lägg till samtalsnamn @@ -6499,6 +6554,10 @@ Din QR-kod och länk har återställts och en ny QR-kod och länk har skapats. Skanna denna QR-kod med din telefon för att chatta med mig på Signal. + + QR-koden hittades inte + + Försök att skanna en annan bild som innehåller en QR-kod från Signal. Alla med denna länk kan se ditt användarnamn och starta en chatt med dig. Dela den bara med personer du litar på. @@ -6590,6 +6649,10 @@ %1$s är inte en Signal-användare. Vill du bjuda in det här numret? Bjud in + + Skanna QR-kod + + Påträffade ett nätverksfel. Försök igen senare. diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index 6bba62fb23..f196a0f482 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -426,6 +426,8 @@ Huwezi tena kutuma jumbe za SMS kwenye Signal. Huwezi tena kutuma jumbe za SMS kwenye Signal. Mkaribishe %1$s Signal ili kuendeleza mazungumzo hapa. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Mwalike kwenye Molly @@ -536,7 +538,7 @@ Spam imeripotiwa - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal imetaarifiwa kuwa mtu huyu anaweza kuwa anakutumia spam. Signal haiwezi kuona maudhui ya gumzo lolote. Imeripotiwa kuwa spam @@ -557,7 +559,7 @@ Ulaghai wa crypto au fedha - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Iwapo mtu usiyemfahamu atakutumia ujumbe kuhusu sarafu ya dijitali (kama vile Bitcoin) au fursa ya kifedha, kuwa makini—inawezekana ni ulaghai. Jumbe zisizoeleweka au zisizohusiana @@ -818,7 +820,7 @@ Tazama - Muda wote mawasiliano ya Signal yanafeli! + Muda wote mawasiliano ya Molly yanafeli! Molly haikuweza kujisajili na Huduma za Google Play. Ujumbe wa Molly na simu zimezimwa, tafadhali jaribu kujiandikisha katika Mipangilio > Zaidi. @@ -1386,6 +1388,8 @@ %1$s amebadilisha jina la wasifu wake kuwa %2$s. %1$s amebadilisha jina la wasifu wake kutoka%2$s kuwa %3$s. %1$s amebadilisha wasifu wake. + + You started this chat with %1$s. Uliunda kundi @@ -1861,8 +1865,10 @@ Tenganisha Kiungo cha simu ya Signal - - Yeyote atakayejiunga kwenye simu hii kupitia kiungo ataona jina, picha na nambari yako ya simu. + + Yeyote atakayejiunga kwenye simu hii kupitia kiungo ataona jina, picha na nambari yako ya simu. + + Yeyote anayetaka kujiunga kwenye simu hii kupitia kiungo ataona jina lako na picha yako. Unasubiri kuruhusiwa… @@ -2296,7 +2302,7 @@ Jina la mtumiaji limeondolewa kwa mafanikio. Imekumbana na hitilafu ya mtandao. - Too many attempts made, please try again later. + Umefanya majaribio mengi, tafadhali jaribu tena baadae. Jina hili la mtumiaji limechukuliwa. Majina ya watumiaji yanaweza kujumuisha tu herufi za A hadi Z, nambari za 0 hadi 9, na vistari-chini. Majina ya watumiaji hayawezi kuanza kwa nambari. @@ -2320,7 +2326,7 @@ Nambari hii haiwezi kuwa 00. Ingiza tarakimu kati ya 1–9 - Numbers with more than 2 digits can\'t start with 0 + Nambari zenye tarakimu zaidi ya mbili haziwezi kuanza na 0 Kurejesha jina lako la mtumiaji kutaweka upya mipangilio ya code ya QR na kiungo kilichopo. Una uhakika? @@ -3894,6 +3900,12 @@ Hakuna atakayeweza kuona kuwa upo Signal isipokuwa utakapowatumia ujumbe au tayari una gumzo nao. "Ili kubadili mpangilio huu, badili Nani anayeona nambari yangu kuwa Hakuna Yeyote." + + Una uhakika? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Ghairi Kila mtu Hakuna mtu Kifunga skrini @@ -4391,11 +4403,16 @@ Maelezo ya kikundi + Kiwango + Haraka zaidi, kiasi kidogo cha data + Juu + Polepole zaidi, data nyingi zaidi - Ubora wa picha + + Ubora wa Media Waalike marafiki zako @@ -4871,6 +4888,28 @@ Kitu kimoja au zaidi vilikuwa vikubwa sana Kitu kimoja au zaidi vilikuwa batili Vitu vingi zaidi vimechaguliwa + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + Ghairi Chora @@ -4895,6 +4934,20 @@ Ondoa mabadiliko? Utapoteza mabadiliko yoyote uliyofanya kwenye picha hii. + + Found %1$s + + Start a chat with \"%1$s\" + + Enda kwenye gumzo + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Endelea + Beji zangu Beji inayoangaziwa @@ -4993,7 +5046,7 @@ Malipo yanasubiri - Uhamisho wako wa benki wa %1$s unasubiri. Uhamisho wa benki kwa kawaida huchukua siku 1 ya kazi kukamilika. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Jifunze zaidi @@ -5937,9 +5990,9 @@ Una mchango haujatolewa bado - Uhamisho wa benki kwa kawaida huchukua siku 1 ya kazi kuchakatwa. Tafadhali subiri hadi malipo haya yatakapokamilika kabla hujasasisha usajili wako. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Uhamisho wa benki kwa kawaida huchukua siku 1 ya kazi kuchakatwa. Tafadhali subiri hadi malipo haya yatakapokamilika kabla hujatoa mchango mwingine. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Mchango wako bado unachakatwa. Hii inaweza kuchukua dakika kadhaa kutegemeana na mtandao wako. Tafadhali subiri hadi malipo haya yatakapokamilika kabla hujasasisha usajili wako. @@ -6091,7 +6144,7 @@ Mchango wako wa mara moja unasubiri. Utaweza kuonyesha beji ya %1$s kwenye wasifu wako mchango wako utakapopokelewa. - Uhamisho wa benki kwa kawaida huchukua siku 1 ya kazi kuchakatwa. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Jifunze zaidi @@ -6432,6 +6485,8 @@ Taarifa za simu + + Hariri jina la simu Ongeza jina la simu @@ -6499,6 +6554,10 @@ Code yako ya QR na kiungo imewekwa upya na code mpya ya QR na kiungo imeundwa. Skani code hii ya QR kupitia simu yako ili upige gumzo nami kwenye Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Yeyote aliye na kiungo hiki anaweza kuona jina lako la mtumiaji na kuanza mazungumzo nawe. Ishiriki tu na watu unaowaamini. @@ -6590,6 +6649,10 @@ %1$s si mtumiaji wa Signal. Je, ungependa kuikaribisha nambari hii? Alika + + Skani msimbo wa QR + + Imekumbana na hitilafu ya mtandao. Jaribu tena baadae. diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 30ff23e725..8489f8f7db 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -426,6 +426,8 @@ Signal. இனி SMS மெசேஜிங் ஆதரிக்கப்படாது. சிக்னலில் இனி எஸ்.எம்.எஸ் செய்தியிடல் ஆதரிக்கப்படாது. உரையாடலை இங்கே தொடர %1$s ஐ சிக்னலுக்கு அழைக்கவும். + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Mollyக்கு அழை @@ -536,7 +538,7 @@ ஸ்பேம் எனப் புகாரளிக்கப்பட்டது - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + இந்த நபர் ஸ்பேமை அனுப்பியிருக்கலாம் என்பதை சிக்னல் உங்களுக்குத் தெரிவித்தது. சாட்களின் உள்ளடக்கம் எதையும் சிக்னலால் பார்க்க முடியவில்லை. ஸ்பேம் எனப் புகாரளிக்கப்பட்டது @@ -557,7 +559,7 @@ கிரிப்டோ அல்லது பண மோசடிகள் - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + கிரிப்டோகரன்சி (பிட்காயின் போன்றவை) அல்லது நிதி வாய்ப்பு பற்றிய மெசேஜ்களை உங்களுக்குப் பரீட்சயமற்ற ஒருவர் அனுப்பியிருந்தால், எச்சரிக்கையுடன் இருங்கள்—அது ஸ்பேமாக இருக்கலாம். தெளிவற்ற அல்லது பொருத்தமற்ற மெசேஜ்கள் @@ -818,7 +820,7 @@ காண்க - நிரந்தர Signal தொடர்பு தோல்வி! + நிரந்தர Molly தொடர்பு தோல்வி! Google Play சேவை உடன் TextSecure-ஐ பதிவு செய்ய இயலவில்லை. இணையதளம் வழியாக தொடர்புடையாடல் முடக்கப்பட்டுள்ளது, TextSecure அமைப்புகள் மெனுவில் மறுபதிவுச்செய்ய முயற்சிக்கவும் @@ -1386,6 +1388,8 @@ %1$s அவர்களின் ப்ரொஃபைல் பெயரை %2$s பெயருக்கு மாற்றப்பட்டுள்ளது . %1$s அவர்களின் ப்ரொஃபைல் பெயரை %2$s இருந்து %3$s பெயருக்கு மாற்றப்பட்டுள்ளது . %1$s சுயவிவரத்தை மாற்றினர். + + You started this chat with %1$s. நீங்கள் குழுவை உருவாக்கியது. @@ -1861,8 +1865,10 @@ துண்டிக்கப்பட்டது Signal அழைப்பு இணைப்பு - - இணைப்பின் மூலம் இந்த அழைப்பில் சேரும் எவரும் உங்கள் பெயர், புகைப்படம் மற்றும் தொலைபேசி எண்ணைப் பார்ப்பார்கள். + + இணைப்பின் மூலம் இந்த அழைப்பில் சேரும் எவரும் உங்கள் பெயர், புகைப்படம் மற்றும் தொலைபேசி எண்ணைப் பார்ப்பார்கள். + + இணைப்பு மூலம் இந்த அழைப்பில் சேரும் எவரினாலும் உங்கள் பெயரையும் புகைப்படத்தையும் பார்க்க முடியும். அனுமதிக்கக் காத்திருக்கிறது… @@ -2296,7 +2302,7 @@ பயனர் பெயர் வெற்றிகரமாக அகற்றப்பட்டது. பிணைய பிழையை எதிர்கொண்டது. - Too many attempts made, please try again later. + பல முயற்சிகள் எடுக்கப்பட்டுவிட்டன, தயவுசெய்து பின்னர் மீண்டும் முயற்சிக்கவும். இந்த பயனர் பெயர் எடுக்கப்பட்டது. பயனர் பெயர்களில் அ - ஃ, a–Z, 0–9 மற்றும் அடிக்கோடிட்டுக் காட்டலாம். பயனர் பெயர் எண்ணுடன் தொடங்க முடியாது. @@ -2320,7 +2326,7 @@ இந்த எண் 00 ஆக இருக்கக் கூடாது. 1–9 க்கு இடையேயுள்ள ஒரு எண்ணை உள்ளிடவும் - Numbers with more than 2 digits can\'t start with 0 + 2 இலக்கங்களுக்கு மேல் உள்ள எண்கள் 0 இல் தொடங்கக் கூடாது உங்கள் பயனர் பெயரை மீட்டமைப்பது உங்கள் தற்போதைய QR குறியீடு மற்றும் இணைப்பை மீட்டமைக்கும். நீங்கள் உறுதியாக உள்ளீர்களா? @@ -3894,6 +3900,12 @@ நீங்கள் அவர்களுக்கு மெசேஜ் அனுப்பாத வரை அல்லது அவர்களுடன் ஏற்கனவே சாட் செய்யாத வரை, நீங்கள் சிக்னலை பயன்படுத்திக் கொண்டிருப்பதை யாராலும் பார்க்க முடியாது. "இந்த அமைப்பை மாற்ற, எனது எண்ணை யார் பார்க்கலாம் என்னும் ஆப்ஷனில் யாரும் இல்லை என மாற்றி அமைக்கவும்." + + நீங்கள் உறுதியாக உள்ளீர்களா? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + ரத்துசெய் எல்லோரும் ஒருவருமில்லை திரை பூட்டு @@ -4391,11 +4403,16 @@ குழு விளக்கம் + தரநிலை + வேகமான, குறைந்த இணைய தரவு + உயர் + மெதுவான, அதிகமான இணைய தரவு - புகைப்பட தரம் + + மீடியா தரம் நண்பர்களை அழைக்கவும் @@ -4871,6 +4888,28 @@ ஒன்று அல்லது அதற்கு மேற்பட்ட பொருட்கள் மிகப் பெரியதாக இருந்தன ஒன்று அல்லது அதற்கு மேற்பட்ட பொருட்கள் செல்லாதவை பல பொருட்கள் தேர்ந்தெடுக்கப்பட்டுள்ளன + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + ரத்து வரை @@ -4895,6 +4934,20 @@ மாற்றங்களைக் கைவிடுவதா? இந்தப் புகைப்படத்தில் நீங்கள் செய்த மாற்றங்களை இழப்பீர்கள். + + Found %1$s + + Start a chat with \"%1$s\" + + சாட்டிற்குச் செல் + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + தொடர்க + எனது பேட்ஜ்கள் சிறப்பு பேட்ஜ் @@ -4993,7 +5046,7 @@ கட்டணம் நிலுவையில் உள்ளது - உங்கள் %1$s வங்கிப் பரிமாற்றம் நிலுவையில் உள்ளது. வங்கிப் பரிமாற்றங்கள் முடிவதற்கு வழக்கமாக 1 வணிக நாள் எடுக்கும். + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. மேலும் அறிக @@ -5937,9 +5990,9 @@ உங்களிடம் ஒரு நன்கொடை நிலுவையில் உள்ளது - வங்கி பரிமாற்றங்களுக்குப் பொதுவாக 1 வணிக நாள் எடுக்கும். உங்கள் சந்தாவைப் புதுப்பிக்கும் முன், இந்தக் கட்டணம் முடியும் வரை காத்திருக்கவும். + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - வங்கி பரிமாற்றங்களுக்குப் பொதுவாக 1 வணிக நாள் எடுக்கும். மற்றொரு நன்கொடை அளிப்பதற்கு முன், இந்தக் கட்டணம் முடியும் வரை காத்திருக்கவும். + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. உங்கள் நன்கொடை இன்னும் செயல்படுத்தப்படுகிறது. உங்கள் இணைப்பைப் பொறுத்து இதற்குச் சில நிமிடங்கள் ஆகலாம். உங்கள் சந்தாவைப் புதுப்பிக்கும் முன், இந்தக் கட்டணம் முடியும் வரை காத்திருக்கவும். @@ -6091,7 +6144,7 @@ உங்கள் ஒருமுறைக்கான நன்கொடை நிலுவையில் உள்ளது. உங்கள் நன்கொடை பெறப்பட்டதும், உங்கள் புரொஃபைலில் %1$s பேட்ஜைக் காட்ட முடியும். - வங்கி பரிமாற்றங்களுக்குப் பொதுவாக 1 வணிக நாள் எடுக்கும். %1$s + Bank transfers can take 1 to 14 business days to process. %1$s மேலும் அறிக @@ -6432,6 +6485,8 @@ அழைப்பு விவரங்கள் + + அழைப்பின் பெயரைத் திருத்தவும் அழைப்பின் பெயரைச் சேர்க்கவும் @@ -6499,6 +6554,10 @@ உங்கள் QR குறியீடு மற்றும் இணைப்பு மீட்டமைக்கப்பட்டு புதிய QR குறியீடு மற்றும் இணைப்பு உருவாக்கப்பட்டுள்ளது. என்னுடன் சிக்னலில் சாட் செய்ய இந்த QR குறியீட்டை உங்கள் ஃபோன் மூலம் ஸ்கேன் செய்யவும். + + QR code not found + + Try scanning another image containing a Signal QR code. இந்த இணைப்பைக் கொண்டுள்ள எவரும் உங்கள் பயனர் பெயரைப் பார்த்து உங்களுடன் சாட் செய்யத் தொடங்கலாம். நீங்கள் நம்பும் நபர்களுடன் மட்டும் பகிரவும். @@ -6590,6 +6649,10 @@ %1$s ஒரு சிக்னல் பயனர் அல்ல. இந்த எண்ணை அழைக்க நீங்கள் விரும்புகிறீர்களா? அழை + + QR குறியீட்டை ஸ்கேன் செய்யுங்கள் + + பிணைய பிழை ஏற்பட்டது. பின்னர் மீண்டும் முயற்சிக்கவும். diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 7073106d98..817258d794 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -426,6 +426,8 @@ Signal లో SMS సందేశాలు పంపేందుకు ఇక ఏమాత్రం మద్దతు ఇవ్వబడదు. Signal లో SMS సందేశాలు పంపేందుకు ఇక ఏమాత్రం మద్దతు ఇవ్వబడదు. ఇక్కడ సంభాషణను ఉంచడానికి %1$s ను Signal కు ఆహ్వానించండి. + + ఈ వ్యక్తి Molly ను ఏమాత్రం ఉపయోగించడం లేదు. ఇక్కడ సంభాషణను ఉంచడానికి వారిని Molly కు ఆహ్వానించండి. Molly కు ఆహ్వానించండి @@ -536,7 +538,7 @@ స్పామ్‌ను నివేదించారు - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + ఈ వ్యక్తి స్పామ్‌ను పంపుతుండవచ్చని Signal కు తెలియజేయబడింది. Signal ఏ చాట్‌ల కంటెంట్‌నూ చూడలేదు. స్పామ్‌గా నివేదించబడింది @@ -557,7 +559,7 @@ క్రిప్టో లేదా నగదు స్కామ్‌లు - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + మీకు పరిచయం లేని ఎవరైనా ఒకవేళ క్రిప్టోకరెన్సీ (బిట్‌కాయిన్ వంటివి) లేదా ఆర్థిక అవకాశం గురించిన సందేశాలు పంపితే, జాగ్రత్తగా ఉండండి—అది స్పామ్ కావచ్చు. అస్పష్టమైన లేదా అసంబద్ధమైన సందేశాలు @@ -818,7 +820,7 @@ వీక్షణ - Signal లో శాశ్వత సమాచార వైఫల్యం! + Molly లో శాశ్వత సమాచార వైఫల్యం! గూగ్లె ప్లే సదుపాయలతొ Molly నమోదు కాలెదు. Molly సందెశాలు మరియు కాల్స్ నిలిపివేయబడ్డాయి. దయచేసి ఆధునిక అమరికలు లో మళ్ళి నమోదు చెసుకొనగలరు. @@ -1386,6 +1388,8 @@ %1$sవారి ప్రొఫైల్ పేరును %2$s గా మార్చారు. %1$s వారి ప్రొఫైల్ పేరును %2$s నుండి %3$s కి మార్చారు. %1$s వారి ప్రొఫైల్ మార్చబడింది. + + మీరు %1$s‌తో ఈ చాట్‌ను ప్రారంభించారు. మీరు సమూహాన్ని సృష్టించారు. @@ -1861,8 +1865,10 @@ డిస్కనెక్ట్ Signal కాల్ లింక్ - - లింక్ ద్వారా ఈ కాల్‌లో చేరే ఎవరైనా మీ పేరు, ఫోటో మరియు ఫోన్ నంబర్‌ను చూస్తారు. + + లింక్ ద్వారా ఈ కాల్‌లో చేరే ఎవరైనా మీ పేరు, ఫోటో మరియు ఫోన్ నంబర్‌ను చూస్తారు. + + లింక్ ద్వారా ఈ కాల్‌లో చేరే ఎవరైనా మీ పేరు మరియు ఫోటోను చూస్తారు. అనుమతి కోసం వేచి ఉంది… @@ -2296,7 +2302,7 @@ యూజర్‌నేమ్‌ను విజయవంతంగా తొలగించాము. నెట్‌వర్క్ లోపాన్ని ఎదుర్కొంది. - Too many attempts made, please try again later. + చాలా ఎక్కువ ప్రయత్నాలు చేయబడ్డాయి, దయచేసి తర్వాత మళ్ళీ ప్రయత్నించండి. ఈ వినియోగదారు పేరు తీసుకోబడింది. వినియోగదారు పేర్లు a-Z, 0-9 మరియు అండర్ స్కోర్‌లను మాత్రమే కలిగి ఉంటాయి. వినియోగదారు పేర్లు సంఖ్యతో ప్రారంభం కావు. @@ -2320,7 +2326,7 @@ ఈ నంబర్ 00 గా ఉండకూడదు. 1–9 మధ్య అంకెను ఎంటర్ చేయండి - Numbers with more than 2 digits can\'t start with 0 + 2 కంటే ఎక్కువ అంకెలు ఉన్న సంఖ్యలు 0 తో ప్రారంభం కాలేవు మీ యూజర్‌నేమ్‌ను పునరుద్ధరించడం వలన మీ ప్రస్తుత QR కోడ్ మరియు లింక్ రీసెట్ చేయబడతాయి. ఖచ్చితంగా చేయాలా? @@ -3894,6 +3900,12 @@ మీరు వారికి సందేశం పంపితే లేదా వారితో ఇప్పటికే చాట్ చేస్తే తప్ప మీరు Signal లో ఉన్నారని ఎవరూ చూడలేరు. "ఈ సెట్టింగ్‌ను మార్చడానికి, నా నంబర్‌ను ఎవరు చూడగలరు అనే దానిని ఎవరూ చూడలేరుకు సెట్ చేయండి." + + ఖచ్చితంగా చేయాలా? + + \"నంబరు ద్వారా నన్ను ఎవరు కనుగొనగలరు\" అనే సెట్టింగ్‌ను \"ఎవరూ లేరు\" కు సెట్ చేయడం వలన వ్యక్తులు మిమ్మల్ని Signal లో కనుగొనడం కష్టతరం చేస్తుంది. + + రద్దు చేయండి ప్రతి ఒక్కరూ యెవరు లేరు స్క్రీన్ తాళం @@ -4391,11 +4403,16 @@ గ్రూపు వివరణ + ప్రామాణికం + వేగంగా, తక్కువ డేటా + అధికం + నెమ్మదిగా, మరింత డేటా - ఫోటో క్వాలిటీ + + మీడియా నాణ్యత మీ స్నేహితులను ఆహ్వానించండి @@ -4871,6 +4888,28 @@ ఒకటి లేదా అంతకంటే ఎక్కువ ఐటమ్‌లు చాలా పొడవుగా ఉన్నాయి ఒకటి లేదా అంతకంటే ఎక్కువ ఐటమ్‌లు చెల్లుబాటు కావు. చాలా ఎక్కువగా ఐటమ్‌లు ఎంచుకోబడ్డాయి + + ఒకసారి వీక్షించేందుకు వీడియో సెట్ చేయబడింది + + ఒకసారి వీక్షించేందుకు ఫోటో సెట్ చేయబడింది + + అధిక నాణ్యతకు వీడియో సెట్ చేయబడింది + + ప్రామాణిక నాణ్యతకు వీడియో సెట్ చేయబడింది + + అధిక నాణ్యతకు ఫోటో సెట్ చేయబడింది + + ప్రామాణిక నాణ్యతకు ఫోటో సెట్ చేయబడింది + + + %1$d అంశం అధిక నాణ్యతకు సెట్ చేయబడింది + %1$d అంశాలు అధిక నాణ్యతకు సెట్ చేయబడ్డాయి + + + + %1$d అంశం ప్రామాణిక నాణ్యతకు సెట్ చేయబడింది + %1$d అంశాలు ప్రామాణిక నాణ్యతకు సెట్ చేయబడ్డాయి + రద్దు గీయండి @@ -4895,6 +4934,20 @@ మార్పులను విస్మరించాలా? ఈ ఫోటోకు మీరు చేసిన ఏవైనా మార్పులను మీరు కోల్పోతారు. + + %1$s ను కనుగొన్నాము + + \"%1$s\"తో చాట్‌ను ప్రారంభించండి + + చాట్‌కు వెళ్ళండి + + + పరికరాన్ని లింక్ చేసేదా? + + మీరు Signal పరికరాన్ని లింక్ చేయడానికి ప్రయత్నిస్తున్నట్టు కనిపిస్తోంది. దాన్ని లింక్ చేయడానికి కొనసాగించును తట్టండి మరియు కోడ్‌ను మళ్ళీ స్కాన్ చేయండి. + + కొనసాగండి + నా బ్యాడ్జీలు ఫీచర్డ్ బ్యాడ్జి @@ -4993,7 +5046,7 @@ చెల్లింపు పెండింగ్‌లో ఉంది - %1$s యొక్క మీ బ్యాంక్ బదిలీ పెండింగ్‌లో ఉంది. బ్యాంక్ బదిలీలను పూర్తి చేయడానికి సాధారణంగా 1 వ్యాపార రోజు పడుతుంది. + మీ %1$s బ్యాంక్ బదిలీ పెండింగ్‌లో ఉంది. బ్యాంక్ బదిలీలు పూర్తి కావడానికి 1 నుండి 14 వ్యాపార రోజులు పట్టవచ్చు. మరింత తెలుసుకోండి @@ -5937,9 +5990,9 @@ మీకు ఒక విరాళం పెండింగులో ఉంది - బ్యాంక్ బదిలీలను ప్రక్రియ చేయడానికి సాధారణంగా 1 వ్యాపార రోజు పడుతుంది. మీ సబ్‌స్క్రిప్షన్‌ను అప్‌డేట్ చేయడానికి ముందు ఈ చెల్లింపు పూర్తయ్యే వరకు దయచేసి వేచి ఉండండి. + బ్యాంక్ బదిలీలు ప్రక్రియ కావడానికి 1 నుండి 14 వ్యాపార రోజులు పట్టవచ్చు. మీ సబ్స్క్రిప్షన్‌ను అప్‌డేట్ చేయడానికి ముందు ఈ చెల్లింపు పూర్తయ్యే వరకు దయచేసి వేచి ఉండండి. - బ్యాంక్ బదిలీలను ప్రక్రియ చేయడానికి సాధారణంగా 1 వ్యాపార రోజు పడుతుంది. మరొక విరాళం ఇచ్చే ముందు ఈ చెల్లింపు పూర్తయ్యే వరకు దయచేసి వేచి ఉండండి. + బ్యాంక్ బదిలీలు ప్రక్రియ కావడానికి 1 నుండి 14 వ్యాపార రోజులు పట్టవచ్చు. మరొక విరాళం ఇచ్చే ముందు ఈ చెల్లింపు పూర్తయ్యే వరకు దయచేసి వేచి ఉండండి. మీ విరాళం ఇంకా ప్రక్రియ చేయబడుతోంది. మీ కనెక్షన్ ఆధారంగా దీనికి కొన్ని నిమిషాలు పట్టవచ్చు. మీ సబ్‌స్క్రిప్షన్‌ను అప్‌డేట్ చేయడానికి ముందు ఈ చెల్లింపు పూర్తయ్యే వరకు దయచేసి వేచి ఉండండి. @@ -6091,7 +6144,7 @@ మీ ఒక్కసారి విరాళం పెండింగ్‌లో ఉంది. మీ విరాళం అందుకోబడినప్పుడు మీ ప్రొఫైల్‌పై మీరు %1$s బ్యాడ్జ్‌ను ప్రదర్శించగలుగుతారు. - బ్యాంక్ బదిలీలను ప్రక్రియ చేయడానికి సాధారణంగా 1 వ్యాపార రోజు పడుతుంది. %1$s + బ్యాంక్ బదిలీలు ప్రక్రియ కావడానికి 1 నుండి 14 వ్యాపార రోజులు పట్టవచ్చు. %1$s మరింత తెలుసుకోండి @@ -6432,6 +6485,8 @@ కాల్ వివరాలు + + కాల్ పేరును సవరించండి కాల్ పేరును జోడించండి @@ -6499,6 +6554,10 @@ మీ QR కోడ్ మరియు లింక్ రీసెట్ చేయబడ్డాయి మరియు కొత్త QR కోడ్ మరియు లింక్ సృష్టించబడ్డాయి. Signal లో నాతో చాట్ చేయడానికి మీ ఫోన్‌తో ఈ QR కోడ్‌ను స్కాన్ చేయండి. + + QR కోడ్ కనుగొనబడలేదు + + Signal QR కోడ్ ఉన్న మరొక చిత్రాన్ని స్కాన్ చేయడానికి ప్రయత్నించండి. ఈ లింక్‌ను కలిగి ఉన్న ఎవరైనా మీ యూజర్‌నేమ్‌ను చూడగలరు మరియు మీతో చాటింగ్ ప్రారంభించగలరు. మీకు నమ్మకం ఉన్న వ్యక్తులతో మాత్రమే దీనిని పంచుకోండి. @@ -6590,6 +6649,10 @@ %1$s Signal యూజర్ కాదు. మీరు ఈ నంబర్‌ను ఆహ్వానించాలని అనుకుంటున్నారా? ఆహ్వానించండి + + QR కోడ్‌ను స్కాన్ చేయండి + + నెట్‌వర్క్ లోపాన్ని ఎదుర్కొంది. తరువాత మళ్ళీ ప్రయత్నించండి. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index b750b0e862..596e4a0bd7 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -423,6 +423,8 @@ Signal ไม่รองรับการส่งข้อความ SMS อีกต่อไป Signal ไม่รองรับการส่งข้อความ SMS อีกต่อไป ชวน %1$s มาใช้ Signal เพื่อการติดต่อสื่อสารที่ไม่ขาดตอน + + ผู้ติดต่อคนนี้ไม่ได้ใช้ Molly แล้ว ชวนเพื่อนมาใช้ Molly เพื่อการติดต่อสื่อสารที่ไม่ขาดตอน เชิญมาใช้ Molly @@ -527,7 +529,7 @@ รายงานว่าเป็นสแปมแล้ว - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal ได้รับแจ้งว่าบุคคลนี้อาจส่งข้อความสแปมแล้ว โดย Signal จะไม่สามารถเห็นเนื้อหาใดๆ ของแชท รายงานว่าเป็นสแปมแล้ว @@ -548,7 +550,7 @@ การหลอกลวงทางการเงินหรือคริปโต - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + หากมีคนที่ไม่รู้จักส่งข้อความหาคุณเกี่ยวกับคริปโตเคอร์เรนซี (เช่น บิตคอยน์) หรือโอกาสทางการเงิน โปรดระมัดระวังเป็นพิเศษ เพราะเป็นไปได้สูงว่านั่นคือสแปม ข้อความคลุมเครือหรือไม่เจาะจง @@ -800,7 +802,7 @@ ดู - การสื่อสารของ Signal ล้มเหลวอย่างถาวร! + การสื่อสารของ Molly ล้มเหลวอย่างถาวร! Molly ไม่สามารถลงทะเบียนกับ Google Play Services การใช้งานข้อความและการโทร Molly ได้ถูกปิดใช้งาน กรุณาลองลงทะเบียนอีกครั้งใน การตั้งค่า > ขั้นสูง @@ -1339,6 +1341,8 @@ %1$s เปลี่ยนชื่อโปรไฟล์เป็น %2$s %1$s เปลี่ยนชื่อโปรไฟล์จาก %2$s เป็น %3$s %1$s ได้เปลี่ยนโปรไฟล์ใหม่ + + คุณเริ่มต้นแชทนี้กับ %1$s คุณได้สร้างกลุ่มแล้ว @@ -1794,8 +1798,10 @@ เลิกเชื่อมต่อแล้ว ลิงก์การโทร Signal - - ผู้ใช้ที่เข้าร่วมการโทรนี้ผ่านลิงก์จะเห็นชื่อ รูปภาพ และหมายเลขโทรศัพท์ของคุณ + + ผู้ใช้ที่เข้าร่วมการโทรนี้ผ่านลิงก์จะเห็นชื่อ รูปภาพ และหมายเลขโทรศัพท์ของคุณ + + ผู้ใช้ที่เข้าร่วมการโทรนี้ผ่านลิงก์จะเห็นชื่อและรูปภาพของคุณ กำลังรออนุมัติให้เข้าร่วม… @@ -2216,7 +2222,7 @@ ลบชื่อผู้ใช้สำเร็จแล้ว พบความผิดพลาดของเครือข่าย - Too many attempts made, please try again later. + คุณลองตั้งชื่อหลายครั้งเกินไป โปรดลองใหม่ในภายหลัง มีผู้ใช้ชื่อนี้แล้ว ชื่อผู้ใช้จะมีได้เฉพาะ a-Z, 0-9 และ _ ชื่อผู้ใช้ไม่สามารถเริ่มต้นด้วยตัวเลข @@ -2240,7 +2246,7 @@ ไม่สามารถใช้ตัวเลข 00 ได้ โปรดกรอกตัวเลข 1–9 - Numbers with more than 2 digits can\'t start with 0 + ตัวเลขที่เกิน 2 หลักไม่สามารถขึ้นต้นด้วยเลข 0 ได้ การกู้คืนชื่อผู้ใช้จะทำให้คิวอาร์โค้ดและลิงก์ที่มีอยู่เดิมของคุณถูกรีเซ็ต ต้องการดำเนินการต่อหรือไม่ @@ -3788,6 +3794,12 @@ จะไม่มีใครเห็นว่าคุณใช้งาน Signal เว้นแต่ว่าคุณจะส่งข้อความหาหรือเคยแชทกับผู้ใช้คนนั้น "หากต้องการเปลี่ยนการตั้งค่านี้ ให้ไปที่หัวข้อ “คนที่สามารถเห็นหมายเลขโทรศัพท์ของฉัน” แล้วเลือก “ไม่อนุญาตให้ใครเห็น”" + + ต้องการดำเนินการต่อหรือไม่ + + การตั้งค่า \"คนที่สามารถใช้หมายเลขโทรศัพท์ค้นหาฉันได้\" เป็น \"ไม่อนุญาตให้ใครค้นหา\" จะทำให้ผู้ใช้คนอื่นค้นหาคุณได้ยากขึ้นบน Signal + + ยกเลิก ทุกคน คนที่คุณไม่รู้จัก ล็อกหน้าจอ @@ -4281,11 +4293,16 @@ คำอธิบายกลุ่ม + มาตรฐาน + เร็วกว่า ใช้ข้อมูลน้อย + สูง + ช้ากว่า ใช้ข้อมูลมาก - คุณภาพรูปภาพ + + คุณภาพของสื่อ เชิญเพื่อนของคุณ @@ -4754,6 +4771,26 @@ มีรายการที่ใหญ่เกินไปอย่างน้อยหนึ่งรายการ มีรายการที่ไม่ถูกต้องอย่างน้อยหนึ่งรายการ เลือกหลายรายการมากเกินไป + + วิดีโอตั้งค่าเป็นไฟล์สื่อแบบที่ดูได้ครั้งเดียว + + รูปภาพตั้งค่าเป็นไฟล์สื่อแบบที่ดูได้ครั้งเดียว + + วิดีโอตั้งค่าที่ความละเอียดสูง + + วิดีโอตั้งค่าที่ความละเอียดมาตรฐาน + + รูปภาพตั้งค่าที่ความละเอียดสูง + + รูปภาพตั้งค่าที่ความละเอียดมาตรฐาน + + + %1$d ไฟล์ตั้งค่าที่ความละเอียดสูง + + + + %1$d ไฟล์ตั้งค่าที่ความละเอียดมาตรฐาน + ยกเลิก วาด @@ -4778,6 +4815,20 @@ ละทิ้งการเปลี่ยนแปลง คุณจะสูญเสียการเปลี่ยนแปลงทั้งหมดที่ทำไว้กับรูปภาพนี้ + + พบ %1$s + + เริ่มต้นแชทกับ \"%1$s\" + + ไปที่แชท + + + เชื่อมโยงอุปกรณ์หรือไม่ + + ดูเหมือนว่าคุณพยายามจะเชื่อมโยงอุปกรณ์ Signal แตะดำเนินการต่อแล้วสแกนโค้ดอีกครั้งเพื่อเชื่อมโยงอุปกรณ์ + + ดำเนินการต่อ + โล่ของฉัน โล่ติดโปรไฟล์ @@ -4876,7 +4927,7 @@ กำลังรออนุมัติการชำระเงิน - กำลังรออนุมัติการโอนเงินผ่านระบบธนาคารจำนวน %1$s การโอนเงินผ่านระบบธนาคารมักใช้เวลาดำเนินการประมาณ 1 วันทำการ + กำลังรออนุมัติการโอนเงินผ่านระบบธนาคารจำนวน %1$s การโอนเงินผ่านระบบธนาคารอาจใช้เวลาดำเนินการประมาณ 1 ถึง 14 วันทำการ เรียนรู้เพิ่มเติม @@ -5801,9 +5852,9 @@ คุณยังมีการบริจาคที่รออนุมัติอยู่ - การโอนเงินผ่านระบบธนาคารมักใช้เวลาดำเนินการประมาณ 1 วันทำการ โปรดรอให้การชำระเงินนี้สำเร็จก่อน แล้วจึงค่อยอัปเดตการบริจาครายเดือนของคุณ + การโอนเงินผ่านระบบธนาคารอาจใช้เวลาดำเนินการประมาณ 1 ถึง 14 วันทำการ โปรดรอให้การชำระเงินนี้สำเร็จก่อน แล้วจึงค่อยอัปเดตการบริจาครายเดือนของคุณ - การโอนเงินผ่านระบบธนาคารมักใช้เวลาดำเนินการประมาณ 1 วันทำการ โปรดรอให้การชำระเงินนี้สำเร็จก่อน แล้วจึงค่อยบริจาคอีกครั้ง + การโอนเงินผ่านระบบธนาคารอาจใช้เวลาดำเนินการประมาณ 1 ถึง 14 วันทำการ โปรดรอให้การชำระเงินนี้สำเร็จก่อน แล้วจึงค่อยบริจาคอีกครั้ง การบริจาคของคุณยังอยู่ระหว่างดำเนินการ ขั้นตอนนี้อาจใช้เวลาสักครู่ โดยขึ้นอยู่กับสัญญาณอินเทอร์เน็ตของคุณ โปรดรอให้การชำระเงินนี้สำเร็จก่อน แล้วจึงค่อยอัปเดตการบริจาครายเดือนของคุณ @@ -5954,7 +6005,7 @@ กำลังรออนุมัติการบริจาคแบบครั้งเดียวของคุณ คุณจะแสดงโล่ %1$s บนโปรไฟล์ได้เมื่อเราได้รับการบริจาคเรียบร้อยแล้ว - การโอนเงินผ่านระบบธนาคารมักใช้เวลาดำเนินการประมาณ 1 วันทำการ %1$s + การโอนเงินผ่านระบบธนาคารอาจใช้เวลาดำเนินการประมาณ 1 ถึง 14 วันทำการ %1$s เรียนรู้เพิ่มเติม @@ -6291,6 +6342,8 @@ รายละเอียดการโทร + + แก้ไขชื่อการโทร เพิ่มชื่อการโทร @@ -6358,6 +6411,10 @@ รีเซ็ตคิวอาร์โค้ดและลิงก์ของคุณแล้ว และสร้างคิวอาร์โค้ดและลิงก์ใหม่เรียบร้อยแล้ว ใช้มือถือสแกนคิวอาร์โค้ดนี้เพื่อพูดคุยกับฉันบน Signal + + ไม่พบคิวอาร์โค้ด + + ลองสแกนรูปภาพอื่นที่มีคิวอาร์โค้ดของ Signal ทุกคนที่มีลิงก์นี้จะสามารถมองเห็นชื่อผู้ใช้ของคุณและเริ่มแชทกับคุณได้ เราขอแนะนำให้แชร์ลิงก์นี้กับคนที่คุณไว้วางใจเท่านั้น @@ -6447,6 +6504,10 @@ %1$s ไม่ได้เป็นผู้ใช้ Signal คุณต้องการเชิญเจ้าของหมายเลขนี้มาใช้งานหรือไม่ เชิญ + + สแกนรหัส QR + + พบความผิดพลาดของเครือข่าย ลองอีกครั้งในภายหลัง diff --git a/app/src/main/res/values-tl/strings.xml b/app/src/main/res/values-tl/strings.xml index d30f4b7288..5c9188910c 100644 --- a/app/src/main/res/values-tl/strings.xml +++ b/app/src/main/res/values-tl/strings.xml @@ -426,6 +426,8 @@ Hindi na suportado sa Signal ang SMS messaging. Hindi na suportado sa Signal ang SMS messaging. I-invite si %1$s sa Signal para mapanatili ang convo niyo dito. + + Hindi na gumagamit ng Molly ang taong ito. I-invite siya sa Molly para mapanatili ang convo niyo rito. Imbitahan sa Molly @@ -536,7 +538,7 @@ Naiulat na spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Naabisuhan na ang Signal na maaaring nagpapadala ng spam ang taong ito. Hindi nababasa ng Signal ang nilalaman ng anumang chats. Iniulat bilang spam @@ -557,7 +559,7 @@ Mga scam kaugnay ng crypto o pera - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Mag-ingat kung may nag-message sa \'yong hindi mo kakilala tungkol sa cryptocurrency (gaya ng Bitcoin) o oportunidad na pinansyal—maaring isa itong scam. Malabo o walang kaugnayang mga mensahe @@ -818,7 +820,7 @@ Tingnan - Permanenteng kabiguan ng Signal sa komunikasyon! + Permanenteng kabiguan ng Molly sa komunikasyon! Hindi nagawang magparehistro ng Molly sa Google Play Services. Ang mga mensahe at tawag sa Molly ay na-disable, subukang muling magparehistro sa Settings > Advanced. @@ -1386,6 +1388,8 @@ Pinalitan ni %1$s ang kanyang profile name sa %2$s. Pinalitan ni %1$s ang kanyang profile name mula %2$s sa %3$s. Binago ni %1$s ang kanyang profile. + + Sinimulan mo ang chat na ito kay %1$s. Ginawa mo ang grupo. @@ -1861,8 +1865,10 @@ Disconnected Signal call link - - Makikita ng sinumang sasali sa tawag na ito ang iyong pangalan, photo, at phone number. + + Makikita ng sinumang sasali sa tawag na ito ang iyong pangalan, photo, at phone number. + + Makikita ang pangalan at photo mo ng sinumang sumali sa call na ito gamit ang link. Naghihintay na papasukin… @@ -2296,7 +2302,7 @@ Matagumpay na natanggal ang username. Nakatagpo ng error sa network. - Too many attempts made, please try again later. + Maraming attempts na ang ginawa, subukan ulit mamaya. Nakuha na ang username na ito. Ang usernames ay pwede lang mag-include ng a–Z, 0–9, at underscores. Ang mga username ay hindi puwedeng magsimula sa numero. @@ -2320,7 +2326,7 @@ Hindi pwedeng 00 ang number na ito. Maglagay ng digit between 1–9 - Numbers with more than 2 digits can\'t start with 0 + Ang mga numerong may higit sa 2 digits ay hindi pwedeng magsimula sa 0 Ma-re-reset ang iyong existing QR code at link kapag ni-recover mo ang username mo. Sigurado ka na ba? @@ -3894,6 +3900,12 @@ Walang makakakita na nasa Signal ka maliban sa mga taong minessage o naka-chat mo. "Para baguhin ang setting na ito, i-set sa \"Nobody\" ang \"Who can see my number\"." + + Sigurado ka na ba? + + Mahihirapan ang mga taong mahanap ka dito sa Signal kapag ginawa mong \"Wala\" ang setting ng \"Sinong makakahanap sa \'kin gamit ang phone number ko\". + + I-cancel Everyone Nobody Lock ng Screen @@ -4391,11 +4403,16 @@ Group description + Standard + Faster, less data + Mataas + Slower, more data - Photo quality + + Media quality Invite your friends @@ -4871,6 +4888,28 @@ Ang isa o higit pang files were too large Ang isa o higit pang files were invalid Too many items selected + + Ang video ay naka-set sa view once + + Ang photo ay naka-set sa view once + + Ang video ay naka-set sa high quality + + Ang video ay naka-set sa standard quality + + Ang photo ay naka-set sa high quality + + Ang photo ay naka-set sa standard quality + + + Ang %1$d item ay naka-set sa high quality + Ang %1$d items ay naka-set sa high quality + + + + Ang %1$d item ay naka-set sa standard quality + Ang %1$d items ay naka-set sa standard quality + Kanselahin Draw @@ -4895,6 +4934,20 @@ Gusto mo bang i-discard ang changes? Mawawala ang changes na nagawa mo dito sa photo. + + Nakita si %1$s + + Magsimula ng chat kay \"%1$s\" + + Pumunta sa chat + + + Gusto mo bang i-link ang iyong device? + + Mukhang sinusubukan mong mag-link ng isang Signal device. I-tap ang continue at i-scan ulit ang code para ma-link ito. + + Magpatuloy + My badges Featured badge @@ -4993,7 +5046,7 @@ Pending ang payment - Pending ang iyong bank transfer na %1$s. Madalas umaabot nang 1 business day ang pagproseso ng bank transfers. + Pending pa ang iyong bank transfer na may halagang %1$s. Maaaring umabot ng 1 hanggang 14 business days ang pagproseso ng bank transfers. Matuto pa @@ -5937,9 +5990,9 @@ May pending donation ka - Madalas umaabot nang 1 business day ang pagproseso ng bank transfers. Hintaying makumpleto ang payment bago mag-update ng iyong subscription. + Maaaring umabot ng 1 hanggang 14 business days ang pagproseso ng bank transfers. Hintaying matapos ang payment na ito bago gumawa ng panibagong donation. - Madalas umaabot nang 1 business day ang pagproseso ng bank transfers. Hintaying makumpleto ang payment na ito bago gumawa ng panibagong donation. + Maaaring umabot ng 1 hanggang 14 business days ang pagproseso ng bank transfers. Hintaying matapos ang payment na ito bago gumawa ng panibagong donation. Pina-process pa ang iyong donation. Maaari itong tumagal nang ilang minuto depende sa connection mo. Hintaying makumpleto ang payment bago mag-update ng iyong subscription. @@ -6091,7 +6144,7 @@ Pending ang iyong one-time donation. Pwede mong i-display ang %1$s badge sa profile mo kapag natanggap na namin ang donation mo. - Madalas umaabot nang 1 business day ang pagproseso ng bank transfers. %1$s + Maaaring umabot ng 1 hanggang 14 business days ang pagproseso ng bank transfers. %1$s Matuto pa @@ -6432,6 +6485,8 @@ Call details + + I-edit ang pangalan ng call Maglagay ng pangalan ng call @@ -6499,6 +6554,10 @@ Ang iyong QR code at link ay reset na at mayroon ka na ring bagong QR code at link. I-scan ang QR code na ito gamit ang phone mo para maka-chat ako sa Signal. + + Walang makitang QR code + + Subukang mag-scan ng iba pang image na may Signal QR code. Makikita ang username mo at pwedeng makipag-chat sa\'yo ang sinumang may link na ito. I-share lamang ito sa mga taong pinagkakatiwalaan mo. @@ -6590,6 +6649,10 @@ Hindi Signal user si %1$s. Gusto mo bang imbitahin ang number na ito? Imbitahan + + I-scan ang QR Code + + Encountered a network error. Subukan ulit mamaya. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index f6774b99b8..2da3cdf221 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -426,6 +426,8 @@ SMS ile mesajlaşma artık Signal\'da desteklenmemektedir. SMS ile mesajlaşma artık Signal\'da desteklenmemektedir. Sohbete burada devam etmek için %1$s adlı kişiyi Signal\'a davet et. + + Bu kişi artık Molly kullanmıyor. Konuşmayı burada sürdürmek için onları Molly\'e davet et. Molly\'e davet et @@ -536,7 +538,7 @@ Spam bildirildi - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal, bu kişinin spam gönderiyor olabileceği konusunda bilgilendirildi. Signal hiçbir sohbetin içeriğini göremez. Spam olarak bildirildi @@ -557,7 +559,7 @@ Kripto veya para dolandırıcılıkları - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Tanımadığın biri kripto para (Bitcoin gibi) veya finansal bir fırsat hakkında mesaj gönderirse dikkatli ol; spam olması olasıdır. Belirsiz veya ilgisiz mesajlar @@ -818,7 +820,7 @@ Görüntüle - Kalıcı Signal haberleşme hatası! + Kalıcı Molly haberleşme hatası! Molly Google Play Hizmetleri\'ne kaydolamadı. Molly iletileri ve aramaları devre dışı bırakıldı, lütfen Ayarlar > Gelişmiş kısmından tekrar kaydolmayı deneyin. @@ -1386,6 +1388,8 @@ %1$s profil adını %2$s olarak değiştirdi. %1$s profil adını %2$s yerine %3$s olarak değiştirdi. %1$s profilini değiştirdi. + + Bu sohbete %1$s ile başladın. Grubu oluşturdunuz. @@ -1861,8 +1865,10 @@ Bağlantı yok Signal arama bağlantısı - - Bu aramaya bağlantı aracılığıyla katılan herkes adını, fotoğrafını ve telefon numaranı görecektir. + + Bu aramaya bağlantı aracılığıyla katılan herkes adını, fotoğrafını ve telefon numaranı görecektir. + + Bağlantı üzerinden bu aramaya katılan herkes adını ve fotoğrafını görecektir. İçeri alınmayı bekliyor… @@ -2296,7 +2302,7 @@ Kullanıcı adı başarıyla kaldırıldı. Bir ağ hatası ile karşılaşıldı. - Too many attempts made, please try again later. + Çok fazla deneme yapıldı, lütfen daha sonra tekrar dene. Bu kullanıcı adı alınmış. Kullanıcı adları yalnızca a-Z, 0-9 ve alt çizgi içerebilir. Kullanıcı adları rakam ile başlayamaz. @@ -2320,7 +2326,7 @@ Bu sayı 00 olamaz. 1-9 arasında bir rakam gir - Numbers with more than 2 digits can\'t start with 0 + İkiden fazla basamağı olan sayılar 0 ile başlayamaz Kullanıcı adını kurtarmak, mevcut kare kodunu ve bağlantını sıfırlar. Emin misin? @@ -3894,6 +3900,12 @@ Ona mesaj göndermediğin veya mevcut bir sohbetin olmadığı sürece kimse Signal\'de olduğunu göremez. "Bu ayarı değiştirmek için Numaramı kimler görebilir seçeneğini Hiç kimse olarak ayarla." + + Emin misin? + + \"Beni numaramla kimler bulabilir\" seçeneğini \"Hiç kimse\" olarak ayarlamak, insanların seni Signal\'de bulmasını zorlaştıracaktır. + + İptal Herkes Hiç kimse Ekran kilidi @@ -4391,11 +4403,16 @@ Grup tanımı + Standart + Daha hızlı, az veri + Yüksek + Daha yavaş, daha çok veri - Fotoğraf kalitesi + + İçerik kalitesi Arkadaşlarınızı davet edin @@ -4871,6 +4888,28 @@ Bir veya daha fazla öğe çok büyük Bir veya daha fazla öğe çok geçersiz Çok fazla öğe seçildi + + Video bir kez görüntülenecek şekilde ayarlandı + + Fotoğraf bir kez görüntülenecek şekilde ayarlandı + + Video yüksek kaliteye ayarlandı + + Video standart kaliteye ayarlandı + + Fotoğraf yüksek kaliteye ayarlandı + + Fotoğraf standart kaliteye ayarlandı + + + %1$d öge yüksek kaliteye ayarlandı + %1$d öğe yüksek kaliteye ayarlandı + + + + %1$d öge standart kaliteye ayarlandı + %1$d öğe standart kaliteye ayarlandı + İptal Çizim @@ -4895,6 +4934,20 @@ Değişiklikler silinsin mi? Bu fotoğrafa yaptığınız değişiklikleri kaybedeceksiniz. + + %1$s bulundu + + \"%1$s\" ile bir sohbet başlat + + Sohbete git + + + Cihaz bağlansın mı? + + Signal cihazını bağlamaya çalışıyorsun gibi görünüyor. Devam\'a dokun ve bağlamak için kodu tekrar tara. + + Devam et + Rozetlerim Öne çıkan rozet @@ -4993,7 +5046,7 @@ Ödeme bekleniyor - %1$s tutarındaki banka transferin beklemede. Banka transferlerinin tamamlanması genellikle 1 iş günü sürer. + %1$s tutarındaki banka transferin beklemede. Banka transferlerinin tamamlanması 1 ila 14 iş günü sürebilir. Daha fazlasını öğren @@ -5937,9 +5990,9 @@ Bekleyen bir bağışın var - Banka transferlerinin işleme alınması genellikle 1 iş günü sürer. Lütfen aboneliğini güncellemeden önce bu ödemenin tamamlanmasını bekle. + Banka transferlerinin işleme alınması 1 ila 14 iş günü sürebilir. Lütfen aboneliğini güncellemeden önce bu ödemenin tamamlanmasını bekle. - Banka transferlerinin işleme alınması genellikle 1 iş günü sürer. Lütfen başka bir bağışta bulunmadan önce bu ödemenin tamamlanmasını bekle. + Banka transferlerinin işleme alınması 1 ila 14 iş günü sürebilir. Lütfen başka bir bağışta bulunmadan önce bu ödemenin tamamlanmasını bekle. Bağışın hâlâ işleniyor. Bağlantına bağlı olarak bu birkaç dakika sürebilir. Lütfen aboneliğini güncellemeden önce bu ödemenin tamamlanmasını bekle. @@ -6091,7 +6144,7 @@ Tek seferlik bağışın beklemede. Bağışın alındığında, profilinde %1$s rozetini görüntüleyebileceksin. - Banka transferlerinin işleme alınması genellikle 1 iş günü sürer. %1$s + Banka transferlerinin işleme alınması 1 ila 14 iş günü sürebilir. %1$s Daha fazlasını öğren @@ -6432,6 +6485,8 @@ Arama detayları + + Arama adını düzenle Arama adı ekle @@ -6499,6 +6554,10 @@ Kare kodun ve bağlantın sıfırlandı ve yeni bir kare kod ve bağlantı oluşturuldu. Benimle Signal\'de sohbet etmek için telefonunla bu kare kodu tara. + + Kare kod bulunamadı + + Signal kare kodu içeren başka bir resmi taramayı dene. Bu bağlantıya sahip olan herkes kullanıcı adını görebilir ve seninle sohbet başlatabilir. Yalnızca güvendiğin kişilerle paylaş. @@ -6590,6 +6649,10 @@ %1$s bir Signal kullanıcısı değil. Bu numarayı davet etmek ister misin? Davet et + + Karekodu Tara + + Bir ağ hatasıyla karşılaşıldı. Daha sonra tekrar deneyin. diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml index 21d57c39f0..85f9defdce 100644 --- a/app/src/main/res/values-ug/strings.xml +++ b/app/src/main/res/values-ug/strings.xml @@ -423,6 +423,8 @@ Signal ئەمدى SMS ئۇچۇرلىشىشنى قوللىمايدۇ. Signal ئەمدى SMS ئۇچۇرلىشىش ئىقتىدارىنى قوللىمايدۇ. «%1$s» نى Signal غا تەكلىپ قىلىپ داۋاملىق پاراڭلاشسىڭىز بولىدۇ. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Molly ئىشلىتىش تەكلىپى @@ -527,7 +529,7 @@ مەلۇم قىلىنغان ئالدامچىلىق - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal بۇ كىشىنىڭ بەلكىم ئالدامچى ئۇچۇر يوللاۋاتقانلىقى توغرىسىدا ئۇقتۇرۇش تاپشۇرۇۋالدى. Signal ھەرقانداق پاراڭ مەزمۇنىنى كۆرەلمەيدۇ. ئالدامچى ئۇچۇر دەپ مەلۇم قىلىندى @@ -548,7 +550,7 @@ Crypto ياكى پۇل ئالدامچىلىقى - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + ئەگەر سىز تونۇمايدىغان بىرەيلەن سىزگە cryptocurrency (Bitcoin غا ئوخشاش) نىڭ ياكى مەلۇم ئىقتىسادىي پۇرسەتنىڭ گېپىنى قىلسا، بۇ ئالدامچىلىق بولۇشى مۇمكىن. ئېھتىيات قىلىڭ. ئېنىق بولمىغان ياكى مۇناسىۋەتسىز ئۇچۇرلار @@ -800,7 +802,7 @@ كۆرسەت - مەڭگۈلۈك Signal ئالاقىسى مەغلۇپ بولدى! + مەڭگۈلۈك Molly ئالاقىسى مەغلۇپ بولدى! Molly Google Play مۇلازىمەتلىرىگە تىزىملىتالمىدى. Molly ئۇچۇرلىرى ۋە تېلېفونلىرى چەكلىنىپ قالدى، تەڭشەكلەر > ئىلغار دېگەن يەرگە بېرىپ قايتا تىزىملىتىپ سىناپ بېقىڭ. @@ -1339,6 +1341,8 @@ %1$s تەخەللۇسىنى %2$s غا ئۆزگەرتتى. %1$s نىڭ تەخەللۇسى %2$s دىن %3$s غا ئۆزگەرتىلدى. %1$s سەپلىمە ھۆججىتىنى ئۆزگەرتتى. + + You started this chat with %1$s. بۇ گۇرۇپپىنى سىز قۇرغان. @@ -1794,8 +1798,10 @@ ئۈزۈلدى سىگنال چاقىرىق ئۇلىنىشى - - بۇ ئۇلىنىش ئارقىلىق توپقا قېتىلغانلار سىزنىڭ ئىسمىڭىز، رەسىمىڭىز ۋە تېلېفون نومۇرىڭىزنى كۆرەلەيدۇ. + + بۇ ئۇلىنىش ئارقىلىق توپقا قېتىلغانلار سىزنىڭ ئىسمىڭىز، رەسىمىڭىز ۋە تېلېفون نومۇرىڭىزنى كۆرەلەيدۇ. + + بۇ چاقىرىققا ئۇلانما ئارقىلىق قوشۇلغان ھەرقانداق كىشى ئىسمىڭىز ۋە رەسىمىڭىزنى كۆرەلەيدۇ. قېتىلىشنى كۈتىۋاتىدۇ… @@ -2216,7 +2222,7 @@ ئىشلەتكۈچى ئىسمى مۇۋەپپەقىيەتلىك چىقىرىۋېتىلدى. تور خاتالىقىغا يولۇقتى. - Too many attempts made, please try again later. + زىيادە كۆپ قېتىم سىنىدىڭىز، كېيىنرەك قايتا سىناڭ. ئىشلەتكۈچى ئىسمى ئىشلىتىلگەن ئىشلەتكۈچى ئىسمى پەقەت a–Z، 0–9 ۋە ئاستى سىزىقتىن تۈزۈلىدۇ. ئىشلەتكۈچى ئىسمى ساندىن باشلانمايدۇ. @@ -2240,7 +2246,7 @@ بۇ نومۇر 00 بولسا بولمايدۇ. 1-9 ئارىسىدىكى نومۇر كىرگۈزۈڭ - Numbers with more than 2 digits can\'t start with 0 + ئىككى خانىدىن ئارتۇق سانلار 0 بىلەن باشلانسا بولمايدۇ ئىشلەتكۈچى نامىڭىزنى ئەسلىگە كەلتۈرسىڭىز ھازىرقى QR كودىڭىز ۋە ئۇلانمىڭىز قايتىدىن تەڭشىلىدۇ. جەزملەشتۈرەمسىز؟ @@ -3788,6 +3794,12 @@ ئەگەر باشقىلارغا ئۇچۇر يوللىسىمىڭىز ياكى باشقىلار بىلەن بۇرۇندىنلا مەۋجۇت پارىڭىڭىز بولمىسا، باشقىلار سىزنىڭ Signal دا ئىكەنلىكىڭىزنى كۆرەلمەيدۇ. "بۇ تەڭشەكنى ئۆزگەرتىش ئۈچۈن «تېلېفون نومۇرۇمنى كۆرەلەيدىغانلار» نى «ھېچكىم» گە تەڭشەڭ." + + جەزملەشتۈرەمسىز؟ + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + بىكار قىلىش ھەممىسى ھېچكىم ئېكران قۇلۇپى @@ -4281,11 +4293,16 @@ گۇرۇپپا تونۇشتۇرۇشى + ئۆلچەملىك + تېزرەك، سانلىق مەلۇماتنى ئاز ئىشلىتىدۇ + يۇقىرى + ئاستىراق، سانلىق مەلۇماتنى كۆپ ئىشلىتىدۇ - سۈرەت سۈپىتى + + ۋاسىتە سۈپىتى دوستلىرىڭىزنى تەكلىپ قىلىڭ @@ -4754,6 +4771,26 @@ بىر ياكى كۆپ تۈرنىڭ ھەجىمى بەك چوڭ بىر ياكى كۆپ تۈر ئىناۋەتسىز تاللانغان تۈر زىيادە كۆپ + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d items set to high quality + + + + %1$d items set to standard quality + ۋاز كەچ سىزما @@ -4778,6 +4815,20 @@ ئۆزگىرىشلەرنى تاشلىۋەت رەسىمگە قىلغان ھەرقانداق ئۆزگەرتىشلىرىڭىز يوق بولىدۇ. + + Found %1$s + + Start a chat with \"%1$s\" + + پاراڭغا كىرىش + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + داۋاملاشتۇرۇش + ئىزناكلىرىم تاللانغان ئىزناك @@ -4876,7 +4927,7 @@ پۇل تۆلەشنى بىر تەرەپ قىلىۋاتىدۇ - بانكىدىن ئاغدۇرغان سوممىڭىز %1$s نى بىر تەرەپ قىلىۋاتىدۇ. بانكىدىن ئاغدۇرغان ھېساباتنى تاماملاشقا ئادەتتە 1 كۈن كېتىدۇ. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. تەپسىلاتى @@ -5801,9 +5852,9 @@ بىر ئىئانىڭىز بىر تەرەپ قىلىنىۋاتىدۇ - بانكىدىن ئاغدۇرغان ھېساباتنى بىر تەرەپ قىلىشقا ئادەتتە بىر كۈن كېتىدۇ. مۇشتەرىلىكنى يېڭىلاشتىن بۇرۇن بۇ پۇ تۆلەشنىڭ تاماملىنىشىنى كۈتۈپ تۇرۇڭ. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - بانكىدىن ئاغدۇرغان ھېساباتنى بىر تەرەپ قىلىشقا ئادەتتە بىر كۈن كېتىدۇ. باشقا بىر ئىئانە قىلىشتىن بۇرۇن بۇ پۇل تۆلەشنىڭ تاماملىنىشىنى كۈتۈپ تۇرۇڭ. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. ئىئانىڭىزنى تېخىچە بىر تەرەپ قىلىۋاتىدۇ. تور ئۇلىنىشىڭىزغا ئاساسەن بۇنىڭغا بىر نەچچە مىنۇت كېتىشى مۇمكىن. مۇشتەرىلىكنى يېڭىلاشتىن بۇرۇن بۇ پۇ تۆلەشنىڭ تاماملىنىشىنى كۈتۈپ تۇرۇڭ. @@ -5954,7 +6005,7 @@ سىزنىڭ بىر قېتىملىق ئىئانىڭىزنى بىر تەرەپ قىلىۋاتىدۇ. ئىئانىڭىزنى تاپشۇرۇپ ئالغاندىن كېيىن %1$s ئىزنىكىڭىزنى ئارخىپىڭىزدا كۆرسىتەلەيسىز. - بانكىدىن ئاغدۇرغان ھېساباتنى بىر تەرەپ قىلىشقا ئادەتتە بىر كۈن كېتىدۇ. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s تەپسىلاتى @@ -6291,6 +6342,8 @@ چاقىرىق تەپسىلاتى + + چاقىرىق نامىنى تەھرىرلەش چاقىرىق نامى قوشۇش @@ -6358,6 +6411,10 @@ QR كودىڭىز ۋە ئۇلانمىڭىز ئەسلىگە قايتۇرۇلغان بولۇپ، يېڭى QR كودى ۋە ئۇلانمىسى قۇرۇلدى. Signal دا مەن بىلەن پاراڭلىشىش ئۈچۈن تېلېفونىڭىز بىلەن بۇ QR كودنى سىكاننېرلاڭ. + + QR code not found + + Try scanning another image containing a Signal QR code. بۇ ئۇلانما بار ھەرقانداق ئادەم ئىشلەتكۈچى نامىڭىزنى كۆرەلەيدۇ ۋە سىز بىلەن پاراڭ باشلىيالايدۇ. ئۇنى پەقەت سىز ئىشىنىدىغان كىشىلەر بىلەنلا ئورتاقلىشىڭ. @@ -6447,6 +6504,10 @@ %1$s Signal ئىشلەتكۈچى ئەمەس. بۇ نومۇرنى تەكلىپ قىلامسىز؟ تەكلىپ + + QR كودى تارا + + تور خاتالىقىغا يولۇقتى. سەل تۇرۇپ قايتا سىناڭ. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 47c29ed2ff..7fa88cf63b 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -23,7 +23,7 @@ Видалити Будь ласка, зачекайте… Зберегти - Примітка для себе + Нотатник Погода @@ -237,7 +237,7 @@ Вимкнути - Ні, дякую + Не хочу Оновити Molly @@ -381,7 +381,7 @@ Повідомлення Signal Надіслати повідомлення - Перейдімо до Molly %1$s + Пора переходити в Molly %1$s Будь ласка, виберіть контакт Вкладення перевищує обмеження за розміром для типу повідомлення, яке ви надсилаєте. Неможливо записати аудіо! @@ -395,10 +395,10 @@ Ваш запит на приєднання надіслано до адміністраторів групи. Ви отримаєте повідомлення, коли вони відреагують. Відмінити запит - Щоб надсилати аудіо повідомлення, дозвольте Molly доступ до мікрофона. + Щоб надсилати аудіоповідомлення, надайте Molly доступ до мікрофона. Molly потребує дозволу «Мікрофон», щоб відправляти аудіоповідомлення, але наразі доступу немає. Будь ласка, перейдіть до налаштувань застосунку, оберіть «Дозволи» та увімкніть «Мікрофон». Molly потребує дозволів «Мікрофон» та «Камера», щоб подзвонити до %1$s, але наразі доступу немає. Будь ласка, перейдіть до налаштувань застосунку, оберіть «Дозволи» та увімкніть «Мікрофон» та «Камера». - Щоб фотографувати або знімати відео дозвольте Molly доступ до камери. + Щоб знімати фото і відео, надайте Molly доступ до камери. Molly потребує дозволу \"Камера\", щоб фотографувати або знімати відео, але наразі доступу немає. Будь ласка, перейдіть до налаштувань додатку, оберіть \"Дозволи\", та увімкніть \"Камера\". Molly потребує дозволу «Камера», щоб фотографувати або фільмувати. Надайте доступ до мікрофону, щоб записувати відео зі звуком. @@ -432,6 +432,8 @@ Signal більше не підтримує SMS-повідомлення. Signal більше не підтримує SMS-повідомлення. Запросіть користувача %1$s в Signal, щоб продовжити розмову тут. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Запросити до Molly @@ -509,7 +511,7 @@ Ви можете потягнути будь-яке повідомлення ліворуч для швидкої відповіді Одноразові медіафайли видаляються після надсилання Ви вже переглянули це повідомлення - Ви можете додавати нотатки для себе у цьому чаті. Якщо у вас є прив\'язані пристрої — нотатки будуть синхронізовані. + У цьому чаті ви можете робити для себе нотатки. Якщо ваш акаунт має зв\'язані пристрої, нові нотатки буде синхронізовано. %1$d учасників групи мають однакові імена. Натисніть для перегляду @@ -554,7 +556,7 @@ Про спам повідомлено - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Ви повідомили Signal, що ця людина може надсилати спам. Signal ніколи не бачить вмісту чатів. Повідомлено про спам @@ -575,7 +577,7 @@ Шахрайство з криптовалютою чи грошима - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Якщо незнайома людина пише вам про криптовалюту (наприклад, біткойн) або якісь можливості заробітку, будьте пильні. Найімовірніше, це спам. Неясні чи недоречні повідомлення @@ -682,7 +684,7 @@ До налаштувань - Пізніше + Іншим разом Виберіть учасників @@ -854,7 +856,7 @@ Детальніше - Постійний збій зв\'язку Signal! + Постійний збій зв\'язку Molly! Molly не зміг зареєструватись у сервісах Google Play. Виклики та повідомлення Molly наразі вимкнено, спробуйте перереєструватися у Налаштуваннях > Додатково. @@ -957,7 +959,7 @@ Додати учасників Додати учасників - Ні, дякую + Не хочу @@ -1029,7 +1031,7 @@ Продовжити - Відхилити + Закрити Очікуванні запрошення в групу @@ -1301,7 +1303,7 @@ Надіслати %1$d SMS запрошень? Надіслати %1$d SMS запрошень? - Давай перейдемо на Molly: %1$s + Пора переходити в Molly: %1$s Схоже, що у вас немає програм, щоб поділитися. @@ -1383,7 +1385,7 @@ Підтвердіть свій PIN-код Signal Іноді ми будемо просити вас підтвердити PIN-код, щоб ви його не забували. Підтвердити PIN-код - Давайте почнемо + Для початку Нова група Запросити друзів Кольори чату @@ -1480,6 +1482,8 @@ %1$s змінює своє ім\'я профілю на %2$s. %1$s змінює своє ім\'я профілю з %2$s на %3$s. %1$s змінив (-а) свій профіль. + + You started this chat with %1$s. Ви створили групу. @@ -1864,11 +1868,11 @@ Вимкнути PIN - Оцінити Signal - Якщо вам сподобався Signal, будь-ласка, оцініть його. - Оцінити зараз! - Ні, дякую - Пізніше + Дайте відгук на Signal + Подобається цей застосунок? Ми будемо вдячні, якщо ви знайдете хвилинку на відгук. + Дати відгук зараз + Не хочу + Іншим разом Всі · %1$d @@ -1995,8 +1999,10 @@ Від\'єднано Посилання на виклик у Signal - - Усі, хто приєднається до виклику за цим посиланням, зможуть бачити ваше ім\'я, фото і номер телефону. + + Усі, хто приєднається до виклику за цим посиланням, зможуть бачити ваше ім\'я, фото і номер телефону. + + Усі, хто приєднається до цього виклику за посиланням, зможуть бачити ваше ім\'я і фото. Очікування на дозвіл… @@ -2456,7 +2462,7 @@ Ім\'я користувача видалено. Виникла помилка мережі. - Too many attempts made, please try again later. + Забагато спроб. Краще спробувати знову пізніше. Це ім\'я користувача вже використовується. Імена користувачів можуть мати лише такі символи: a–Z, 0–9 та нижнє підкреслювання. Ім\'я користувача не може починатися з цифри. @@ -2480,7 +2486,7 @@ Номер не може бути 00. Введіть цифру від 1 до 9 - Numbers with more than 2 digits can\'t start with 0 + Якщо в номері понад 2 цифри, він не може починатися з 0 Якщо відновити ім\'я користувача, поточні QR-код і посилання буде скинуто. Відновити ім\'я? @@ -2697,7 +2703,7 @@ Не зараз - Установити ім\'я + Створити ім\'я Відтворити відео @@ -2850,7 +2856,7 @@ SIM %1$d Надіслати Написання повідомлення - Відрити клавіатуру emoji + Відрити клавіатуру емоджі Мініатюра вкладення Увімк/вимк скриньку вкладень камери Записати та надіслати аудіо вкладення @@ -3197,7 +3203,7 @@ Щось не працює Запит на функцію Питання - Зворотній зв\'язок + Зворотний зв\'язок Інший Платежі (MobileCoin) Донати і значки @@ -3212,7 +3218,7 @@ Надіслати - Ні, дякую + Не хочу Це повідомлення @@ -3424,7 +3430,7 @@ Користувацький - Використовувати emoji системи + Використовувати системні емоджі Ретранслювати всі виклики через сервер Signal, щоби ваш контакт не міг розкрити вашу IP-адресу. Увімкнення цієї функції знизить якість виклику. Завжди ретранслювати дзвінки @@ -4106,6 +4112,12 @@ Ніхто не бачитиме, що ви використовуєте Signal, окрім людей, з якими ви вже маєте існуючий чат або яким напишете повідомлення. "Щоб змінити це налаштування, виберіть «Ніхто» для параметра «Хто може бачити мій номер»." + + Відновити ім\'я? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Скасувати Всі Ніхто Блокування екрану @@ -4611,11 +4623,16 @@ Опис групи + Стандартне + Швидше, менше даних + Великий + Повільніше, більше даних - Якість фото + + Якість медіа Запросити ваших друзів @@ -4860,7 +4877,7 @@ Налаштуйте реакції - Торкніться, щоб замінити смайлик + Торкніться, щоб замінити емоджі Скинути Зберегти Автоматично припасувати колір до шпалер @@ -4887,8 +4904,8 @@ Наліпки Backspace GIF-файли - Пошук смайликів - Повернутись до смайликів + Пошук емоджі + Повернутися до емоджі Очистити пошук введених даних Пошук GIF-файлів @@ -5016,7 +5033,7 @@ - Пошук імені чи номеру + Пошук імені або номера · %1$s @@ -5105,6 +5122,32 @@ Один або більше елементів були завеликими Один або кілька елементів були недійсними Обрано забагато елементів + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + %1$d items set to high quality + %1$d items set to high quality + + + + %1$d item set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + %1$d items set to standard quality + Скасувати Малювати @@ -5129,6 +5172,20 @@ Відхилити зміни? Ви втратите усі зміни, що зробили з цим фото. + + Found %1$s + + Start a chat with \"%1$s\" + + До чату + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Продовжити + Мої значки Обраний значок @@ -5172,7 +5229,7 @@ Signal вирізняється. - Конфіденційні повідомлення. Без реклами, трекерів і стеження. + Конфіденційні повідомлення. Без реклами, відстежування й нагляду. Signal працює за рахунок пожертв, тобто для нас ваша конфіденційність є головною. Ми створюємо Signal для вас, а не для ваших даних чи власного прибутку. @@ -5204,9 +5261,9 @@ Значки Поширені запитання про передплату - Інші типи внесків + Інші способи підтримки - Донат для друга + Донат за друга Не вдалося підтвердити донат @@ -5227,7 +5284,7 @@ Очікується оплата - Ваш банківський переказ %1$s очікується. Зазвичай банківські перекази займають 1 робочий день. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Подробиці @@ -5922,7 +5979,7 @@ %1$s · Тривалість: %2$d дн. - Донат для друга + Донат за друга Підтримайте Signal, зробивши донат за друзів чи родичів, які користуються застосунком. Вони отримують спеціальний значок профілю на %1$d день @@ -6205,13 +6262,13 @@ Продовжити - Конфіденційні повідомлення, які фінансуються лише вами. Без реклами, трекерів і компромісу. Підтримайте Signal донатом. + Конфіденційний обмін повідомленнями можливий — завдяки вашим коштам. Без реклами, відстежування й поступок. Підтримайте Signal донатом. Ви маєте донат, що очікує на розгляд - Зазвичай обробка банківських переказів займає 1 робочий день. Будь ласка, зачекайте на проведення платежу, перш ніж оновлювати підписку. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Зазвичай обробка банківських переказів займає 1 робочий день. Будь ласка, зачекайте на проведення платежу, перш ніж робити новий донат. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Ваш донат ще обробляється. Обробка може зайняти кілька хвилин в залежності від вашого з\'єднання. Будь ласка, зачекайте на проведення платежу, перш ніж оновлювати передплату. @@ -6247,7 +6304,7 @@ Кредитна або дебетова картка - Донат для друга + Донат за друга iDEAL @@ -6365,7 +6422,7 @@ Ваш разовий донат очікує на розгляд. Ви зможете відобразити значок «%1$s» у профілі, коли донат буде отримано. - Зазвичай обробка банківських переказів займає 1 робочий день. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Подробиці @@ -6457,18 +6514,18 @@ Встановіть ім\'я користувача Signal - Представляємо конфіденційність номера телефону, додаткові імена користувачів і посилання. + Запроваджуємо конфіденційність номера телефону, посилання й можливість створити ім\'я користувача. - Відхилити + Закрити Подробиці Нові способи додавання контактів - Представляємо конфіденційність номера телефону, додаткові імена користувачів і посилання. + Запроваджуємо конфіденційність номера телефону, посилання й можливість створити ім\'я користувача. - Відхилити + Закрити Подробиці @@ -6714,6 +6771,8 @@ Деталі виклику + + Змінити назву виклику Додати назву дзвінка @@ -6781,6 +6840,10 @@ Ваші QR-код і посилання було скинуто. Натомість було створено нові. Проскануйте цей QR-код телефоном, щоб написати мені в Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Із цим посиланням будь-хто може переглянути ваше ім\'я користувача та розпочати з вами чат. Діліться ним тільки з людьми, яким довіряєте. @@ -6876,6 +6939,10 @@ %1$s не користується Signal. Ви хочете запросити абонента з цим номером? Запросити + + Сканувати QR-код + + Виникла помилка мережі. Спробуйте пізніше. diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index 0212ccf15d..c98ffa4b21 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -426,6 +426,8 @@ SMS میسیجنگ Signal میں مزید سپورٹ نہیں کیا جاتا۔ SMS میسیجنگ Signal میں مزید سپورٹ نہیں کیا جاتا۔ گفتگو کو یہاں رکھنے کے لیے %1$s کو Signal پر مدعو کریں۔ + + یہ شخص Molly مزید استعمال نہیں کر رہا ہے۔ گفتگو کو یہاں جاری رکھنے کے لیے انہیں Molly پر مدعو کریں۔ Molly میں مدعو کریں @@ -536,7 +538,7 @@ اسپام کی رپورٹ کی گئی - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal کو مطلع کر دیا گیا ہے کہ یہ فرد ممکنہ طور پر اسپام بھیج رہا ہے۔ Signal کسی چیٹس کا مواد نہیں دیکھ سکتا۔ اسپام کے طور پر رپورٹ کیا گیا @@ -557,7 +559,7 @@ کرپٹو یا پیسے کے سکیمز - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + اگر کوئی ایسا فرد جسے آپ جانتے نہیں ہیں آپ کو کرپٹو کرنسی (جیسا کہ Bitcoin) یا کسی مالی فائدے کے متعلق میسج کرتا ہے، تو احتیاط کریں—یہ ممکنہ طور پر اسپام ہو سکتا ہے۔ مبہم اور غیر متعلقہ میسجز @@ -818,7 +820,7 @@ دیکھیں - Signal مواصلات مستقل ہونے میں ناکامی! + Molly مواصلات مستقل ہونے میں ناکامی! Molly گوگل پلے سروسز کے ساتھ رجسٹر ہونے کے قابل نہیں تھا۔Molly پیغامات اور کالیں غیر فعال ہو چکے ہیں،براہ کرم ترتیبات میں دوبارہ رجسٹر کرنے کی کوشش کریں اور ایڈوانس میں جائیں۔ @@ -1386,6 +1388,8 @@ %1$s نے اپنا پروفائل نیم تبدیل%2$s کر دیا۔ %1$s نے اپنا پروفائل نیم %2$sسےتبدیل کر کے%3$sکر دیا۔ %1$s نے پروفائل تبدیل کیا۔ + + آپ نے %1$s کے ساتھ یہ چیٹ شروع کی ہے۔ آپ نے گروپ بنایا ہے۔ @@ -1861,8 +1865,10 @@ منقطع ہوا Signal کا کال لنک - - جو کوئی بھی لنک کے ذریعے اس کال میں شامل ہوتا ہے وہ آپ کا نام، تصویر، اور فون نمبر دیکھ سکے گا۔ + + جو کوئی بھی لنک کے ذریعے اس کال میں شامل ہوتا ہے وہ آپ کا نام، تصویر، اور فون نمبر دیکھ سکے گا۔ + + جو بھی اس لنک کے ذریعے کال میں شامل ہو گا آپ کا نام اور تصویر دیکھ سکے گا۔ شامل ہونے کے منتظر… @@ -2296,7 +2302,7 @@ کامیابی کے ساتھ یوزر نیم ہٹا دیا گیا۔ نیٹ ورک کی خرابی کا سامنا کرنا پڑا۔ - Too many attempts made, please try again later. + بہیت زیادہ کوششیں کی گئی ہیں، براہ کرم بعد میں دوبارہ کوشش کریں۔ یہ یوزر نیم لے لیا گیا ہے۔ یوزر نیمز میں صرف – Z-A ، 0–9 ، اور انڈر سکور شامل ہوسکتے ہیں۔ یوزر نیمز کسی نمبر کے ساتھ شروع نہیں ہوسکتے ہیں۔ @@ -2320,7 +2326,7 @@ یہ نمبر 00 نہیں ہو سکتا۔ 1–9 کے درمیان کا کوئی ہندسہ درج کریں - Numbers with more than 2 digits can\'t start with 0 + 2 سے زیادہ ہندسوں والے نمبرز 0 سے شروع نہیں ہو سکتے اپنا یوزر نیم بازیافت کرنے سے آپ کا موجودہ QR کوڈ اور لنک ری سیٹ ہو جائے گا۔ کیا واقعی ایسا چاہتے ہیں؟ @@ -3894,6 +3900,12 @@ کوئی بھی اس وقت تک دیکھ نہیں پائے گا کہ آپ Signal پر ہیں جب تک آپ انہیں میسج نہیں کرتے یا ان کے ساتھ آپ کی کوئی پہلے سے موجود چیٹ ہو۔ "اس سیٹنگ کو تبدیل کرنے کے لیے، کون میرا نمبر دیکھ سکتا ہے کو کوئی بھی نہیں پر سیٹ کر دیں۔" + + کیا واقعی ایسا چاہتے ہیں؟ + + \"مجھے نمبر سے کون تلاش کر سکتا ہے\" کو \"کوئی نہیں\" پر سیٹ کرنے سے لوگوں کے لیے آپ کو Signal پر تلاش کرنا زیادہ مشکل ہو جائے گا۔ + + منسوخ کریں ہر ایک کوئی نہیں سکرین لاک @@ -4391,11 +4403,16 @@ گروپ کی تفصیل + معیار + تیز ، کم ڈیٹا + اونچا + آہستہ ، زیادہ ڈیٹا - تصویر کا معیار + + میڈیا کوالٹی اپنے دوستوں کو بلاؤ @@ -4871,6 +4888,28 @@ ایک یا زائد آئٹمز بہت بڑی تھیں ایک یا زائد آئٹمز غلط تھیں بہت زیادہ آئٹمز منتخب کیے گئے ہیں + + ویڈیو صرف ایک بار ویو پر سیٹ کر دی گئی + + تصویر ایک مرتبہ ویو پر سیٹ کر دی گئی + + ویڈیو ہائی کوالٹی پر سیٹ کر دی گئی + + ویڈیو معیاری کوالٹی پر سیٹ کر دی گئی + + تصویر ہائی کوالٹی پر سیٹ کر دی گئی + + تصویر معیاری کوالٹی پر سیٹ کر دی گئی + + + %1$d آئٹم ہائی کوالٹی پر سیٹ کر دی گئی + %1$d آئٹمز ہائی کوالٹی پر سیٹ کر دی گئیں + + + + %1$d آئٹم معیاری کوالٹی پر سیٹ کردی گئی + %1$d آئٹمز معیاری کوالٹی پر سیٹ کر دی گئیں + منسوخ کریں ڈرا کریں @@ -4895,6 +4934,20 @@ تبدیلیاں رد کریں؟ آپ اس تصویر میں کی گئی کسی بھی تبدیلی سے محروم ہو جائیں گے۔ + + %1$s ملا ہے + + \"%1$s\" کے ساتھ چیٹ شروع کریں + + چیٹ پر جائیں + + + ڈیوائس مربوط کریں؟ + + ایسا لگتا ہے کہ آپ Signal ڈیوائس مربوط کرنے کی کوشش کر رہے ہیں۔ جاری رکھیں پر ٹیپ کریں اور اسے مربوط کرنے کے لیے کوڈ دوبارہ اسکین کریں۔ + + جاری رکھیں + میرے بیجز خصوصی بیج @@ -4993,7 +5046,7 @@ پیمنٹ زیر التواء ہے - آپ کا %1$s کا بینک ٹرانسفر زیر التواء ہے۔ بینک ٹرانسفرز کو مکمل ہونے میں عموماً 1 کاروباری دن لگتا ہے۔ + آپ کی %1$s کی بینک ٹرانسفر زیر التواء ہے۔ بینک ٹرانسفرز کو مکمل ہونے میں 1 سے 14 کاروباری ایام لگ سکتے ہیں۔ مزید جانیں @@ -5937,9 +5990,9 @@ آپ کا ایک عطیہ زیر التوا ہے - بینک ٹرانسفرز کو زیر عمل لانے میں عموماً 1 کاروباری دن لگتا ہے۔ براہ کرم اپنی سبسکرپشن اپ ڈیٹ کرنے سے پہلے اس پیمنٹ کے مکمل ہونے کا انتظار کریں۔ + بینک ٹرانسفرز کو زیر عمل لانے میں 1 سے 14 کاروباری ایام لگ سکتے ہیں۔ براہ کرم اپنی سبسکرپشن اپ ڈیٹ کرنے سے پہلے اس پیمنٹ کے مکمل ہونے کا انتظار کریں۔ - بینک ٹرانسفرز کو زیر عمل لانے میں عموماً 1 کاروباری دن لگتا ہے۔ براہ کرم ایک اور عطیہ دینے سے پہلے اس پیمنٹ کے مکمل ہونے کا انتظار کریں۔ + بینک ٹرانسفرز کو زیر عمل لانے میں 1 سے 14 کاروباری ایام لگ سکتے ہیں۔ براہ کرم ایک اور عطیہ دینے سے پہلے اس پیمنٹ کے مکمل ہونے کا انتظار کریں۔ آپ کا عطیہ اب بھی زیر عمل ہے۔ اس پر چند منٹ لگ سکتے ہیں جس کا انحصار آپ کے کنکشن پر ہے۔ براہ کرم اپنی سبسکرپشن اپ ڈیٹ کرنے سے پہلے اس پیمنٹ کے مکمل ہونے کا انتظار کریں۔ @@ -6091,7 +6144,7 @@ آپ کا ایک وقتی عطیہ زیر التواء ہے۔ جب آپ کا عطیہ موصول ہو جائے گا تو آپ اپنے پروفائل پر %1$s بیج ڈسپلے کر سکیں گے۔ - بینک ٹرانسفرز پر کارروائی کرنے میں عموماً 1 کاروباری دن لگتا ہے۔ %1$s + بینک ٹرانسفرز کو زیر عمل لانے میں 1 سے 14 کاروباری ایام لگ سکتے ہیں۔ %1$s مزید جانیں @@ -6432,6 +6485,8 @@ کال کی تفصیلات + + کال نیم میں ترمیم کریں کال نیم شامل کریں @@ -6499,6 +6554,10 @@ آپ کا QR کوڈ اور لنک ری سیٹ کر دیا گیا ہے اور ایک نیا QR کوڈ اور لنک بنایا گیا ہے۔ میرے ساتھ Signal پر چیٹ کرنے کے لیے اس QR کوڈ کو اپنے فون سے اسکین کریں۔ + + QR نہیں ملا + + Signal QR کوڈ پر مشتمل دوسرا نقش اسکین کرنے کی کوشش کریں۔ اس لنک کے ساتھ کوئی بھی شخص آپ کا یوزر نیم دیکھ سکتا ہے اور آپ کے ساتھ چیٹ کا آغاز کر سکتا ہے۔ اسے محض ان لوگوں کے ساتھ شیئر کریں جو آپ کے نزدیک قابلِ اعتماد ہیں۔ @@ -6590,6 +6649,10 @@ %1$s Signal یوزر نہیں ہے۔ کیا آپ اس نمبر کو مدعو کرنا چاہیں گے؟ مدعو کریں + + QR کوڈ سکین کریں + + نیٹ ورک کی خرابی کا سامنا کرنا پڑا۔ بعد میں دوبارہ کوشش کریں۔ diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 0e474617ff..451cf57640 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -423,6 +423,8 @@ Việc nhắn tin SMS không còn được hỗ trợ trên Signal. Việc nhắn tin SMS không còn được hỗ trợ trên Signal. Mời %1$s sử dụng Signal để tiếp tục cuộc trò chuyện ở đây. + + Người này không còn sử dụng Molly. Mời người đó sử dụng Molly để tiếp tục cuộc trò chuyện ở đây. Mời dùng Molly @@ -527,7 +529,7 @@ Đã báo cáo spam - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal đã được thông báo rằng người này có thể đang gửi spam. Signal không thể xem nội dung của bất kỳ cuộc trò chuyện nào. Đã báo cáo là spam @@ -548,7 +550,7 @@ Lừa đảo tiền điện tử hoặc tiền - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + Nếu một người bạn không biết gửi tin nhắn về tiền điện tử (như Bitcoin) hay một cơ hội kiếm tiền, hãy cẩn trọng—đó có thể là nội dung spam. Tin nhắn không liên quan @@ -800,7 +802,7 @@ Xem - Lỗi thường trực khi giao tiếp qua Signal! + Lỗi thường trực khi giao tiếp qua Molly! Molly không thể kết nối với Dịch vụ Google Play. Cuộc gọi và tin nhắn Molly không khả dụng, hãy thử đăng ký lại từ Cài đặt > Nâng cao. @@ -1339,6 +1341,8 @@ %1$s đã đổi tên hồ sơ thành %2$s. %1$s đã đổi tên hồ sơ từ %2$s thành %3$s. %1$s đã đổi hồ sơ. + + Bạn đã bắt đầu cuộc trò chuyện này với %1$s. Bạn đã tạo nhóm. @@ -1794,8 +1798,10 @@ Đã ngắt kết nối Đường dẫn cuộc gọi Signal - - Bất kỳ ai tham gia cuộc gọi này qua đường dẫn sẽ thấy tên, ảnh, và số điện thoại của bạn. + + Bất kỳ ai tham gia cuộc gọi này qua đường dẫn sẽ thấy tên, ảnh, và số điện thoại của bạn. + + Bất kỳ ai tham gia cuộc gọi này qua đường dẫn sẽ thấy tên và ảnh của bạn. Đang chờ để được tham gia… @@ -2216,7 +2222,7 @@ Xóa tên người dùng thành công. Lỗi mạng. - Too many attempts made, please try again later. + Vượt quá số lần thử, vui lòng thử lại sau. Tên người dùng này đã được sử dụng. Tên người dùng chỉ có thể chứa a–Z, 0–9 và dấu gạch dưới. Tên người dùng không thể bắt đầu bằng một chữ số. @@ -2240,7 +2246,7 @@ Số này không thể là 00. Nhập một ký tự trong khoảng 1–9 - Numbers with more than 2 digits can\'t start with 0 + Số với nhiều hơn 2 chữ số không thể bắt đầu với số 0 Khôi phục lại tên người dùng sẽ đặt lại mã QR và đường dẫn hiện tại của bạn. Bạn có chắc không? @@ -3788,6 +3794,12 @@ Sẽ không có ai nhìn thấy số điện thoại của bạn trên Signal, trừ khi bạn nhắn tin với người đó hoặc đã có một cuộc trò chuyện với người đó. "Để đổi cài đặt này, đặt mục “Ai có thể thấy số của tôi” thành “Không ai cả”." + + Bạn có chắc không? + + Thiết lập tùy chọn “Ai có thể tìm thấy tôi bằng số điện thoại” thành “Không ai” sẽ khiến mọi người khó tìm được bạn hơn trên Signal. + + Hủy Bất cứ ai Không ai Khoá màn hình @@ -4281,11 +4293,16 @@ Miêu tả nhóm + Tiêu chuẩn + Nhanh hơn, ít dữ liệu + Cao + Chậm hơn, nhiều dữ liệu - Chất lượng ảnh + + Chất lượng tập tin đa phương tiện Mời bạn bè của mình @@ -4754,6 +4771,26 @@ Có một hoặc nhiều tập tin quá nặng Có một hoặc nhiều tập tin bị lỗi Bạn chọn quá nhiều tập tin + + Video đã được đặt thành xem một lần + + Ảnh đã được đặt thành xem một lần + + Video đã được đặt thành chất lượng cao + + Video đã được đặt thành chất lượng tiêu chuẩn + + Ảnh đã được đặt thành chất lượng cao + + Ảnh đã được đặt thành chất lượng tiêu chuẩn + + + %1$d mục được đặt thành chất lượng cao + + + + %1$d mục được đặt thành chất lượng tiêu chuẩn + Hủy Kéo @@ -4778,6 +4815,20 @@ Bạn có muốn hủy bỏ các thay đổi không? Bạn sẽ mất tất cả những thay đổi bạn đã làm trên bức ảnh này. + + Đã tìm thấy %1$s + + Bắt đầu cuộc trò chuyện với \"%1$s\" + + Đến cuộc trò chuyện + + + Liên kết thiết bị? + + Có vẻ như bạn đang cố liên kết một thiết bị Signal. Nhấn tiếp tục và quét lại mã để liên kết. + + Tiếp tục + Huy hiệu của tôi Huy hiệu mặc định @@ -4876,7 +4927,7 @@ Đang chờ xử lý khoản thanh toán - Giao dịch chuyển khoản %1$s của bạn đang chờ xử lý. Giao dịch chuyển khoản ngân hàng thường mất 1 ngày làm việc để xử lý. + Giao dịch chuyển khoản %1$s của bạn đang chờ xử lý. Giao dịch chuyển khoản ngân hàng thường mất 1 đến 14 ngày làm việc để hoàn tất. Tìm hiểu thêm @@ -5801,9 +5852,9 @@ Bạn có một khoản ủng hộ đang chờ xử lý - Giao dịch chuyển khoản ngân hàng thường mất 1 ngày làm việc để xử lý. Vui lòng chờ đến khi khoản thanh toán này hoàn tất trước khi cập nhật gói ủng hộ. + Giao dịch chuyển khoản ngân hàng thường mất 1 đến 14 ngày làm việc để xử lý. Vui lòng chờ đến khi khoản thanh toán này hoàn tất trước khi cập nhật gói ủng hộ. - Giao dịch chuyển khoản ngân hàng thường mất 1 ngày làm việc để xử lý. Vui lòng chờ đến khi khoản thanh toán này hoàn tất trước khi gửi thêm khoản ủng hộ khác. + Giao dịch chuyển khoản ngân hàng thường mất 1 đến 14 ngày làm việc để xử lý. Vui lòng chờ đến khi khoản thanh toán này hoàn tất trước khi gửi thêm khoản ủng hộ khác. Khoản ủng hộ của bạn vẫn đang được xử lý. Quá trình này có thể mất vài phút tùy vào kết nối của bạn. Vui lòng chờ đến khi khoản thanh toán này hoàn tất trước khi cập nhật gói ủng hộ. @@ -5954,7 +6005,7 @@ Đang chờ xử lý khoản ủng hộ một lần. Bạn sẽ được chọn hiển thị huy hiệu %1$s trên hồ sơ của mình khi chúng tôi nhận được khoản ủng hộ của bạn. - Giao dịch chuyển khoản ngân hàng thường mất 1 ngày làm việc để xử lý. %1$s + Giao dịch chuyển khoản ngân hàng thường mất 1 đến 14 ngày làm việc để xử lý. %1$s Tìm hiểu thêm @@ -6291,6 +6342,8 @@ Chi tiết cuộc gọi + + Sửa tên cuộc gọi Thêm tên cuộc gọi @@ -6358,6 +6411,10 @@ Mã QR và đường dẫn của bạn đã được đặt lại, một mã QR và đường dẫn mới đã được tạo. Quét mã QR này bằng điện thoại của bạn để trò chuyện với tôi trên Signal. + + Không tìm thấy mã QR + + Thử quét một ảnh khác có chứa mã QR của Signal. Bất kỳ ai có đường dẫn này có thể xem tên người dùng của bạn và bắt đầu trò chuyện với bạn. Chỉ chia sẻ đường dẫn với người bạn tin tưởng. @@ -6447,6 +6504,10 @@ %1$s không phải là người dùng Signal. Bạn có muốn mời số điện thoại này? Mời + + Quét Mã QR + + Gặp phải lỗi kết nối mạng. Hãy thử lại sau. diff --git a/app/src/main/res/values-yue/strings.xml b/app/src/main/res/values-yue/strings.xml index a50afad0ee..9d49edb51d 100644 --- a/app/src/main/res/values-yue/strings.xml +++ b/app/src/main/res/values-yue/strings.xml @@ -423,6 +423,8 @@ Signal 唔會再支援短訊功能。 Signal 唔會再支援短訊功能。邀請 %1$s 加入 Signal 繼續你哋嘅對話。 + + 呢個人冇再用 Molly 喇。邀請佢加入 Molly 繼續對話啦。 拉隊嚟 Molly @@ -527,7 +529,7 @@ 已舉報垃圾訊息 - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal 收到通知,指呢個人可能發送垃圾訊息。Signal 睇唔到任何聊天內容。 已舉報垃圾訊息 @@ -548,7 +550,7 @@ 加密貨幣或者金錢詐騙 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 如果收到關於加密貨幣(例如比特幣),或者聲稱有機會幫你賺錢嘅陌生訊息,千祈要小心 — 呢啲好可能係垃圾訊息。 內容含糊或者唔關事嘅訊息 @@ -800,7 +802,7 @@ 睇下 - Signal 通訊有非暫時嘅失敗! + Molly 通訊有非暫時嘅失敗! Molly 註冊唔到 Google Play 服務。Molly 訊息同通話已經停用,請到 [設定] > [進階] 試下重新註冊。 @@ -1339,6 +1341,8 @@ %1$s 將佢個人檔名轉咗做 %2$s。 %1$s 將佢先前個人檔名 %2$s 轉咗做 %3$s。 %1$s 轉咗佢嘅個人資料。 + + 你開始咗同 %1$s 聊天。 您開咗呢個谷。 @@ -1794,8 +1798,10 @@ 線已斷 Signal 通話連結 - - 透過連結加入呢個通話嘅人都會睇到你個名、相同電話冧把。 + + 透過連結加入呢個通話嘅人都會睇到你個名、相同電話冧把。 + + 透過連結加入呢個通話嘅人會睇到你嘅名同相。 等緊入去… @@ -2216,7 +2222,7 @@ 成功移除咗用戶名稱。 網絡有問題。 - Too many attempts made, please try again later. + 嘗試次數過多,請你遲啲再試過啦。 呢個用戶名稱已經畀人用咗喇。 用戶名稱只可以用 a–Z、0–9 同底線符號。 用戶名稱冇得用數目字開頭。 @@ -2240,7 +2246,7 @@ 呢個數字唔可以係 00。請輸入 1–9 之間嘅數字 - Numbers with more than 2 digits can\'t start with 0 + 超過 2 位數嘅數字唔可以用 0 開頭 恢復用戶名稱會將你宜家用緊嘅二維碼同連結重設。你係咪確定? @@ -3788,6 +3794,12 @@ 除非你向對方傳送訊息或者雙方已經有聊天紀錄,如果唔係冇人會睇到你用緊 Signal。 "要更改呢個設定,請將「邊個可以睇到我嘅手機號碼」設定為「邊個都唔得」。" + + 你係咪確定? + + 將「邊個可以用電話號碼搵到我」設定為「邊個都唔得」,會令其他人更加難喺 Signal 度搵到你。 + + 取消 任何人都得 邊個都唔得 畫面鎖 @@ -4281,11 +4293,16 @@ 個谷嘅描述 + 標準 + 快啲、用少啲數據 + + 慢啲、用多啲數據 - 相片畫質 + + 多媒體檔案嘅畫質 邀請您嘅好友 @@ -4754,6 +4771,26 @@ 有啲項目大得滯 有啲項目無效 揀選嘅項目多得滯 + + 影片設定咗做閱後即毁 + + 相片設定咗做閱後即毁 + + 影片設定咗做高品質 + + 影片設定咗做標準品質 + + 相片設定咗做高品質 + + 相片設定咗做標準品質 + + + %1$d 個項目設定咗做高品質 + + + + %1$d 個項目設定咗做標準品質 + 取消 畫畫 @@ -4778,6 +4815,20 @@ 改過嗰啲嘢係咪掉咗佢? 呢幅相執過嘅嘢,統統都冇得留低個囉噃。 + + 搵到 %1$s + + 開始同「 %1$s 」聊天 + + 跳去聊天 + + + 係咪要連結裝置? + + 你似乎嘗試緊連結一部裝咗 Signal 嘅裝置。㩒一下繼續,然後掃多次個二維碼嚟連結啦。 + + 繼續 + 我嘅襟章 賣飛佛襟章 @@ -4876,7 +4927,7 @@ 付款待處理 - 你嘅 %1$s 銀行轉賬尚待處理。銀行轉賬通常需要 1 個工作天先可以完成。 + 你嘅 %1$s 銀行轉賬尚待處理。銀行轉賬需要 1 至 14 個工作天先處理完成。 了解詳情 @@ -5801,9 +5852,9 @@ 你仲有捐款尚待處理 - 銀行轉賬通常需要 1 個工作日先處理完成。 請你等呢個付款完成咗,然後先更新你嘅定期贊助。 + 銀行轉賬需要 1 至 14 個工作天先處理完成。請你等呢次付款完成咗,先至更新你嘅定期贊助。 - 銀行轉賬通常需要 1 個工作日先處理完成。 請你等呢個付款完成咗,然後先至開始另一次捐款。 + 銀行轉賬需要 1 至 14 個工作天先處理完成。請等待呢次付款處理完成,先至開始另一次捐款。 仲處理緊你嘅捐款。 視乎你嘅上網速度,過程可能需時幾分鐘。請你等呢次付款完成咗,先至更新你嘅定期贊助。 @@ -5954,7 +6005,7 @@ 你嘅單次捐款尚待處理。 我哋收到捐款之後,你就可以喺個人檔案度顯示 %1$s 徽章喇。 - 銀行轉賬通常需要 1 個工作日先處理完成。 %1$s + 銀行轉賬需要 1 至 14 個工作天先處理完成。%1$s 了解詳情 @@ -6291,6 +6342,8 @@ 通話詳情 + + 編輯通話名稱 加入通話名稱 @@ -6358,6 +6411,10 @@ 你嘅二維碼同連結已經重設,系統建立咗一個新嘅二維碼同連結。 用電話掃描呢個二維碼,就開始喺 Signal 同我聊天喇。 + + 搵唔到二維碼 + + 試吓掃描第二張有 Signal 二維碼嘅圖片。 任何擁有呢條連結嘅人都可以睇到你嘅用戶名稱,同埋開始同你傾計。記得淨係好同你信任嘅人分享呀。 @@ -6447,6 +6504,10 @@ %1$s 唔係 Signal 嘅用戶。你想唔想向呢個號碼發出邀請? 邀請 + + 掃描二維碼 + + 網絡有問題。陣間再試下啦。 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index da8393242e..071f5afd8a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -423,6 +423,8 @@ Signal 不再支持短信消息服务。 Signal 不再支持短信消息服务。您可以邀请%1$s加入 Signal,在这里进行对话。 + + 此人已不再使用 Molly。您可以邀请对方加入 Molly,在平台内进行对话。 邀请使用 Molly @@ -527,7 +529,7 @@ 已举报垃圾消息 - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal 已通知此用户,其可能发送了垃圾消息。Signal 无法看到任何聊天的内容。 已举报为垃圾消息 @@ -548,7 +550,7 @@ 加密货币或金钱骗局 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 如有陌生人给您发送有关加密货币(如比特币)或金融投资机会的消息,请当心,这很可能是垃圾消息。 模糊或无关消息 @@ -800,7 +802,7 @@ 查看 - Signal 持续连接失效! + Molly 持续连接失效! Molly 无法注册 Google Play 服务。Molly 消息和呼叫已禁用。请尝试在设置 > 高级中重新注册。 @@ -1339,6 +1341,8 @@ %1$s已将其昵称更改为%2$s。 %1$s已将其昵称从%2$s更改为%3$s。 %1$s 更改了其资料。 + + 您向 %1$s 发起了聊天。 您创建了群组 @@ -1794,8 +1798,10 @@ 连接已断开 Signal 通话链接 - - 通过此链接加入通话的任何人都能看到您的名称、头像和手机号码。 + + 通过此链接加入通话的任何人都能看到您的名称、头像和手机号码。 + + 通过此链接加入通话的任何人都能看到您的名称和头像。 正在等待批准…… @@ -2216,7 +2222,7 @@ 成功移除用户名。 网络出错。 - Too many attempts made, please try again later. + 尝试次数过多,请稍候再试。 该用户名已有人使用。 用户名仅能包含字母、数字和下划线。 用户名不能以数字开头。 @@ -2240,7 +2246,7 @@ 该数字不能为 00。请输入 1 – 9 之间的数字 - Numbers with more than 2 digits can\'t start with 0 + 两位数以上的数字不能以 0 开头 恢复您的用户名将会重置您现有的二维码和链接。确定要恢复吗? @@ -3788,6 +3794,12 @@ 没人能在 Signal 上看到您的上线状态,除非您给对方发送消息,或与对方有一个现有的聊天窗口。 "如要更改此设置,请设置“谁可以看到我的电话号码”。" + + 确定要恢复吗? + + 如果将“谁可以通过电话号码找到我”设置为“没有人”,这将会使其他用户更难在 Signal 上找到您。 + + 取消 所有人 没有人 屏幕锁定 @@ -4281,11 +4293,16 @@ 群组描述 + 标准 + 速度更快,数据更少 + + 速度更慢,数据更多 - 图片质量 + + 媒体质量 邀请好友 @@ -4754,6 +4771,26 @@ 一个或多个项目过大 一个或多个项目无效 选择的项目过多 + + 视频已设置为阅后即焚 + + 照片已设置为阅后即焚 + + 视频已设置为高清 + + 视频已设置为标清 + + 照片已设置为高清 + + 照片已设置为标清 + + + %1$d 个项目已设置为高清 + + + + %1$d 个项目已设置为标清 + 取消 绘画 @@ -4778,6 +4815,20 @@ 要放弃更改吗? 您将会丢失对这张照片所做的任何更改。 + + 找到了 %1$s + + 向“%1$s”发起聊天 + + 前往聊天 + + + 连接设备? + + 您似乎正在尝试连接一个 Signal 设备。请点击继续并再次扫描二维码以进行连接。 + + 继续 + 我的徽章 精选徽章 @@ -4876,7 +4927,7 @@ 付款待处理 - 您的%1$s银行转账正在等待处理。完成银行转账的时间通常为 1 个工作日。 + 您的%1$s银行转账正在等待处理。完成银行转账可能需要 1 至 14 个工作日。 了解详情 @@ -5801,9 +5852,9 @@ 你有一笔捐款正在等待处理 - 处理银行转账的时间通常为 1 个工作日。请等待这笔付款完成后再更新您的订阅。 + 银行转账可能需要 1 至 14 个工作日。请等待这笔付款完成后再更新您的订阅。 - 处理银行转账的时间通常为 1 个工作日。请等待这笔付款完成后再进行另一笔捐款。 + 银行转账可能需要 1 至 14 个工作日。请等待这笔付款完成后再进行另一笔捐款。 您的捐款仍在处理中。这可能需要几分钟时间,视您的网络连接情况而定。请等待这笔付款完成后再更新您的订阅。 @@ -5954,7 +6005,7 @@ 您的单次捐款正在等待处理。当我们收到捐款后,您将可以在个人资料中显示%1$s徽章。 - 处理银行转账的时间通常为 1 个工作日。%1$s + 银行转账可能需要 1 至 14 个工作日。%1$s 了解详情 @@ -6291,6 +6342,8 @@ 通话详情 + + 编辑通话名称 添加通话名称 @@ -6358,6 +6411,10 @@ 您的二维码和链接已重置,新的二维码和链接已创建。 如要在 Signal 上与我聊天,请扫描此二维码吧。 + + 未找到二维码 + + 请尝试扫描另一张包含 Signal 二维码的图片。 收到该链接的任何人可以查看您的用户名并与您发起聊天。请仅将其分享给您信任的人。 @@ -6447,6 +6504,10 @@ %1$s不是 Signal 用户。您想邀请这个号码加入 Signal 吗? 邀请 + + 扫描二维码 + + 网络错误,请稍候重试。 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 4cbbad9b7c..96b722cdc3 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -423,6 +423,8 @@ Signal 不再支援短訊功能。 Signal 不再支援短訊功能。邀請 %1$s 加入 Signal 以繼續對話。 + + 此人不再使用 Molly。邀請他們加入 Molly 以繼續對話。 邀請加入 Molly @@ -527,7 +529,7 @@ 已舉報垃圾訊息 - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal 剛收到通知,此人可能正在發送垃圾訊息。Signal 不能看到任何聊天內容。 已舉報垃圾訊息 @@ -548,7 +550,7 @@ 加密貨幣或金錢詐騙 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 如果陌生人發送了有關加密貨幣(如比特幣)或提供賺錢機會的訊息,請小心— 這可能是垃圾訊息。 模糊或不相關的訊息 @@ -800,7 +802,7 @@ 檢視 - 永久性 Signal 通訊失敗! + 永久性 Molly 通訊失敗! Molly 無法與 Google Play 服務註冊。Molly 訊息和通話已被停用,請到「設定」>「進階」嘗試重新註冊。 @@ -1339,6 +1341,8 @@ %1$s 已將個人檔案名稱改為 %2$s。 %1$s 已將個人檔案名稱 %2$s 改為 %3$s。 %1$s 已變更其個人資料。 + + 你已開始與 %1$s 聊天。 您已建立此群組。 @@ -1794,8 +1798,10 @@ 已中斷連線 Signal 通話連結 - - 透過連結加入此通話的人都會看到你的姓名、相片和電話號碼。 + + 透過連結加入此通話的人都會看到你的姓名、相片和電話號碼。 + + 透過連結加入此通話的人都會看到你的姓名及相片。 正在等待獲准加入… @@ -2216,7 +2222,7 @@ 已成功移除用戶名稱。 遇到網絡問題。 - Too many attempts made, please try again later. + 嘗試次數過多,請稍後再試。 此用戶名稱已有人使用。 用戶名稱僅可包含 a–Z、0–9 以及底線。 用戶名稱不得以數字開首。 @@ -2240,7 +2246,7 @@ 此數字不能為 00。請輸入 1–9 之間的數字 - Numbers with more than 2 digits can\'t start with 0 + 超過 2 位數的數字不能以 0 為首 恢復用戶名稱將重設你現有的二維碼和連結。你確定嗎? @@ -3788,6 +3794,12 @@ 除非你向對方傳送訊息或與對方已有聊天紀錄,否則沒有人能看到你使用 Signal。 "若要變更此設定,請將「誰可以看到我的號碼」設定為「沒有人」。" + + 你確定嗎? + + 將「誰可以透過電話號碼找到我」設定為「沒有人」,會讓別人更難在 Signal上找到你。 + + 取消 所有人 沒有人 畫面鎖定 @@ -4281,11 +4293,16 @@ 群組描述 + 標準 + 較快、較少數據 + 高品質 + 較慢、較多數據 - 相片品質 + + 媒體的品質 邀請您的好友 @@ -4754,6 +4771,26 @@ 部分項目太大 部分項目無效 已選取太多項目 + + 影片設定為閱後即毀 + + 相片設定為閱後即毁 + + 影片設定為高品質 + + 影片設定為標準品質 + + 相片設定為高品質 + + 相片設定為標準品質 + + + %1$d 個項目設定為高品質 + + + + %1$d 個項目設定為標準品質 + 取消 繪畫 @@ -4778,6 +4815,20 @@ 要捨棄變更嗎? 您對此照片所作的任何變更將會遺失。 + + 找到 %1$s + + 開始與「 %1$s 」聊天 + + 前往聊天 + + + 要連結裝置嗎? + + 你似乎正嘗試連結 Signal 裝置。點按繼續並再掃描二維碼以作連結。 + + 繼續 + 我的徽章 主題徽章 @@ -4876,7 +4927,7 @@ 付款正待處理 - 你 %1$s 的銀行轉帳正待處理。 銀行轉帳通常需要 1 個工作天才能完成。 + 你 %1$s 的銀行轉帳正待處理。銀行轉帳需要 1 至 14 個工作天才能完成。 了解更多 @@ -5801,9 +5852,9 @@ 你有捐款正待處理 - 銀行轉帳通常需要 1 個工作天來處理。 請等待付款完成後,才更新你的捐款。 + 銀行轉帳需要 1 至 14 個工作天才能處理。請等待付款完成後,才更新你的定期贊助。 - 銀行轉帳通常需要 1 個工作天來處理。 請等待付款完成後,才進行另一次捐款。 + 銀行轉帳需要 1 至 14 個工作天才能處理。請等待付款完成後,才進行另一次捐款。 你的捐款仍在處理中。 可能需時幾分鐘,視乎你的連線而定。請等待付款完成後,才更新你的定期贊助。 @@ -5954,7 +6005,7 @@ 你的單次捐款正待處理。 收到捐款後,你便能在個人資料中顯示 %1$s 徽章。 - 銀行轉帳通常需要 1 個工作天來處理。 %1$s + 銀行轉帳需要 1 至 14 個工作天才能處理。%1$s 了解更多 @@ -6291,6 +6342,8 @@ 通話詳情 + + 編輯通話名稱 新增通話名稱 @@ -6358,6 +6411,10 @@ 你的二維碼和連結已重設,並且已建立一個新的二維碼及連結。 用你的手機掃描此二維碼,開始與我在 Signal 上聊天。 + + 找不到二維碼 + + 嘗試掃描另一張含有 Signal 二維碼的圖片。 任何人憑此連結將可檢視你的用戶名稱,並開始與你聊天。請只與你信任的人分享此連結。 @@ -6447,6 +6504,10 @@ %1$s 不是 Signal 用戶。你想向此號碼發出邀請嗎? 邀請 + + 掃描二維碼 + + 遇到網絡問題。請稍後再試。 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1e5ce1ac50..0822279bf2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -423,6 +423,8 @@ Signal 不再支援短訊功能。 Signal 不再支援短訊功能。邀請 %1$s 加入 Signal 以繼續對話。 + + 此人不再使用 Molly。邀請他們加入 Molly 以繼續對話。 邀請至 Molly @@ -527,7 +529,7 @@ 已舉報垃圾訊息 - Signal has been notified that this person may be sending spam. Signal can’t see the content of any chats. + Signal 剛收到通知,此人可能正在發送垃圾訊息。Signal 不能看到任何聊天內容。 已舉報垃圾訊息 @@ -548,7 +550,7 @@ 加密貨幣或金錢詐騙 - If someone you don’t know messages about cryptocurrency (like Bitcoin) or a financial opportunity, be careful—it’s likely spam. + 如果陌生人發送了有關加密貨幣(如比特幣)或提供賺錢機會的訊息,請小心— 這可能是垃圾訊息。 模糊或不相關的訊息 @@ -800,7 +802,7 @@ 檢視 - Signal 持續發生傳輸異常! + Molly 持續發生傳輸異常! Molly 無法順利與 Google Play Services 註冊,Molly 訊息與通話已經停用,請嘗試在設定 > 進階中重新註冊。 @@ -1339,6 +1341,8 @@ %1$s變更他們的個人資訊名稱為%2$s。 %1$s變更他們的個人資訊名稱從%2$s改為%3$s。 %1$s已變更他們個人資訊。 + + 你已開始與 %1$s 聊天。 你建立了一個群組。 @@ -1794,8 +1798,10 @@ 已斷線 Signal 通話連結 - - 透過連結加入此通話的人都會看到你的姓名、相片和電話號碼。 + + 透過連結加入此通話的人都會看到你的姓名、相片和電話號碼。 + + 透過連結加入此通話的人都會看到你的姓名及相片。 正在等待獲准加入… @@ -2216,7 +2222,7 @@ 成功移除使用者名稱。 網路連接錯誤。 - Too many attempts made, please try again later. + 嘗試次數過多,請稍後再試。 這個使用者名稱已經被使用。 使用者名稱只能包含a–Z,0–9和底線。 使用者名稱不可以以數字開頭。 @@ -2240,7 +2246,7 @@ 此數字不能為 00。請輸入 1–9 之間的數字 - Numbers with more than 2 digits can\'t start with 0 + 超過 2 位數的數字不能以 0 為首 恢復用戶名稱將重設你現有的二維碼和連結。你確定嗎? @@ -3788,6 +3794,12 @@ 除非你向對方傳送訊息或與對方已有聊天記錄,否則沒有人能看到你使用 Signal。 "若要變更此設定,請將「誰可以看到我的號碼」設定為「沒有人」。" + + 你確定嗎? + + 將「誰可以透過電話號碼找到我」設定為「沒有人」,會讓別人更難在 Signal上找到你。 + + 取消 所有人 沒有人 螢幕鎖定 @@ -4281,11 +4293,16 @@ 群組描述 + 標準 + 更快,更少數據 + + 較慢,數據更多 - 照片畫質 + + 媒體檔品質 邀請你的朋友 @@ -4754,6 +4771,26 @@ 一件或多件項目容量太大 一項或多項無效 選擇的項目太多 + + 影片設定為閱後即毀 + + 相片設定為閱後即毁 + + 影片設定為高品質 + + 影片設定為標準品質 + + 相片設定為高品質 + + 相片設定為標準品質 + + + %1$d 個項目設定為高品質 + + + + %1$d 個項目設定為標準品質 + 取消 繪圖 @@ -4778,6 +4815,20 @@ 放棄更改? 你將遺失對此照片所做的任何更改。 + + 找到 %1$s + + 開始與「 %1$s 」聊天 + + 到聊天 + + + 要連結裝置嗎? + + 你似乎正嘗試連結 Signal 裝置。點按繼續並再掃描二維碼以作連結。 + + 繼續 + 我的徽章 特色徽章 @@ -4876,7 +4927,7 @@ 付款正待處理 - 你 %1$s 的銀行轉帳正待處理。 銀行轉帳通常需要 1 個工作天才能完成。 + 你 %1$s 的銀行轉帳正待處理。銀行轉帳需要 1 至 14 個工作天才能完成。 了解更多 @@ -5801,9 +5852,9 @@ 你有捐款正待處理 - 銀行轉帳通常需要 1 個工作天來處理。 請等待付款完成後,才更新你的捐款。 + 銀行轉帳需要 1 至 14 個工作天才能處理。請等待付款完成後,才更新你的定期贊助。 - 銀行轉帳通常需要 1 個工作天來處理。 請等待付款完成後,才進行另一次捐款。 + 銀行轉帳需要 1 至 14 個工作天才能處理。請等待付款完成後,才進行另一次捐款。 你的捐款仍在處理中。 可能需時幾分鐘,視乎你的連線而定。請等待付款完成後,才更新你的定期贊助。 @@ -5954,7 +6005,7 @@ 你的單次捐款正待處理。 收到捐款後,你便能在個人資料中顯示 %1$s 徽章。 - 銀行轉帳通常需要 1 個工作天來處理。 %1$s + 銀行轉帳需要 1 至 14 個工作天才能處理。%1$s 了解更多 @@ -6291,6 +6342,8 @@ 通話詳情 + + 編輯通話名稱 新增通話名稱 @@ -6358,6 +6411,10 @@ 你的二維碼和連結已重設,並且已建立一個新的二維碼及連結。 用你的手機掃描此二維碼,開始與我在 Signal 上聊天。 + + 找不到二維碼 + + 嘗試掃描另一張含有 Signal 二維碼的圖片。 任何人憑此連結將可檢視你的用戶名稱,並開始與你聊天。請只與你信任的人分享此連結。 @@ -6447,6 +6504,10 @@ %1$s 不是 Signal 用戶。你想向此號碼發出邀請嗎? 邀請 + + 掃描 QR code + + 網路錯誤。請稍後再試。 diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 8f5801e713..1c1bb2c3e9 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -280,8 +280,6 @@ - - diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index d5dc31cef9..f271bc017f 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -231,4 +231,12 @@ 32dp 24dp + + 44dp + 1dp + 40dp + 6dp + 40dp + 6dp + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ac8a991f4c..5ccc637a8d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -426,6 +426,8 @@ SMS messaging is no longer supported in Signal. SMS messaging is no longer supported in Signal. Invite %1$s to Signal to keep the conversation here. + + This person is no longer using Molly. Invite them to Molly to keep the conversation here. Invite to Molly @@ -818,7 +820,7 @@ View - Permanent Signal communication failure! + Permanent Molly communication failure! Molly was unable to register with Google Play Services. Molly messages and calls have been disabled, please try re-registering in Settings > Advanced. @@ -1386,6 +1388,8 @@ %1$s changed their profile name to %2$s. %1$s changed their profile name from %2$s to %3$s. %1$s changed their profile. + + You started this chat with %1$s. You created the group. @@ -1862,8 +1866,10 @@ Disconnected Signal call link - - Anyone who joins this call via the link will see your name, photo, and phone number. + + Anyone who joins this call via the link will see your name, photo, and phone number. + + Anyone who joins this call via the link will see your name and photo. Waiting to be let in… @@ -3894,6 +3900,12 @@ Nobody will be able to see you\'re on Signal unless you message them or have an existing chat with them. To change this setting, set "Who can see my number" to "Nobody". + + Are you sure? + + Setting \"Who can find me by number\" to \"Nobody\" will make it harder for people to find you on Signal. + + Cancel Everyone Nobody Screen lock @@ -4391,11 +4403,16 @@ Group description + Standard + Faster, less data + High + Slower, more data - Photo quality + + Media quality Invite your friends @@ -4871,6 +4888,28 @@ One or more items were too large One or more items were invalid Too many items selected + + Video set to view once + + Photo set to view once + + Video set to high quality + + Video set to standard quality + + Photo set to high quality + + Photo set to standard quality + + + %1$d item set to high quality + %1$d items set to high quality + + + + %d item set to standard quality + %d items set to standard quality + Cancel Draw @@ -4895,6 +4934,20 @@ Discard changes? You\'ll lose any changes you\'ve made to this photo. + + Found %1$s + + Start a chat with \"%1$s\" + + Go to chat + + + Link device? + + It looks like you\'re trying to link a Signal device. Tap continue and scan the code again to link it. + + Continue + My badges Featured badge @@ -4993,7 +5046,7 @@ Payment pending - Your bank transfer of %1$s is pending. Bank transfers usually take 1 business day to complete. + Your bank transfer of %1$s is pending. Bank transfers can take 1 to 14 business days to complete. Learn more @@ -5937,9 +5990,9 @@ You have a donation pending - Bank transfers usually take 1 business day to process. Please wait until this payment completes before updating your subscription. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before updating your subscription. - Bank transfers usually take 1 business day to process. Please wait until this payment completes before making another donation. + Bank transfers can take 1 to 14 business days to process. Please wait until this payment completes before making another donation. Your donation is still being processed. This can take a few minutes depending on your connection. Please wait until this payment completes before updating your subscription. @@ -6091,7 +6144,7 @@ Your one-time donation is pending. You’ll be able to display the %1$s badge on your profile when your donation is received. - Bank transfers usually take 1 business day to process. %1$s + Bank transfers can take 1 to 14 business days to process. %1$s Learn more @@ -6432,6 +6485,8 @@ Call details + + Edit call name Add call name @@ -6499,6 +6554,10 @@ Your QR code and link have been reset and a new QR code and link has been created. Scan this QR code with your phone to chat with me on Signal. + + QR code not found + + Try scanning another image containing a Signal QR code. Anyone with this link can view your username and start a chat with you. Only share it with people you trust. @@ -6590,6 +6649,10 @@ %1$s is not a Signal user. Would you like to invite this number? Invite + + Scan QR code + + Encountered a network error. Try again later. diff --git a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt index 48d14a4683..12198e7e43 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReaderWriterTest.kt @@ -8,6 +8,7 @@ package org.thoughtcrime.securesms.backup.v2.stream import org.junit.Assert.assertEquals import org.junit.Test import org.thoughtcrime.securesms.backup.v2.proto.AccountData +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 @@ -26,6 +27,7 @@ class EncryptedBackupReaderWriterTest { val frameCount = 10_000 EncryptedBackupWriter(key, aci, outputStream, append = { outputStream.write(it) }).use { writer -> + writer.write(BackupInfo(1, 1000L)) for (i in 0 until frameCount) { writer.write(Frame(account = AccountData(username = "username-$i"))) } @@ -34,6 +36,8 @@ class EncryptedBackupReaderWriterTest { val ciphertext: ByteArray = outputStream.toByteArray() val frames: List = EncryptedBackupReader(key, aci, ciphertext.size.toLong()) { ciphertext.inputStream() }.use { reader -> + assertEquals(reader.backupInfo?.version, 1L) + assertEquals(reader.backupInfo?.backupTimeMs, 1000L) reader.asSequence().toList() } diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt index 4bb223f429..2dac3b81cb 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt @@ -125,12 +125,6 @@ object RecipientDatabaseTestUtils { unidentifiedAccessMode = unidentifiedAccessMode, capabilities = RecipientRecord.Capabilities( rawBits = capabilities, - groupsV1MigrationCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GROUPS_V1_MIGRATION, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - senderKeyCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.SENDER_KEY, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - announcementGroupCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.ANNOUNCEMENT_GROUPS, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - changeNumberCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.CHANGE_NUMBER, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - storiesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.STORIES, RecipientTable.Capabilities.BIT_LENGTH).toInt()), - giftBadgesCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.GIFT_BADGES, RecipientTable.Capabilities.BIT_LENGTH).toInt()), pnpCapability = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PNP, RecipientTable.Capabilities.BIT_LENGTH).toInt()), paymentActivation = Recipient.Capability.deserialize(Bitmask.read(capabilities, RecipientTable.Capabilities.PAYMENT_ACTIVATION, RecipientTable.Capabilities.BIT_LENGTH).toInt()) ), diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt index a07f5db505..e81e6e3ffe 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/SmsDatabaseTest.kt @@ -26,6 +26,9 @@ class SmsDatabaseTest { fun setup() { val sqlCipher = TestDatabaseUtil.inMemoryDatabase { execSQL(MessageTable.CREATE_TABLE) + MessageTable.CREATE_INDEXS.forEach { + execSQL(it) + } } db = sqlCipher.writableDatabase diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java index 72cd7a2048..23594e3943 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java @@ -24,6 +24,8 @@ import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; +import org.thoughtcrime.securesms.backup.v2.proto.GroupChangeChatUpdate; +import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.signalservice.api.push.ServiceId; @@ -34,6 +36,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.ListIterator; import java.util.UUID; import java.util.stream.Collectors; @@ -62,6 +65,8 @@ public final class GroupsV2UpdateMessageProducerTest { private ACI alice; private ACI bob; + private ServiceIds selfIds; + private GroupsV2UpdateMessageProducer producer; @Rule @@ -79,6 +84,8 @@ public void setup() { alice = ACI.from(UUID.randomUUID()); bob = ACI.from(UUID.randomUUID()); + selfIds = new ServiceIds(you, PNI.from(UUID.randomUUID())); + recipientIdMockedStatic.when(() -> RecipientId.from(anyLong())).thenCallRealMethod(); RecipientId aliceId = RecipientId.from(1); @@ -87,7 +94,7 @@ public void setup() { Recipient aliceRecipient = recipientWithName(aliceId, "Alice"); Recipient bobRecipient = recipientWithName(bobId, "Bob"); - producer = new GroupsV2UpdateMessageProducer(ApplicationProvider.getApplicationContext(), new ServiceIds(you, PNI.from(UUID.randomUUID())), null); + producer = new GroupsV2UpdateMessageProducer(ApplicationProvider.getApplicationContext(), selfIds, null); recipientIdMockedStatic.when(() -> RecipientId.from(alice)).thenReturn(aliceId); recipientIdMockedStatic.when(() -> RecipientId.from(bob)).thenReturn(bobId); @@ -98,7 +105,7 @@ public void setup() { private static Recipient recipientWithName(RecipientId id, String name) { Recipient recipient = mock(Recipient.class); when(recipient.getId()).thenReturn(id); - when(recipient.getDisplayNameOrUsername(any())).thenReturn(name); + when(recipient.getDisplayName(any())).thenReturn(name); return recipient; } @@ -1422,6 +1429,27 @@ public void makeRecipientsClickable_complicated() { assertEquals("Alice said hello to Bob, and Bob said hello back to Alice.", result.toString()); } + private @NonNull String describeConvertedNewGroup(@NonNull DecryptedGroup groupState, @NonNull DecryptedGroupChange groupChange) { + GroupChangeChatUpdate update = GroupsV2UpdateMessageConverter.translateDecryptedChangeNewGroup(selfIds, new DecryptedGroupV2Context.Builder() + .change(groupChange) + .groupState(groupState) + .build()); + + return producer.describeChanges(update.updates).get(0).getSpannable().toString(); + } + + private @NonNull List describeConvertedChange(@Nullable DecryptedGroup previousGroupState, @NonNull DecryptedGroupChange change) { + GroupChangeChatUpdate update = GroupsV2UpdateMessageConverter.translateDecryptedChangeUpdate(selfIds, new DecryptedGroupV2Context.Builder() + .change(change) + .previousGroupState(previousGroupState) + .build()); + + return Stream.of(producer.describeChanges(update.updates)) + .map(UpdateDescription::getSpannable) + .map(Spannable::toString) + .toList(); + } + private @NonNull List describeChange(@NonNull DecryptedGroupChange change) { return describeChange(null, change); } @@ -1429,10 +1457,20 @@ public void makeRecipientsClickable_complicated() { private @NonNull List describeChange(@Nullable DecryptedGroup previousGroupState, @NonNull DecryptedGroupChange change) { - return Stream.of(producer.describeChanges(previousGroupState, change)) - .map(UpdateDescription::getSpannable) - .map(Spannable::toString) - .toList(); + List convertedChange = describeConvertedChange(previousGroupState, change); + List describedChange = Stream.of(producer.describeChanges(previousGroupState, change)) + .map(UpdateDescription::getSpannable) + .map(Spannable::toString) + .toList(); + assertEquals(describedChange.size(), convertedChange.size()); + + ListIterator convertedIterator = convertedChange.listIterator(); + ListIterator describedIterator = describedChange.listIterator(); + + while (convertedIterator.hasNext()) { + assertEquals(describedIterator.next(), convertedIterator.next()); + } + return describedChange; } private @NonNull String describeNewGroup(@NonNull DecryptedGroup group) { @@ -1440,7 +1478,12 @@ public void makeRecipientsClickable_complicated() { } private @NonNull String describeNewGroup(@NonNull DecryptedGroup group, @NonNull DecryptedGroupChange groupChange) { - return producer.describeNewGroup(group, groupChange).getSpannable().toString(); + String newGroupString = producer.describeNewGroup(group, groupChange).getSpannable().toString(); + String convertedGroupString = describeConvertedNewGroup(group, groupChange); + + assertEquals(newGroupString, convertedGroupString); + + return newGroupString; } private static GroupStateBuilder newGroupBy(ACI foundingMember, int revision) { diff --git a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt index 6cc5d63d4e..c2614d0547 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/sms/UploadDependencyGraphTest.kt @@ -255,7 +255,8 @@ class UploadDependencyGraphTest { audioHash = attachment.audioHash, transformProperties = attachment.transformProperties, displayOrder = 0, - uploadTimestamp = attachment.uploadTimestamp + uploadTimestamp = attachment.uploadTimestamp, + dataHash = null ) } diff --git a/app/src/testShared/org/thoughtcrime/securesms/database/FakeMessageRecords.kt b/app/src/testShared/org/thoughtcrime/securesms/database/FakeMessageRecords.kt index fff425ea77..ebaeba6e9b 100644 --- a/app/src/testShared/org/thoughtcrime/securesms/database/FakeMessageRecords.kt +++ b/app/src/testShared/org/thoughtcrime/securesms/database/FakeMessageRecords.kt @@ -55,7 +55,8 @@ object FakeMessageRecords { audioHash: AudioHash? = null, transformProperties: AttachmentTable.TransformProperties? = null, displayOrder: Int = 0, - uploadTimestamp: Long = 200 + uploadTimestamp: Long = 200, + dataHash: String? = null ): DatabaseAttachment { return DatabaseAttachment( attachmentId, @@ -85,7 +86,8 @@ object FakeMessageRecords { audioHash, transformProperties, displayOrder, - uploadTimestamp + uploadTimestamp, + dataHash ) } diff --git a/build-logic/plugins/src/main/java/licenses.gradle.kts b/build-logic/plugins/src/main/java/licenses.gradle.kts index c68eabb8e0..475bb995c4 100644 --- a/build-logic/plugins/src/main/java/licenses.gradle.kts +++ b/build-logic/plugins/src/main/java/licenses.gradle.kts @@ -86,6 +86,10 @@ task("saveLicenses") { output.append("\n") } + output.append("Kyber Patent License\n") + output.append("https://csrc.nist.gov/csrc/media/Projects/post-quantum-cryptography/documents/selected-algos-2022/nist-pqc-license-summary-and-excerpts.pdf\n") + output.append("\n") + // Save the file to disk rootProject .file("app/src/main/res/raw/third_party_licenses") diff --git a/core-ui/src/main/java/org/signal/core/ui/Animations.kt b/core-ui/src/main/java/org/signal/core/ui/Animations.kt new file mode 100644 index 0000000000..4d7103b053 --- /dev/null +++ b/core-ui/src/main/java/org/signal/core/ui/Animations.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.ui + +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.core.FiniteAnimationSpec +import androidx.compose.animation.core.tween +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.runtime.Stable +import kotlin.time.Duration.Companion.milliseconds + +object Animations { + + private val NAV_HOST_DEFAULT_ANIMATION_DURATION = 200.milliseconds + + @Stable + fun navHostDefaultAnimationSpec(): FiniteAnimationSpec { + return tween( + durationMillis = NAV_HOST_DEFAULT_ANIMATION_DURATION.inWholeMilliseconds.toInt() + ) + } + + fun navHostSlideInTransition(initialOffsetX: (Int) -> Int): EnterTransition { + return slideInHorizontally( + animationSpec = navHostDefaultAnimationSpec(), + initialOffsetX = initialOffsetX + ) + } + + fun navHostSlideOutTransition(targetOffsetX: (Int) -> Int): ExitTransition { + return slideOutHorizontally( + animationSpec = navHostDefaultAnimationSpec(), + targetOffsetX = targetOffsetX + ) + } +} diff --git a/core-ui/src/main/java/org/signal/core/ui/Dialogs.kt b/core-ui/src/main/java/org/signal/core/ui/Dialogs.kt index 2defa929d0..8ffc3af522 100644 --- a/core-ui/src/main/java/org/signal/core/ui/Dialogs.kt +++ b/core-ui/src/main/java/org/signal/core/ui/Dialogs.kt @@ -1,19 +1,37 @@ package org.signal.core.ui +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.material3.AlertDialogDefaults import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties +import org.signal.core.ui.Dialogs.PermissionRationaleDialog import org.signal.core.ui.Dialogs.SimpleAlertDialog import org.signal.core.ui.Dialogs.SimpleMessageDialog +import org.signal.core.ui.theme.SignalTheme object Dialogs { @@ -31,7 +49,11 @@ object Dialogs { ) { androidx.compose.material3.AlertDialog( onDismissRequest = onDismiss, - title = if (title == null) null else { { Text(text = title) } }, + title = if (title == null) { + null + } else { + { Text(text = title) } + }, text = { Text(text = message) }, confirmButton = { TextButton(onClick = { @@ -105,6 +127,86 @@ object Dialogs { .size(100.dp) ) } + + @OptIn(ExperimentalLayoutApi::class) + @Composable + fun PermissionRationaleDialog( + icon: Painter, + rationale: String, + confirm: String, + dismiss: String, + onConfirm: () -> Unit, + onDismiss: () -> Unit + ) { + Dialog( + onDismissRequest = onDismiss, + properties = DialogProperties(usePlatformDefaultWidth = false) + ) { + Surface( + modifier = Modifier + .fillMaxWidth(fraction = 0.75f) + .background( + color = SignalTheme.colors.colorSurface2, + shape = AlertDialogDefaults.shape + ) + .clip(AlertDialogDefaults.shape) + ) { + Column { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier + .fillMaxWidth() + .background(color = MaterialTheme.colorScheme.primary) + .padding(48.dp) + ) { + Icon( + painter = icon, + contentDescription = null, + tint = MaterialTheme.colorScheme.onPrimary, + modifier = Modifier.size(32.dp) + ) + } + Text( + text = rationale, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier + .padding(horizontal = 24.dp, vertical = 16.dp) + ) + + FlowRow( + horizontalArrangement = Arrangement.End, + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp, end = 24.dp, bottom = 24.dp) + ) { + TextButton(onClick = onDismiss) { + Text(text = dismiss) + } + + TextButton(onClick = onConfirm) { + Text(text = confirm) + } + } + } + } + } + } +} + +@Preview +@Composable +private fun PermissionRationaleDialogPreview() { + Previews.Preview { + PermissionRationaleDialog( + icon = painterResource(id = android.R.drawable.ic_menu_camera), + rationale = "This is rationale text about why we need permission.", + confirm = "Continue", + dismiss = "Not now", + onConfirm = {}, + onDismiss = {} + ) + } } @Preview diff --git a/core-util-jvm/src/main/java/org/signal/core/util/LongExtensions.kt b/core-util-jvm/src/main/java/org/signal/core/util/LongExtensions.kt new file mode 100644 index 0000000000..8bd8b2c414 --- /dev/null +++ b/core-util-jvm/src/main/java/org/signal/core/util/LongExtensions.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util + +import java.nio.ByteBuffer + +/** + * Converts the long into [ByteArray]. + */ +fun Long.toByteArray(): ByteArray { + return ByteBuffer + .allocate(Long.SIZE_BYTES) + .putLong(this) + .array() +} diff --git a/dependencies.gradle.kts b/dependencies.gradle.kts index 7269e3e6ca..241aeb3ac5 100644 --- a/dependencies.gradle.kts +++ b/dependencies.gradle.kts @@ -15,7 +15,7 @@ dependencyResolutionManagement { version("exoplayer", "2.19.0") version("glide", "4.15.1") version("kotlin", "1.8.10") - version("libsignal-client", "0.39.2") + version("libsignal-client", "0.40.1") version("mp4parser", "1.9.39") version("android-gradle-plugin", "8.0.2") version("accompanist", "0.28.0") @@ -99,8 +99,8 @@ dependencyResolutionManagement { // Google library("google-protobuf-javalite", "com.google.protobuf:protobuf-javalite:3.11.4") library("google-libphonenumber", "com.googlecode.libphonenumber:libphonenumber:8.13.23") - library("google-play-services-maps", "com.google.android.gms:play-services-maps:18.1.0") - library("google-play-services-auth", "com.google.android.gms:play-services-auth:20.3.0") + library("google-play-services-maps", "com.google.android.gms:play-services-maps:18.2.0") + library("google-play-services-auth", "com.google.android.gms:play-services-auth:21.0.0") library("google-zxing-android-integration", "com.google.zxing:android-integration:3.3.0") library("google-zxing-core", "com.google.zxing:core:3.4.1") library("google-ez-vcard", "com.googlecode.ez-vcard:ez-vcard:0.9.11") @@ -117,7 +117,7 @@ dependencyResolutionManagement { library("libsignal-client", "org.signal", "libsignal-client").versionRef("libsignal-client") library("libsignal-android", "org.signal", "libsignal-android").versionRef("libsignal-client") library("signal-aesgcmprovider", "org.signal:aesgcmprovider:0.0.3") - library("molly-ringrtc", "im.molly:ringrtc-android:2.37.1-1") + library("molly-ringrtc", "im.molly:ringrtc-android:2.39.0-1") library("signal-android-database-sqlcipher", "org.signal:sqlcipher-android:4.5.4-S2") // MOLLY diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 777128a42e..7293754c70 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -21,6 +21,9 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + @@ -200,6 +203,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1067,6 +1075,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1147,6 +1163,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1205,6 +1229,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1288,6 +1320,9 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + @@ -1337,12 +1372,23 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + @@ -1392,6 +1438,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -1413,6 +1467,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -1705,6 +1764,9 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + @@ -3076,19 +3138,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - - + + + - - - + + + @@ -3106,11 +3168,21 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + @@ -3121,9 +3193,9 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + @@ -3141,9 +3213,9 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + @@ -4294,6 +4366,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5366,6 +5443,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5401,6 +5483,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + @@ -5441,6 +5528,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -5478,6 +5573,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -5499,6 +5602,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -5964,28 +6075,28 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/CancelationException.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/CancelationException.java index 221433ae9a..cd1692f092 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/CancelationException.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/CancelationException.java @@ -3,4 +3,10 @@ import java.io.IOException; public class CancelationException extends IOException { + public CancelationException() { + } + + public CancelationException(Throwable cause) { + super(cause); + } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index 675066231a..964f501230 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -8,6 +8,7 @@ import com.squareup.wire.FieldEncoding; +import org.signal.libsignal.net.Network; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; import org.signal.libsignal.protocol.InvalidKeyException; @@ -35,6 +36,7 @@ import org.whispersystems.signalservice.api.groupsv2.GroupsV2Api; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; import org.whispersystems.signalservice.api.kbs.MasterKey; +import org.whispersystems.signalservice.api.keys.KeysApi; import org.whispersystems.signalservice.api.messages.calls.TurnServerInfo; import org.whispersystems.signalservice.api.messages.multidevice.DeviceInfo; import org.whispersystems.signalservice.api.payments.CurrencyConversions; @@ -136,7 +138,6 @@ public class SignalServiceAccountManager { private final GroupsV2Operations groupsV2Operations; private final SignalServiceConfiguration configuration; - /** * Construct a SignalServiceAccountManager. * @param configuration The URL for the Signal Service. @@ -383,11 +384,12 @@ public CdsiV2Service.Response getRegisteredUsersWithCdsi(Set previousE16 Optional token, String mrEnclave, Long timeoutMs, + @Nullable Network.Environment libsignalNetEnv, Consumer tokenSaver) throws IOException { CdsiAuthResponse auth = pushServiceSocket.getCdsiAuth(); - CdsiV2Service service = new CdsiV2Service(configuration, mrEnclave); + CdsiV2Service service = new CdsiV2Service(configuration, mrEnclave, libsignalNetEnv); CdsiV2Service.Request request = new CdsiV2Service.Request(previousE164s, newE164s, serviceIds, token); Single> single = service.getRegisteredUsers(auth.getUsername(), auth.getPassword(), request, tokenSaver); @@ -1045,6 +1047,10 @@ public ArchiveApi getArchiveApi() { return ArchiveApi.create(pushServiceSocket, configuration.getBackupServerPublicParams(), credentials.getAci()); } + public KeysApi getKeysApi() { + return KeysApi.create(pushServiceSocket); + } + public AuthCredentials getPaymentsAuthorization() throws IOException { return pushServiceSocket.getPaymentsAuthorization(); } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index d59680a806..c50fb4fee3 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -5,7 +5,9 @@ */ package org.whispersystems.signalservice.api; +import org.signal.core.util.Base64; import org.signal.libsignal.metadata.certificate.SenderCertificate; +import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.InvalidRegistrationIdException; @@ -85,6 +87,7 @@ import org.whispersystems.signalservice.api.util.Uint64Util; import org.whispersystems.signalservice.api.util.UuidUtil; import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException; +import org.whispersystems.signalservice.internal.ServiceResponse; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import org.whispersystems.signalservice.internal.crypto.AttachmentDigest; import org.whispersystems.signalservice.internal.crypto.PaddingInputStream; @@ -128,7 +131,6 @@ import org.whispersystems.signalservice.internal.push.http.PartialSendCompleteListener; import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec; import org.whispersystems.signalservice.internal.util.Util; -import org.signal.core.util.Base64; import org.whispersystems.util.ByteArrayUtil; import java.io.IOException; @@ -151,7 +153,13 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.Scheduler; +import io.reactivex.rxjava3.core.Single; +import io.reactivex.rxjava3.schedulers.Schedulers; +import kotlin.Unit; import okio.ByteString; /** @@ -179,6 +187,7 @@ public class SignalServiceMessageSender { private final ExecutorService executor; private final long maxEnvelopeSize; + private final boolean useRxMessageSend; public SignalServiceMessageSender(SignalServiceConfiguration urls, CredentialsProvider credentialsProvider, @@ -190,7 +199,8 @@ public SignalServiceMessageSender(SignalServiceConfiguration urls, ClientZkProfileOperations clientZkProfileOperations, ExecutorService executor, long maxEnvelopeSize, - boolean automaticNetworkRetry) + boolean automaticNetworkRetry, + boolean useRxMessageSend) { this.socket = new PushServiceSocket(urls, credentialsProvider, signalAgent, clientZkProfileOperations, automaticNetworkRetry); this.aciStore = store.aci(); @@ -204,6 +214,7 @@ public SignalServiceMessageSender(SignalServiceConfiguration urls, this.executor = executor != null ? executor : Executors.newSingleThreadExecutor(); this.maxEnvelopeSize = maxEnvelopeSize; this.localPniIdentity = store.pni().getIdentityKeyPair(); + this.useRxMessageSend = useRxMessageSend; } /** @@ -230,7 +241,7 @@ public SendMessageResult sendReceipt(SignalServiceAddress recipient, EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - return sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), message.getWhen(), envelopeContent, false, null, false, false); + return sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), message.getWhen(), envelopeContent, false, null, null, false, false); } /** @@ -248,7 +259,7 @@ public void sendRetryReceipt(SignalServiceAddress recipient, PlaintextContent content = new PlaintextContent(errorMessage); EnvelopeContent envelopeContent = EnvelopeContent.plaintext(content, groupId); - sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, false, false); + sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, null, false, false); } /** @@ -265,7 +276,7 @@ public void sendTyping(List recipients, Content content = createTypingContent(message); EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), message.getTimestamp(), envelopeContent, true, null, cancelationSignal, false, false); + sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), message.getTimestamp(), envelopeContent, true, null, cancelationSignal, null, false, false); } /** @@ -354,7 +365,7 @@ public void sendCallMessage(SignalServiceAddress recipient, Content content = createCallContent(message); EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.empty()); - sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, message.isUrgent(), false); + sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null, message.isUrgent(), false); } public List sendCallMessage(List recipients, @@ -368,7 +379,7 @@ public List sendCallMessage(List recipi Content content = createCallContent(message); EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.empty()); - return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null, message.isUrgent(), false); + return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null, null, message.isUrgent(), false); } public List sendCallMessage(DistributionId distributionId, @@ -470,10 +481,8 @@ private SendMessageResult sendContent(SignalServiceAddress recipient, EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, contentHint, message.getGroupId()); - sendEvents.onMessageEncrypted(); - long timestamp = message.getTimestamp(); - SendMessageResult result = sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, urgent, false); + SendMessageResult result = sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, sendEvents, urgent, false); sendEvents.onMessageSent(); @@ -481,7 +490,7 @@ private SendMessageResult sendContent(SignalServiceAddress recipient, Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.of(recipient), timestamp, Collections.singletonList(result), false, Collections.emptySet()); EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, false, false); + sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, null, false, false); } sendEvents.onSyncMessageSent(); @@ -516,7 +525,8 @@ public List sendSenderKeyDistributionMessage(DistributionId long timestamp = System.currentTimeMillis(); Log.d(TAG, "[" + timestamp + "] Sending SKDM to " + recipients.size() + " recipients for DistributionId " + distributionId); - return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null, urgent, story); + + return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null, null, urgent, story); } /** @@ -540,7 +550,7 @@ public SendMessageResult resendContent(SignalServiceAddress address, access = Optional.empty(); } - return sendMessage(address, access, timestamp, envelopeContent, false, null, urgent, false); + return sendMessage(address, access, timestamp, envelopeContent, false, null, null, urgent, false); } /** @@ -582,7 +592,7 @@ public List sendGroupDataMessage(DistributionId distributionI Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.empty(), message.getTimestamp(), results, isRecipientUpdate, Collections.emptySet()); EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null, false, false); + sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null, null, false, false); } sendEvents.onSyncMessageSent(); @@ -612,7 +622,7 @@ public List sendDataMessage(List Content content = createMessageContent(message); EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, contentHint, message.getGroupId()); long timestamp = message.getTimestamp(); - List results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal, urgent, false); + List results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal, sendEvents, urgent, false); boolean needsSyncInResults = false; sendEvents.onMessageSent(); @@ -633,7 +643,7 @@ public List sendDataMessage(List Content syncMessage = createMultiDeviceSentTranscriptContent(content, recipient, timestamp, results, isRecipientUpdate, Collections.emptySet()); EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, false, false); + sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, null, false, false); } sendEvents.onSyncMessageSent(); @@ -664,7 +674,7 @@ public List sendEditMessage(List Content content = createEditMessageContent(new SignalServiceEditMessage(targetSentTimestamp, message)); EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, contentHint, message.getGroupId()); long timestamp = message.getTimestamp(); - List results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal, urgent, false); + List results = sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, partialListener, cancelationSignal, null, urgent, false); boolean needsSyncInResults = false; sendEvents.onMessageSent(); @@ -685,7 +695,7 @@ public List sendEditMessage(List Content syncMessage = createMultiDeviceSentTranscriptContent(content, recipient, timestamp, results, isRecipientUpdate, Collections.emptySet()); EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, false, false); + sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null, null, false, false); } sendEvents.onSyncMessageSent(); @@ -758,7 +768,7 @@ public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optio EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - return sendMessage(localAddress, Optional.empty(), timestamp, envelopeContent, false, null, urgent, false); + return sendMessage(localAddress, Optional.empty(), timestamp, envelopeContent, false, null, null, urgent, false); } /** @@ -906,13 +916,13 @@ private SendMessageResult sendVerifiedSyncMessage(VerifiedMessage message) EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - SendMessageResult result = sendMessage(message.getDestination(), Optional.empty(), message.getTimestamp(), envelopeContent, false, null, false, false); + SendMessageResult result = sendMessage(message.getDestination(), Optional.empty(), message.getTimestamp(), envelopeContent, false, null, null, false, false); if (result.getSuccess().isNeedsSync()) { Content syncMessage = createMultiDeviceVerifiedContent(message, nullMessage.encode()); EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null, false, false); + sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null, null, false, false); } return result; @@ -936,7 +946,7 @@ public SendMessageResult sendNullMessage(SignalServiceAddress address, Optional< EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - return sendMessage(address, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, false, false); + return sendMessage(address, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, null, false, false); } private PniSignatureMessage createPniSignatureMessage() { @@ -1390,9 +1400,21 @@ private Content createMultiDeviceSentTranscriptContent(Content content, Optional List unidentifiedDeliveryStatuses = new ArrayList<>(sendMessageResults.size()); for (SendMessageResult result : sendMessageResults) { if (result.getSuccess() != null) { + ByteString identity = null; + + if (result.getAddress().getServiceId() instanceof PNI) { + IdentityKey identityKey = aciStore.getIdentity(result.getAddress().getServiceId().toProtocolAddress(SignalServiceAddress.DEFAULT_DEVICE_ID)); + if (identityKey != null) { + identity = ByteString.of(identityKey.getPublicKey().serialize()); + } else { + Log.w(TAG, "[" + timestamp + "] Could not find an identity for PNI when sending sync message! " + result.getAddress().getServiceId()); + } + } + unidentifiedDeliveryStatuses.add(new SyncMessage.Sent.UnidentifiedDeliveryStatus.Builder() .destinationServiceId(result.getAddress().getServiceId().toString()) .unidentified(result.getSuccess().isUnidentified()) + .destinationIdentityKey(identity) .build()); } } @@ -1909,10 +1931,15 @@ private List sendMessage(List r boolean online, PartialSendCompleteListener partialListener, CancelationSignal cancelationSignal, + SendEvents sendEvents, boolean urgent, boolean story) throws IOException { + if (useRxMessageSend) { + return sendMessageRx(recipients, unidentifiedAccess, timestamp, content, online, partialListener, cancelationSignal, sendEvents, urgent, story); + } + Log.d(TAG, "[" + timestamp + "] Sending to " + recipients.size() + " recipients."); enforceMaxContentSize(content); @@ -1925,7 +1952,7 @@ private List sendMessage(List r SignalServiceAddress recipient = recipientIterator.next(); Optional access = unidentifiedAccessIterator.next(); futureResults.add(executor.submit(() -> { - SendMessageResult result = sendMessage(recipient, access, timestamp, content, online, cancelationSignal, urgent, story); + SendMessageResult result = sendMessage(recipient, access, timestamp, content, online, cancelationSignal, sendEvents, urgent, story); if (partialListener != null) { partialListener.onPartialSendComplete(result); } @@ -1997,6 +2024,7 @@ private SendMessageResult sendMessage(SignalServiceAddress recipient, EnvelopeContent content, boolean online, CancelationSignal cancelationSignal, + SendEvents sendEvents, boolean urgent, boolean story) throws UntrustedIdentityException, IOException @@ -2012,6 +2040,9 @@ private SendMessageResult sendMessage(SignalServiceAddress recipient, try { OutgoingPushMessageList messages = getEncryptedMessages(recipient, unidentifiedAccess, timestamp, content, online, urgent, story); + if (i == 0 && sendEvents != null) { + sendEvents.onMessageEncrypted(); + } if (content.getContent().isPresent() && content.getContent().get().syncMessage != null && content.getContent().get().syncMessage.sent != null) { Log.d(TAG, "[sendMessage][" + timestamp + "] Sending a sent sync message to devices: " + messages.getDevices()); @@ -2085,6 +2116,303 @@ private SendMessageResult sendMessage(SignalServiceAddress recipient, throw new IOException("Failed to resolve conflicts after " + RETRY_COUNT + " attempts!"); } + /** + * Send a message to multiple recipients. + * + * @return An unordered list of a {@link SendMessageResult} for each send. + * @throws IOException - Unknown failure or a failure not representable by an unsuccessful {@code SendMessageResult}. + */ + private List sendMessageRx(List recipients, + List> unidentifiedAccess, + long timestamp, + EnvelopeContent content, + boolean online, + PartialSendCompleteListener partialListener, + CancelationSignal cancelationSignal, + @Nullable SendEvents sendEvents, + boolean urgent, + boolean story) + throws IOException + { + Log.d(TAG, "[" + timestamp + "] Sending to " + recipients.size() + " recipients via Rx."); + enforceMaxContentSize(content); + + long startTime = System.currentTimeMillis(); + List> singleResults = new LinkedList<>(); + Iterator recipientIterator = recipients.iterator(); + Iterator> unidentifiedAccessIterator = unidentifiedAccess.iterator(); + + while (recipientIterator.hasNext()) { + SignalServiceAddress recipient = recipientIterator.next(); + Optional access = unidentifiedAccessIterator.next(); + singleResults.add(sendMessageRx(recipient, access, timestamp, content, online, cancelationSignal, sendEvents, urgent, story, 0).toObservable()); + } + + List results; + try { + results = Observable.mergeDelayError(singleResults, Integer.MAX_VALUE, 1) + .observeOn(Schedulers.io(), true) + .scan(new ArrayList(singleResults.size()), (state, result) -> { + state.add(result); + if (partialListener != null) { + partialListener.onPartialSendComplete(result); + } + return state; + }) + .lastOrError() + .blockingGet(); + } catch (RuntimeException e) { + Throwable cause = e.getCause(); + if (cause instanceof IOException) { + throw (IOException) cause; + } else if (cause instanceof InterruptedException) { + throw new CancelationException(e); + } else { + throw e; + } + } + + double sendsForAverage = 0; + for (SendMessageResult result : results) { + if (result.getSuccess() != null && result.getSuccess().getDuration() != -1) { + sendsForAverage++; + } + } + + double average = 0; + if (sendsForAverage > 0) { + for (SendMessageResult result : results) { + if (result.getSuccess() != null && result.getSuccess().getDuration() != -1) { + average += result.getSuccess().getDuration() / sendsForAverage; + } + } + } + + Log.d(TAG, "[" + timestamp + "] Completed send to " + recipients.size() + " recipients in " + (System.currentTimeMillis() - startTime) + " ms, with an average time of " + Math.round(average) + " ms per send via Rx."); + return results; + } + + /** + * Sends a message over the appropriate websocket, falls back to REST when unavailable, and emits a {@link SendMessageResult} for most business + * logic error cases. + *

+ * Uses a "feature" or Rx where if no {@link Single#subscribeOn(Scheduler)} operator is used, the subscribing thread is used to perform the + * initial work. This allows the calling thread to do the starting of the send work (encryption and putting it on the wire) and can be called + * multiple times in a loop, but allow the network transit/processing/error retry logic to run on a background thread. + *

+ * Processing happens on the background thread via an {@link Single#observeOn(Scheduler)} call after the encrypt and send. Error + * handling operators are added after the observe so they will also run on a background thread. Retry logic during error handling + * is a recursive call, so error handling thread becomes the method "calling and subscribing" thread so all retries will perform the + * encryption/send/processing on that background thread. + * + * @return A single that wraps success and business failures as a {@link SendMessageResult} but will still emit unhandled/unrecoverable + * errors via {@code onError} + */ + private Single sendMessageRx(SignalServiceAddress recipient, + final Optional unidentifiedAccess, + long timestamp, + EnvelopeContent content, + boolean online, + CancelationSignal cancelationSignal, + @Nullable SendEvents sendEvents, + boolean urgent, + boolean story, + int retryCount) + { + long startTime = System.currentTimeMillis(); + enforceMaxContentSize(content); + + Single messagesSingle = Single.fromCallable(() -> { + OutgoingPushMessageList messages = getEncryptedMessages(recipient, unidentifiedAccess, timestamp, content, online, urgent, story); + + if (retryCount == 0 && sendEvents != null) { + sendEvents.onMessageEncrypted(); + } + + if (content.getContent().isPresent() && content.getContent().get().syncMessage != null && content.getContent().get().syncMessage.sent != null) { + Log.d(TAG, "[sendMessage][" + timestamp + "] Sending a sent sync message to devices: " + messages.getDevices() + " via Rx"); + } else if (content.getContent().isPresent() && content.getContent().get().senderKeyDistributionMessage != null) { + Log.d(TAG, "[sendMessage][" + timestamp + "] Sending a SKDM to " + messages.getDestination() + " for devices: " + messages.getDevices() + (content.getContent().get().dataMessage != null ? " (it's piggy-backing on a DataMessage) via Rx" : " via Rx")); + } + + return messages; + }); + + Single sendWithFallback = messagesSingle + .flatMap(messages -> { + if (cancelationSignal != null && cancelationSignal.isCanceled()) { + return Single.error(new CancelationException()); + } + + return messagingService.send(messages, unidentifiedAccess, story) + .map(r -> new kotlin.Pair<>(messages, r)); + }) + .observeOn(Schedulers.io()) + .flatMap(pair -> { + final OutgoingPushMessageList messages = pair.getFirst(); + final ServiceResponse serviceResponse = pair.getSecond(); + + if (serviceResponse.getResult().isPresent()) { + SendMessageResponse response = serviceResponse.getResult().get(); + SendMessageResult result = SendMessageResult.success( + recipient, + messages.getDevices(), + response.sentUnidentified(), + response.getNeedsSync() || aciStore.isMultiDevice(), + System.currentTimeMillis() - startTime, + content.getContent() + ); + return Single.just(result); + } else { + if (cancelationSignal != null && cancelationSignal.isCanceled()) { + return Single.error(new CancelationException()); + } + + //noinspection OptionalGetWithoutIsPresent + Throwable throwable = serviceResponse.getApplicationError().or(serviceResponse::getExecutionError).get(); + + if (throwable instanceof InvalidUnidentifiedAccessHeaderException || + throwable instanceof UnregisteredUserException || + throwable instanceof MismatchedDevicesException || + throwable instanceof StaleDevicesException) + { + // Non-technical failures shouldn't be retried with socket + return Single.error(throwable); + } else if (throwable instanceof WebSocketUnavailableException) { + Log.i(TAG, "[sendMessage][" + timestamp + "] " + (unidentifiedAccess.isPresent() ? "Unidentified " : "") + "pipe unavailable, falling back... (" + throwable.getClass().getSimpleName() + ": " + throwable.getMessage() + ")"); + } else if (throwable instanceof IOException) { + Throwable cause = throwable.getCause() != null ? throwable.getCause() : throwable; + Log.w(TAG, "[sendMessage][" + timestamp + "] " + (unidentifiedAccess.isPresent() ? "Unidentified " : "") + "pipe failed, falling back... (" + cause.getClass().getSimpleName() + ": " + cause.getMessage() + ")"); + } + + return Single.fromCallable(() -> { + SendMessageResponse response = socket.sendMessage(messages, unidentifiedAccess, story); + return SendMessageResult.success( + recipient, + messages.getDevices(), + response.sentUnidentified(), + response.getNeedsSync() || aciStore.isMultiDevice(), + System.currentTimeMillis() - startTime, + content.getContent() + ); + }).subscribeOn(Schedulers.io()); + } + }); + + return sendWithFallback.onErrorResumeNext(t -> { + if (cancelationSignal != null && cancelationSignal.isCanceled()) { + return Single.error(new CancelationException()); + } + + if (retryCount >= RETRY_COUNT) { + return Single.error(t); + } + + if (t instanceof InvalidKeyException) { + Log.w(TAG, t); + return sendMessageRx( + recipient, + Optional.empty(), + timestamp, + content, + online, + cancelationSignal, + sendEvents, + urgent, + story, + retryCount + 1 + ); + } else if (t instanceof AuthorizationFailedException) { + if (unidentifiedAccess.isPresent()) { + Log.w(TAG, "Got an AuthorizationFailedException when trying to send using sealed sender. Falling back."); + return sendMessageRx( + recipient, + Optional.empty(), + timestamp, + content, + online, + cancelationSignal, + sendEvents, + urgent, + story, + retryCount + 1 + ); + } else { + Log.w(TAG, "Got an AuthorizationFailedException without using sealed sender!", t); + return Single.error(t); + } + } else if (t instanceof MismatchedDevicesException) { + MismatchedDevicesException mde = (MismatchedDevicesException) t; + Log.w(TAG, "[sendMessage][" + timestamp + "] Handling mismatched devices. (" + mde.getMessage() + ")"); + + return Single.fromCallable(() -> { + handleMismatchedDevices(socket, recipient, mde.getMismatchedDevices()); + return Unit.INSTANCE; + }) + .flatMap(unused -> sendMessageRx( + recipient, + unidentifiedAccess, + timestamp, + content, + online, + cancelationSignal, + sendEvents, + urgent, + story, + retryCount + 1) + ); + } else if (t instanceof StaleDevicesException) { + StaleDevicesException ste = (StaleDevicesException) t; + Log.w(TAG, "[sendMessage][" + timestamp + "] Handling stale devices. (" + ste.getMessage() + ")"); + + return Single.fromCallable(() -> { + handleStaleDevices(recipient, ste.getStaleDevices()); + return Unit.INSTANCE; + }) + .flatMap(unused -> sendMessageRx( + recipient, + unidentifiedAccess, + timestamp, + content, + online, + cancelationSignal, + sendEvents, + urgent, + story, + retryCount + 1) + ); + } + + return Single.error(t); + }).onErrorResumeNext(t -> { + if (t instanceof UntrustedIdentityException) { + Log.w(TAG, "[" + timestamp + "] Hit identity mismatch: " + recipient.getIdentifier(), t); + return Single.just(SendMessageResult.identityFailure(recipient, ((UntrustedIdentityException) t).getIdentityKey())); + } else if (t instanceof UnregisteredUserException) { + Log.w(TAG, "[" + timestamp + "] Hit unregistered user: " + recipient.getIdentifier()); + return Single.just(SendMessageResult.unregisteredFailure(recipient)); + } else if (t instanceof PushNetworkException) { + Log.w(TAG, "[" + timestamp + "] Hit network failure: " + recipient.getIdentifier(), t); + return Single.just(SendMessageResult.networkFailure(recipient)); + } else if (t instanceof ServerRejectedException) { + Log.w(TAG, "[" + timestamp + "] Hit server rejection: " + recipient.getIdentifier(), t); + return Single.error(t); + } else if (t instanceof ProofRequiredException) { + Log.w(TAG, "[" + timestamp + "] Hit proof required: " + recipient.getIdentifier(), t); + return Single.just(SendMessageResult.proofRequiredFailure(recipient, (ProofRequiredException) t)); + } else if (t instanceof RateLimitException) { + Log.w(TAG, "[" + timestamp + "] Hit rate limit: " + recipient.getIdentifier(), t); + return Single.just(SendMessageResult.rateLimitFailure(recipient, (RateLimitException) t)); + } else if (t instanceof InvalidPreKeyException) { + Log.w(TAG, "[" + timestamp + "] Hit invalid prekey: " + recipient.getIdentifier(), t); + return Single.just(SendMessageResult.invalidPreKeyFailure(recipient)); + } else { + Log.w(TAG, "[" + timestamp + "] Hit unknown exception: " + recipient.getIdentifier(), t); + return Single.error(new IOException(t)); + } + }); + } + /** * Will send a message using sender keys to all of the specified recipients. It is assumed that * all of the recipients have UUIDs. @@ -2582,7 +2910,13 @@ public interface EventListener { void onSecurityEvent(SignalServiceAddress address); } - public interface IndividualSendEvents { + public interface SendEvents { + void onMessageEncrypted(); + void onMessageSent(); + void onSyncMessageSent(); + } + + public interface IndividualSendEvents extends SendEvents { IndividualSendEvents EMPTY = new IndividualSendEvents() { @Override public void onMessageEncrypted() { } @@ -2593,13 +2927,9 @@ public void onMessageSent() { } @Override public void onSyncMessageSent() { } }; - - void onMessageEncrypted(); - void onMessageSent(); - void onSyncMessageSent(); } - public interface SenderKeyGroupEvents { + public interface SenderKeyGroupEvents extends SendEvents { SenderKeyGroupEvents EMPTY = new SenderKeyGroupEvents() { @Override public void onSenderKeyShared() { } @@ -2615,13 +2945,13 @@ public void onSyncMessageSent() { } }; void onSenderKeyShared(); - void onMessageEncrypted(); - void onMessageSent(); - void onSyncMessageSent(); } - public interface LegacyGroupEvents { + public interface LegacyGroupEvents extends SendEvents { LegacyGroupEvents EMPTY = new LegacyGroupEvents() { + @Override + public void onMessageEncrypted() {} + @Override public void onMessageSent() { } @@ -2629,7 +2959,5 @@ public void onMessageSent() { } public void onSyncMessageSent() { } }; - void onMessageSent(); - void onSyncMessageSent(); } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt index aa00e4cc33..1e43a67feb 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveApi.kt @@ -125,7 +125,7 @@ class ArchiveApi( * Retrieves all media items in the user's archive. Note that this could be a very large number of items, making this only suitable for debugging. * Use [getArchiveMediaItemsPage] in production. */ - fun debugGetUploadedMediaItemMetadata(backupKey: BackupKey, serviceCredential: ArchiveServiceCredential): NetworkResult> { + fun debugGetUploadedMediaItemMetadata(backupKey: BackupKey, serviceCredential: ArchiveServiceCredential): NetworkResult> { return NetworkResult.fromFetch { val zkCredential = getZkCredential(backupKey, serviceCredential) val presentationData = CredentialPresentationData.from(backupKey, zkCredential, backupServerPublicParams) @@ -154,7 +154,58 @@ class ArchiveApi( val zkCredential = getZkCredential(backupKey, serviceCredential) val presentationData = CredentialPresentationData.from(backupKey, zkCredential, backupServerPublicParams) - pushServiceSocket.getArchiveMediaItemsPage(presentationData.toArchiveCredentialPresentation(), 512, cursor) + pushServiceSocket.getArchiveMediaItemsPage(presentationData.toArchiveCredentialPresentation(), limit, cursor) + } + } + + /** + * Copy and re-encrypt media from the attachments cdn into the backup cdn. + */ + fun archiveAttachmentMedia( + backupKey: BackupKey, + serviceCredential: ArchiveServiceCredential, + item: ArchiveMediaRequest + ): NetworkResult { + return NetworkResult.fromFetch { + val zkCredential = getZkCredential(backupKey, serviceCredential) + val presentationData = CredentialPresentationData.from(backupKey, zkCredential, backupServerPublicParams) + + pushServiceSocket.archiveAttachmentMedia(presentationData.toArchiveCredentialPresentation(), item) + } + } + + /** + * Copy and re-encrypt media from the attachments cdn into the backup cdn. + */ + fun archiveAttachmentMedia( + backupKey: BackupKey, + serviceCredential: ArchiveServiceCredential, + items: List + ): NetworkResult { + return NetworkResult.fromFetch { + val zkCredential = getZkCredential(backupKey, serviceCredential) + val presentationData = CredentialPresentationData.from(backupKey, zkCredential, backupServerPublicParams) + + val request = BatchArchiveMediaRequest(items = items) + + pushServiceSocket.archiveAttachmentMedia(presentationData.toArchiveCredentialPresentation(), request) + } + } + + /** + * Delete media from the backup cdn. + */ + fun deleteArchivedMedia( + backupKey: BackupKey, + serviceCredential: ArchiveServiceCredential, + mediaToDelete: List + ): NetworkResult { + return NetworkResult.fromFetch { + val zkCredential = getZkCredential(backupKey, serviceCredential) + val presentationData = CredentialPresentationData.from(backupKey, zkCredential, backupServerPublicParams) + val request = DeleteArchivedMediaRequest(mediaToDelete = mediaToDelete) + + pushServiceSocket.deleteArchivedMedia(presentationData.toArchiveCredentialPresentation(), request) } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveCredentialPresentation.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveCredentialPresentation.kt index de6e4f585b..29bc7cdde9 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveCredentialPresentation.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveCredentialPresentation.kt @@ -5,10 +5,19 @@ package org.whispersystems.signalservice.api.archive +import org.signal.core.util.Base64 + /** * Acts as credentials for various archive operations. */ class ArchiveCredentialPresentation( val presentation: ByteArray, val signedPresentation: ByteArray -) +) { + fun toHeaders(): MutableMap { + return mutableMapOf( + "X-Signal-ZK-Auth" to Base64.encodeWithPadding(presentation), + "X-Signal-ZK-Auth-Signature" to Base64.encodeWithPadding(signedPresentation) + ) + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaRequest.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaRequest.kt new file mode 100644 index 0000000000..3ed0a8c00d --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaRequest.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.archive + +import com.fasterxml.jackson.annotation.JsonProperty + +/** + * Request to copy and re-encrypt media from the attachments cdn into the backup cdn. + */ +class ArchiveMediaRequest( + @JsonProperty val sourceAttachment: SourceAttachment, + @JsonProperty val objectLength: Int, + @JsonProperty val mediaId: String, + @JsonProperty val hmacKey: String, + @JsonProperty val encryptionKey: String, + @JsonProperty val iv: String +) { + class SourceAttachment( + @JsonProperty val cdn: Int, + @JsonProperty val key: String + ) +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaResponse.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaResponse.kt new file mode 100644 index 0000000000..7cdfa650dd --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/ArchiveMediaResponse.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.archive + +import com.fasterxml.jackson.annotation.JsonProperty + +/** + * Response to archiving media, backup CDN number where media is located. + */ +class ArchiveMediaResponse( + @JsonProperty val cdn: Int +) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaRequest.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaRequest.kt new file mode 100644 index 0000000000..3f4822b547 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaRequest.kt @@ -0,0 +1,15 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.archive + +import com.fasterxml.jackson.annotation.JsonProperty + +/** + * Request to copy and re-encrypt media from the attachments cdn into the backup cdn. + */ +class BatchArchiveMediaRequest( + @JsonProperty val items: List +) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaResponse.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaResponse.kt new file mode 100644 index 0000000000..2fb002e4cf --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/BatchArchiveMediaResponse.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.archive + +import com.fasterxml.jackson.annotation.JsonProperty + +/** + * Multi-response data for a batch archive media operation. + */ +class BatchArchiveMediaResponse( + @JsonProperty val responses: List +) { + class BatchArchiveMediaItemResponse( + @JsonProperty val status: Int?, + @JsonProperty val failureReason: String?, + @JsonProperty val cdn: Int?, + @JsonProperty val mediaId: String + ) +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/DeleteArchivedMediaRequest.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/DeleteArchivedMediaRequest.kt new file mode 100644 index 0000000000..4d9a5d73b3 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/archive/DeleteArchivedMediaRequest.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.archive + +import com.fasterxml.jackson.annotation.JsonProperty + +/** + * Delete media from the backup cdn. + */ +class DeleteArchivedMediaRequest( + @JsonProperty val mediaToDelete: List +) { + class ArchivedMediaObject( + @JsonProperty val cdn: Int, + @JsonProperty val mediaId: String + ) +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt index 48343a0e82..1939cc5e1b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/BackupKey.kt @@ -16,7 +16,7 @@ class BackupKey(val value: ByteArray) { require(value.size == 32) { "Backup key must be 32 bytes!" } } - fun deriveSecrets(aci: ACI): KeyMaterial { + fun deriveSecrets(aci: ACI): KeyMaterial { val backupId = BackupId( HKDF.deriveSecrets(this.value, aci.toByteArray(), "20231003_Signal_Backups_GenerateBackupId".toByteArray(), 16) ) @@ -24,15 +24,32 @@ class BackupKey(val value: ByteArray) { val extendedKey = HKDF.deriveSecrets(this.value, backupId.value, "20231003_Signal_Backups_EncryptMessageBackup".toByteArray(), 80) return KeyMaterial( - backupId = backupId, + id = backupId, macKey = extendedKey.copyOfRange(0, 32), cipherKey = extendedKey.copyOfRange(32, 64), iv = extendedKey.copyOfRange(64, 80) ) } - class KeyMaterial( - val backupId: BackupId, + fun deriveMediaId(dataHash: ByteArray): MediaId { + return MediaId(HKDF.deriveSecrets(value, dataHash, "Media ID".toByteArray(), 15)) + } + + fun deriveMediaSecrets(dataHash: ByteArray): KeyMaterial { + val mediaId = deriveMediaId(dataHash) + + val extendedKey = HKDF.deriveSecrets(this.value, mediaId.value, "20231003_Signal_Backups_EncryptMedia".toByteArray(), 80) + + return KeyMaterial( + id = mediaId, + macKey = extendedKey.copyOfRange(0, 32), + cipherKey = extendedKey.copyOfRange(32, 64), + iv = extendedKey.copyOfRange(64, 80) + ) + } + + class KeyMaterial ( + val id: Id, val macKey: ByteArray, val cipherKey: ByteArray, val iv: ByteArray diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt new file mode 100644 index 0000000000..6575e99118 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaId.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.backup + +import org.signal.core.util.Base64 + +/** + * Safe typing around a mediaId, which is a 15-byte array. + */ +@JvmInline +value class MediaId(val value: ByteArray) { + + init { + require(value.size == 15) { "MediaId must be 15 bytes!" } + } + + override fun toString(): String { + return Base64.encodeUrlSafeWithPadding(value) + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt new file mode 100644 index 0000000000..9c7ba8d100 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/keys/KeysApi.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.api.keys + +import org.signal.core.util.toByteArray +import org.signal.libsignal.protocol.IdentityKey +import org.signal.libsignal.protocol.ecc.ECPublicKey +import org.signal.libsignal.protocol.kem.KEMPublicKey +import org.whispersystems.signalservice.api.NetworkResult +import org.whispersystems.signalservice.api.push.ServiceIdType +import org.whispersystems.signalservice.internal.push.PushServiceSocket +import java.security.MessageDigest + +/** + * Contains APIs for interacting with /keys endpoints on the service. + */ +class KeysApi(private val pushServiceSocket: PushServiceSocket) { + + companion object { + @JvmStatic + fun create(pushServiceSocket: PushServiceSocket): KeysApi { + return KeysApi(pushServiceSocket) + } + } + + /** + * Checks to see if our local view of our repeated-use prekeys matches the server's view. It's an all-or-nothing match, and no details can be given beyond + * whether or not everything perfectly matches or not. + * + * Status codes: + * - 200: Everything matches + * - 409: Something doesn't match + */ + fun checkRepeatedUseKeys( + serviceIdType: ServiceIdType, + identityKey: IdentityKey, + signedPreKeyId: Int, + signedPreKey: ECPublicKey, + lastResortKyberKeyId: Int, + lastResortKyberKey: KEMPublicKey + ): NetworkResult { + val digest: MessageDigest = MessageDigest.getInstance("SHA-256").apply { + update(identityKey.serialize()) + update(signedPreKeyId.toLong().toByteArray()) + update(signedPreKey.serialize()) + update(lastResortKyberKeyId.toLong().toByteArray()) + update(lastResortKyberKey.serialize()) + } + + return NetworkResult.fromFetch { + pushServiceSocket.checkRepeatedUsePreKeys(serviceIdType, digest.digest()) + } + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java index f8310b7ba8..d72102389d 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/profiles/SignalServiceProfile.java @@ -192,24 +192,6 @@ public static class Capabilities { @JsonProperty private boolean storage; - @JsonProperty("gv1-migration") - private boolean gv1Migration; - - @JsonProperty - private boolean senderKey; - - @JsonProperty - private boolean announcementGroup; - - @JsonProperty - private boolean changeNumber; - - @JsonProperty - private boolean stories; - - @JsonProperty - private boolean giftBadges; - @JsonProperty private boolean pnp; @@ -219,14 +201,8 @@ public static class Capabilities { @JsonCreator public Capabilities() {} - public Capabilities(boolean storage, boolean gv1Migration, boolean senderKey, boolean announcementGroup, boolean changeNumber, boolean stories, boolean giftBadges, boolean pnp, boolean paymentActivation) { + public Capabilities(boolean storage, boolean pnp, boolean paymentActivation) { this.storage = storage; - this.gv1Migration = gv1Migration; - this.senderKey = senderKey; - this.announcementGroup = announcementGroup; - this.changeNumber = changeNumber; - this.stories = stories; - this.giftBadges = giftBadges; this.pnp = pnp; this.paymentActivation = paymentActivation; } @@ -235,30 +211,6 @@ public boolean isStorage() { return storage; } - public boolean isGv1Migration() { - return gv1Migration; - } - - public boolean isSenderKey() { - return senderKey; - } - - public boolean isAnnouncementGroup() { - return announcementGroup; - } - - public boolean isChangeNumber() { - return changeNumber; - } - - public boolean isStories() { - return stories; - } - - public boolean isGiftBadges() { - return giftBadges; - } - public boolean isPnp() { return pnp; } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java index fafe613183..1ca90e5acd 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/CdsiV2Service.java @@ -2,6 +2,10 @@ import org.signal.cdsi.proto.ClientRequest; import org.signal.cdsi.proto.ClientResponse; +import org.signal.core.util.logging.Log; +import org.signal.libsignal.net.CdsiLookupRequest; +import org.signal.libsignal.net.CdsiLookupResponse; +import org.signal.libsignal.net.Network; import org.signal.libsignal.protocol.util.ByteUtil; import org.signal.libsignal.zkgroup.profiles.ProfileKey; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; @@ -16,6 +20,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.ByteBuffer; +import java.time.Duration; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -24,9 +29,11 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.concurrent.Future; import java.util.function.Consumer; import java.util.stream.Collectors; +import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import okio.ByteString; @@ -40,16 +47,35 @@ public final class CdsiV2Service { private static final UUID EMPTY_UUID = new UUID(0, 0); private static final int RESPONSE_ITEM_SIZE = 8 + 16 + 16; // 1 uint64 + 2 UUIDs - private final CdsiSocket cdsiSocket; - - public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave) { - this.cdsiSocket = new CdsiSocket(configuration, mrEnclave); - } + private static final Duration LIBSIGNAL_CDSI_TIMEOUT = Duration.ofSeconds(10); + + private final CdsiRequestHandler cdsiRequestHandler; + + public CdsiV2Service(SignalServiceConfiguration configuration, String mrEnclave, Network.Environment libsignalEnv) { + + if (libsignalEnv != null) { + Network network = new Network(libsignalEnv); + this.cdsiRequestHandler = (username, password, request, tokenSaver) -> { + try { + Log.i(TAG, "Starting CDSI lookup via libsignal-net"); + Future cdsiRequest = network.cdsiLookup(username, password, buildLibsignalRequest(request), LIBSIGNAL_CDSI_TIMEOUT, tokenSaver); + return Single.fromFuture(cdsiRequest).map(CdsiV2Service::parseLibsignalResponse).toObservable(); + } catch (Exception exception) { + return Observable.error(exception); + } + }; + } else { + CdsiSocket cdsiSocket = new CdsiSocket(configuration, mrEnclave); + this.cdsiRequestHandler = (username, password, request, tokenSaver) -> { + return cdsiSocket + .connect(username, password, buildClientRequest(request), tokenSaver) + .map(CdsiV2Service::parseEntries); + }; + } + } public Single> getRegisteredUsers(String username, String password, Request request, Consumer tokenSaver) { - return cdsiSocket - .connect(username, password, buildClientRequest(request), tokenSaver) - .map(CdsiV2Service::parseEntries) + return cdsiRequestHandler.handleRequest(username, password, request, tokenSaver) .collect(Collectors.toList()) .flatMap(pages -> { Map all = new HashMap<>(); @@ -139,6 +165,18 @@ private static ByteString toByteString(Map serviceIds) { return ByteString.of(os.toByteArray()); } + private static CdsiLookupRequest buildLibsignalRequest(Request request) { + HashMap serviceIds = new HashMap<>(request.serviceIds.size()); + request.serviceIds.forEach((key, value) -> serviceIds.put(key.getLibSignalServiceId(), value)); + return new CdsiLookupRequest(request.previousE164s, request.newE164s, serviceIds, false, Optional.ofNullable(request.token)); + } + + private static Response parseLibsignalResponse(CdsiLookupResponse response) { + HashMap responses = new HashMap<>(response.entries().size()); + response.entries().forEach((key, value) -> responses.put(key, new ResponseItem(new PNI(value.pni), Optional.ofNullable(value.aci).map(ACI::new)))); + return new Response(responses, response.debugPermitsUsed); + } + private static List parseAndSortE164Strings(Collection e164s) { return e164s.stream() .map(Long::parseLong) @@ -216,4 +254,8 @@ public boolean hasAci() { return aci.isPresent(); } } + + private interface CdsiRequestHandler { + Observable handleRequest(String username, String password, Request request, Consumer tokenSaver); + } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArrayDeserializerBase64.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArrayDeserializerBase64.kt new file mode 100644 index 0000000000..74d0a0978e --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArrayDeserializerBase64.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.internal.push + +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.JsonDeserializer +import org.signal.core.util.Base64 + +/** + * Deserializes any valid base64 (regardless of padding or url-safety) into a ByteArray. + */ +class ByteArrayDeserializerBase64 : JsonDeserializer() { + override fun deserialize(p: JsonParser, ctxt: DeserializationContext): ByteArray { + return Base64.decode(p.valueAsString) + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArraySerializerBase64NoPadding.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArraySerializerBase64NoPadding.kt new file mode 100644 index 0000000000..e0552ca25a --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/ByteArraySerializerBase64NoPadding.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.internal.push + +import com.fasterxml.jackson.core.JsonGenerator +import com.fasterxml.jackson.databind.JsonSerializer +import com.fasterxml.jackson.databind.SerializerProvider +import org.signal.core.util.Base64 + +/** + * JSON serializer to encode a ByteArray as a base64 string without padding. + */ +class ByteArraySerializerBase64NoPadding : JsonSerializer() { + override fun serialize(value: ByteArray, gen: JsonGenerator, serializers: SerializerProvider) { + gen.writeString(Base64.encodeWithoutPadding(value)) + } +} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/CheckRepeatedUsedPreKeysRequest.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/CheckRepeatedUsedPreKeysRequest.kt new file mode 100644 index 0000000000..a304069ab9 --- /dev/null +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/CheckRepeatedUsedPreKeysRequest.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.whispersystems.signalservice.internal.push + +import com.fasterxml.jackson.annotation.JsonProperty +import com.fasterxml.jackson.databind.annotation.JsonSerialize + +/** + * Request body to check if our prekeys match what's on the service. + */ +class CheckRepeatedUsedPreKeysRequest( + @JsonProperty + val identityType: String, + + @JsonProperty + @JsonSerialize(using = ByteArraySerializerBase64NoPadding::class) + val digest: ByteArray +) diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index 369088dd81..66fe3ffb81 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -19,7 +19,6 @@ import org.signal.libsignal.protocol.kem.KEMPublicKey; import org.signal.libsignal.protocol.logging.Log; import org.signal.libsignal.protocol.state.PreKeyBundle; -import org.signal.libsignal.protocol.state.SignedPreKeyRecord; import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.usernames.BaseUsernameException; import org.signal.libsignal.usernames.Username; @@ -50,10 +49,15 @@ import org.whispersystems.signalservice.api.archive.ArchiveCredentialPresentation; import org.whispersystems.signalservice.api.archive.ArchiveGetBackupInfoResponse; 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.ArchiveMessageBackupUploadFormResponse; import org.whispersystems.signalservice.api.archive.ArchiveServiceCredentialsResponse; import org.whispersystems.signalservice.api.archive.ArchiveSetBackupIdRequest; import org.whispersystems.signalservice.api.archive.ArchiveSetPublicKeyRequest; +import org.whispersystems.signalservice.api.archive.BatchArchiveMediaRequest; +import org.whispersystems.signalservice.api.archive.BatchArchiveMediaResponse; +import org.whispersystems.signalservice.api.archive.DeleteArchivedMediaRequest; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.groupsv2.CredentialResponse; import org.whispersystems.signalservice.api.groupsv2.GroupsV2AuthorizationString; @@ -211,7 +215,6 @@ public class PushServiceSocket { private static final String TAG = PushServiceSocket.class.getSimpleName(); - private static final String VERIFY_ACCOUNT_CODE_PATH = "/v1/accounts/code/%s"; private static final String REGISTER_GCM_PATH = "/v1/accounts/gcm/"; private static final String TURN_SERVER_INFO = "/v1/accounts/turn"; private static final String SET_ACCOUNT_ATTRIBUTES = "/v1/accounts/attributes/"; @@ -232,14 +235,15 @@ public class PushServiceSocket { private static final String PREKEY_METADATA_PATH = "/v2/keys?identity=%s"; private static final String PREKEY_PATH = "/v2/keys?identity=%s"; - private static final String PREKEY_DEVICE_PATH = "/v2/keys/%s/%s?pq=true"; + private static final String PREKEY_DEVICE_PATH = "/v2/keys/%s/%s"; + private static final String PREKEY_CHECK_PATH = "/v2/keys/check"; + private static final String PROVISIONING_CODE_PATH = "/v1/devices/provisioning/code"; private static final String PROVISIONING_MESSAGE_PATH = "/v1/provisioning/%s"; private static final String DEVICE_PATH = "/v1/devices/%s"; private static final String DEVICE_LINK_PATH = "/v1/devices/link"; - private static final String DIRECTORY_AUTH_PATH = "/v1/directory/auth"; private static final String MESSAGE_PATH = "/v1/messages/%s"; private static final String GROUP_MESSAGE_PATH = "/v1/messages/multi_recipient?ts=%s&online=%s&urgent=%s&story=%s"; private static final String SENDER_ACK_MESSAGE_PATH = "/v1/messages/%s/%d"; @@ -255,9 +259,6 @@ public class PushServiceSocket { private static final String SENDER_CERTIFICATE_PATH = "/v1/certificate/delivery"; private static final String SENDER_CERTIFICATE_NO_E164_PATH = "/v1/certificate/delivery?includeE164=false"; - private static final String KBS_AUTH_PATH = "/v1/backup/auth"; - private static final String KBS_AUTH_CHECK_PATH = "/v1/backup/auth/check"; - private static final String ATTACHMENT_KEY_DOWNLOAD_PATH = "attachments/%s"; private static final String ATTACHMENT_ID_DOWNLOAD_PATH = "attachments/%d"; private static final String ATTACHMENT_UPLOAD_PATH = "attachments/"; @@ -310,11 +311,15 @@ public class PushServiceSocket { private static final String BACKUP_AUTH_CHECK = "/v2/backup/auth/check"; private static final String ARCHIVE_CREDENTIALS = "/v1/archives/auth?redemptionStartSeconds=%d&redemptionEndSeconds=%d"; + private static final String ARCHIVE_READ_CREDENTIALS = "/v1/archives/auth/read"; private static final String ARCHIVE_BACKUP_ID = "/v1/archives/backupid"; private static final String ARCHIVE_PUBLIC_KEY = "/v1/archives/keys"; private static final String ARCHIVE_INFO = "/v1/archives"; private static final String ARCHIVE_MESSAGE_UPLOAD_FORM = "/v1/archives/upload/form"; + private static final String ARCHIVE_MEDIA = "/v1/archives/media"; private static final String ARCHIVE_MEDIA_LIST = "/v1/archives/media?limit=%d"; + private static final String ARCHIVE_MEDIA_BATCH = "/v1/archives/media/batch"; + private static final String ARCHIVE_MEDIA_DELETE = "/v1/archives/media/delete"; private static final String CALL_LINK_CREATION_AUTH = "/v1/call-link/create-auth"; private static final String SERVER_DELIVERED_TIMESTAMP_HEADER = "X-Signal-Timestamp"; @@ -499,18 +504,14 @@ public void setArchiveBackupId(BackupAuthCredentialRequest request) throws IOExc } public void setArchivePublicKey(ECPublicKey publicKey, ArchiveCredentialPresentation credentialPresentation) throws IOException { - Map headers = new HashMap<>(); - headers.put("X-Signal-ZK-Auth", Base64.encodeWithPadding(credentialPresentation.getPresentation())); - headers.put("X-Signal-ZK-Auth-Signature", Base64.encodeWithPadding(credentialPresentation.getSignedPresentation())); + Map headers = credentialPresentation.toHeaders(); String body = JsonUtil.toJson(new ArchiveSetPublicKeyRequest(publicKey)); makeServiceRequestWithoutAuthentication(ARCHIVE_PUBLIC_KEY, "PUT", body, headers, NO_HANDLER); } public ArchiveGetBackupInfoResponse getArchiveBackupInfo(ArchiveCredentialPresentation credentialPresentation) throws IOException { - Map headers = new HashMap<>(); - headers.put("X-Signal-ZK-Auth", Base64.encodeWithPadding(credentialPresentation.getPresentation())); - headers.put("X-Signal-ZK-Auth-Signature", Base64.encodeWithPadding(credentialPresentation.getSignedPresentation())); + Map headers = credentialPresentation.toHeaders(); String response = makeServiceRequestWithoutAuthentication(ARCHIVE_INFO, "GET", null, headers, NO_HANDLER); return JsonUtil.fromJson(response, ArchiveGetBackupInfoResponse.class); @@ -534,9 +535,7 @@ public List debugGetAllArchiveMe * @param cursor A token that can be read from your previous response, telling the server where to start the next page. */ public ArchiveGetMediaItemsResponse getArchiveMediaItemsPage(ArchiveCredentialPresentation credentialPresentation, int limit, String cursor) throws IOException { - Map headers = new HashMap<>(); - headers.put("X-Signal-ZK-Auth", Base64.encodeWithPadding(credentialPresentation.getPresentation())); - headers.put("X-Signal-ZK-Auth-Signature", Base64.encodeWithPadding(credentialPresentation.getSignedPresentation())); + Map headers = credentialPresentation.toHeaders(); String url = String.format(Locale.US, ARCHIVE_MEDIA_LIST, limit); @@ -549,10 +548,39 @@ public ArchiveGetMediaItemsResponse getArchiveMediaItemsPage(ArchiveCredentialPr return JsonUtil.fromJson(response, ArchiveGetMediaItemsResponse.class); } + /** + * Copy and re-encrypt media from the attachments cdn into the backup cdn. + */ + public ArchiveMediaResponse archiveAttachmentMedia(@Nonnull ArchiveCredentialPresentation credentialPresentation, @Nonnull ArchiveMediaRequest request) throws IOException { + Map headers = credentialPresentation.toHeaders(); + + String response = makeServiceRequestWithoutAuthentication(ARCHIVE_MEDIA, "PUT", JsonUtil.toJson(request), headers, NO_HANDLER); + + return JsonUtil.fromJson(response, ArchiveMediaResponse.class); + } + + /** + * Copy and re-encrypt media from the attachments cdn into the backup cdn. + */ + public BatchArchiveMediaResponse archiveAttachmentMedia(@Nonnull ArchiveCredentialPresentation credentialPresentation, @Nonnull BatchArchiveMediaRequest request) throws IOException { + Map headers = credentialPresentation.toHeaders(); + + String response = makeServiceRequestWithoutAuthentication(ARCHIVE_MEDIA_BATCH, "PUT", JsonUtil.toJson(request), headers, NO_HANDLER); + + return JsonUtil.fromJson(response, BatchArchiveMediaResponse.class); + } + + /** + * Delete media from the backup cdn. + */ + public void deleteArchivedMedia(@Nonnull ArchiveCredentialPresentation credentialPresentation, @Nonnull DeleteArchivedMediaRequest request) throws IOException { + Map headers = credentialPresentation.toHeaders(); + + makeServiceRequestWithoutAuthentication(ARCHIVE_MEDIA_DELETE, "POST", JsonUtil.toJson(request), headers, NO_HANDLER); + } + public ArchiveMessageBackupUploadFormResponse getArchiveMessageBackupUploadForm(ArchiveCredentialPresentation credentialPresentation) throws IOException { - Map headers = new HashMap<>(); - headers.put("X-Signal-ZK-Auth", Base64.encodeWithPadding(credentialPresentation.getPresentation())); - headers.put("X-Signal-ZK-Auth-Signature", Base64.encodeWithPadding(credentialPresentation.getSignedPresentation())); + Map headers = credentialPresentation.toHeaders(); String response = makeServiceRequestWithoutAuthentication(ARCHIVE_MESSAGE_UPLOAD_FORM, "GET", null, headers, NO_HANDLER); return JsonUtil.fromJson(response, ArchiveMessageBackupUploadFormResponse.class); @@ -922,6 +950,17 @@ private List getPreKeysBySpecifier(SignalServiceAddress destinatio } } + public void checkRepeatedUsePreKeys(ServiceIdType serviceIdType, byte[] digest) throws IOException { + String body = JsonUtil.toJson(new CheckRepeatedUsedPreKeysRequest(serviceIdType.toString(), digest)); + + makeServiceRequest(PREKEY_CHECK_PATH, "POST", body, NO_HEADERS, (responseCode, body1) -> { + // Must override this handling because otherwise code assumes a device mismatch error + if (responseCode == 409) { + throw new NonSuccessfulResponseCodeException(409); + } + }, Optional.empty()); + } + public void retrieveAttachment(int cdnNumber, SignalServiceAttachmentRemoteId cdnPath, File destination, long maxSizeBytes, ProgressListener listener) throws IOException, MissingConfigurationException { @@ -2161,7 +2200,7 @@ private Response validateServiceResponse(Response response) throw new ServerRejectedException(); } - if (responseCode != 200 && responseCode != 202 && responseCode != 204) { + if (responseCode != 200 && responseCode != 202 && responseCode != 204 && responseCode != 207) { throw new NonSuccessfulResponseCodeException(responseCode, "Bad response: " + responseCode + " " + responseMessage); } diff --git a/libsignal-service/src/main/protowire/SignalService.proto b/libsignal-service/src/main/protowire/SignalService.proto index 5bd7e7f4b7..8d4723ff82 100644 --- a/libsignal-service/src/main/protowire/SignalService.proto +++ b/libsignal-service/src/main/protowire/SignalService.proto @@ -439,9 +439,11 @@ message Verified { message SyncMessage { message Sent { message UnidentifiedDeliveryStatus { - reserved /*destinationE164*/ 1; - optional string destinationServiceId = 3; - optional bool unidentified = 2; + reserved /*destinationE164*/ 1; + optional string destinationServiceId = 3; + optional bool unidentified = 2; + reserved /*destinationPni*/ 4; + optional bytes destinationIdentityKey = 5; } message StoryMessageRecipient { @@ -460,6 +462,8 @@ message SyncMessage { optional StoryMessage storyMessage = 8; repeated StoryMessageRecipient storyMessageRecipients = 9; optional EditMessage editMessage = 10; + reserved /*destinationPni*/ 11; + // NEXT ID: 12 } message Contacts { @@ -621,13 +625,20 @@ message SyncMessage { } message CallLinkUpdate { + enum Type { + UPDATE = 0; + DELETE = 1; + } + optional bytes rootKey = 1; optional bytes adminPassKey = 2; + optional Type type = 3; } message CallLogEvent { enum Type { - CLEAR = 0; + CLEAR = 0; + MARKED_AS_READ = 1; } optional Type type = 1; diff --git a/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt b/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt index eb58325237..7bb3edec35 100644 --- a/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt +++ b/qr/lib/src/main/java/org/signal/qr/QrProcessor.kt @@ -1,5 +1,6 @@ package org.signal.qr +import android.graphics.Bitmap import androidx.camera.core.ImageProxy import com.google.zxing.BinaryBitmap import com.google.zxing.ChecksumException @@ -8,10 +9,12 @@ import com.google.zxing.FormatException import com.google.zxing.LuminanceSource import com.google.zxing.NotFoundException import com.google.zxing.PlanarYUVLuminanceSource +import com.google.zxing.RGBLuminanceSource import com.google.zxing.Result import com.google.zxing.common.HybridBinarizer import com.google.zxing.qrcode.QRCodeReader import org.signal.core.util.logging.Log +import java.nio.IntBuffer /** * Wraps [QRCodeReader] for use from API19 or API21+. @@ -35,6 +38,16 @@ class QrProcessor { return getScannedData(PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height, false)) } + fun getScannedData(bitmap: Bitmap?): String? { + if (bitmap == null) { + return null + } + + val buffer = IntBuffer.allocate((bitmap.byteCount / 4) + 1) + bitmap.copyPixelsToBuffer(buffer) + return getScannedData(RGBLuminanceSource(bitmap.width, bitmap.height, buffer.array())) + } + private fun getScannedData(source: LuminanceSource): String? { try { if (source.width != previousWidth || source.height != previousHeight) { diff --git a/video/app/build.gradle.kts b/video/app/build.gradle.kts index 39b8101922..51e84b782c 100644 --- a/video/app/build.gradle.kts +++ b/video/app/build.gradle.kts @@ -66,6 +66,7 @@ dependencies { implementation(project(":video")) implementation(project(":core-util")) implementation("androidx.work:work-runtime-ktx:2.9.0") + implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0") implementation(libs.androidx.compose.ui.tooling.core) implementation(libs.androidx.compose.ui.test.manifest) androidTestImplementation(testLibs.junit.junit) diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/Constants.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/Constants.kt index 35374abd75..2a46e63180 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/Constants.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/Constants.kt @@ -9,8 +9,8 @@ package org.thoughtcrime.video.app.transcode * A dumping ground for constants that should be referenced across the sample app. */ internal const val MIN_VIDEO_MEGABITRATE = 0.5f -internal const val DEFAULT_VIDEO_MEGABITRATE = 2.5f -internal const val MAX_VIDEO_MEGABITRATE = 5f +internal const val MAX_VIDEO_MEGABITRATE = 4f +internal val OPTIONS_AUDIO_KILOBITRATES = listOf(64, 96, 128, 160, 192) enum class VideoResolution(val longEdge: Int, val shortEdge: Int) { SD(854, 480), diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestActivity.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestActivity.kt index 21e015a2e2..76137f651c 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestActivity.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestActivity.kt @@ -22,11 +22,15 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.runtime.collectAsState import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.unit.dp import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -43,6 +47,7 @@ import org.thoughtcrime.video.app.ui.theme.SignalTheme class TranscodeTestActivity : AppCompatActivity() { private val TAG = "TranscodeTestActivity" private val viewModel: TranscodeTestViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) viewModel.initialize(this) @@ -60,28 +65,19 @@ class TranscodeTestActivity : AppCompatActivity() { setContent { SignalTheme { Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { - val videoUris = viewModel.selectedVideos - val outputDir = viewModel.outputDirectory val transcodingJobs = viewModel.getTranscodingJobsAsState().collectAsState(emptyList()) if (transcodingJobs.value.isNotEmpty()) { TranscodingJobProgress(transcodingJobs = transcodingJobs.value, resetButtonOnClick = { viewModel.reset() }) - } else if (videoUris.isEmpty()) { + } else if (viewModel.selectedVideos.isEmpty()) { SelectInput { pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.VideoOnly)) } - } else if (outputDir == null) { + } else if (viewModel.outputDirectory == null) { SelectOutput { outputDirRequest.launch(null) } } else { ConfigureEncodingParameters( - videoUris = videoUris, - onAutoSettingsCheckChanged = { viewModel.useAutoTranscodingSettings = it }, - onRadioButtonSelected = { viewModel.videoResolution = it }, - onSliderValueChanged = { viewModel.videoMegaBitrate = it }, - onFastStartSettingCheckChanged = { viewModel.enableFastStart = it }, - onSequentialSettingCheckChanged = { viewModel.forceSequentialQueueProcessing = it }, - buttonClickListener = { - viewModel.transcode() - viewModel.selectedVideos = emptyList() - viewModel.resetOutputDirectory() - } + modifier = Modifier + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()), + viewModel = viewModel ) } } diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestRepository.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestRepository.kt index daa1933b56..19309c8894 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestRepository.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestRepository.kt @@ -16,6 +16,7 @@ import androidx.work.WorkQuery import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.emptyFlow import org.signal.core.util.readToList +import org.thoughtcrime.securesms.video.TranscodingPreset import java.util.UUID import kotlin.math.absoluteValue import kotlin.random.Random @@ -27,7 +28,13 @@ class TranscodeTestRepository(context: Context) { private val workManager = WorkManager.getInstance(context) private val usedNotificationIds = emptySet() - fun transcode(selectedVideos: List, outputDirectory: Uri, forceSequentialProcessing: Boolean, customTranscodingOptions: CustomTranscodingOptions?): Map { + private fun transcode(selectedVideos: List, outputDirectory: Uri, forceSequentialProcessing: Boolean, transcodingPreset: TranscodingPreset? = null, customTranscodingOptions: CustomTranscodingOptions? = null): Map { + if (customTranscodingOptions == null && transcodingPreset == null) { + throw IllegalArgumentException("Must define either custom options or transcoding preset!") + } else if (customTranscodingOptions != null && transcodingPreset != null) { + throw IllegalArgumentException("Cannot define both custom options and transcoding preset!") + } + if (selectedVideos.isEmpty()) { return emptyMap() } @@ -42,11 +49,15 @@ class TranscodeTestRepository(context: Context) { .putString(TranscodeWorker.KEY_OUTPUT_URI, outputDirectory.toString()) .putInt(TranscodeWorker.KEY_NOTIFICATION_ID, notificationId) - if (customTranscodingOptions != null) { + if (transcodingPreset != null) { + inputData.putString(TranscodeWorker.KEY_TRANSCODING_PRESET_NAME, transcodingPreset.name) + } else if (customTranscodingOptions != null) { inputData.putInt(TranscodeWorker.KEY_LONG_EDGE, customTranscodingOptions.videoResolution.longEdge) inputData.putInt(TranscodeWorker.KEY_SHORT_EDGE, customTranscodingOptions.videoResolution.shortEdge) - inputData.putInt(TranscodeWorker.KEY_BIT_RATE, customTranscodingOptions.bitrate) + inputData.putInt(TranscodeWorker.KEY_VIDEO_BIT_RATE, customTranscodingOptions.videoBitrate) + inputData.putInt(TranscodeWorker.KEY_AUDIO_BIT_RATE, customTranscodingOptions.audioBitrate) inputData.putBoolean(TranscodeWorker.KEY_ENABLE_FASTSTART, customTranscodingOptions.enableFastStart) + inputData.putBoolean(TranscodeWorker.KEY_ENABLE_AUDIO_REMUX, customTranscodingOptions.enableAudioRemux) } val transcodeRequest = OneTimeWorkRequestBuilder() @@ -69,6 +80,14 @@ class TranscodeTestRepository(context: Context) { return idsToUris } + fun transcodeWithCustomOptions(selectedVideos: List, outputDirectory: Uri, forceSequentialProcessing: Boolean, customTranscodingOptions: CustomTranscodingOptions?): Map { + return transcode(selectedVideos, outputDirectory, forceSequentialProcessing, customTranscodingOptions = customTranscodingOptions) + } + + fun transcodeWithPresetOptions(selectedVideos: List, outputDirectory: Uri, forceSequentialProcessing: Boolean, transcodingPreset: TranscodingPreset): Map { + return transcode(selectedVideos, outputDirectory, forceSequentialProcessing, transcodingPreset) + } + fun getTranscodingJobsAsFlow(jobIds: List): Flow> { if (jobIds.isEmpty()) { return emptyFlow() @@ -117,7 +136,7 @@ class TranscodeTestRepository(context: Context) { private data class FileMetadata(val documentId: String, val label: String, val size: Long) - data class CustomTranscodingOptions(val videoResolution: VideoResolution, val bitrate: Int, val enableFastStart: Boolean) + data class CustomTranscodingOptions(val videoResolution: VideoResolution, val videoBitrate: Int, val audioBitrate: Int, val enableFastStart: Boolean, val enableAudioRemux: Boolean) companion object { private const val TAG = "TranscodingTestRepository" diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestViewModel.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestViewModel.kt index f8127166c6..0829da2e68 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestViewModel.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeTestViewModel.kt @@ -9,11 +9,15 @@ import android.content.Context import android.net.Uri import android.widget.Toast import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.lifecycle.ViewModel import androidx.work.WorkInfo import kotlinx.coroutines.flow.Flow +import org.thoughtcrime.securesms.video.TranscodingPreset +import org.thoughtcrime.securesms.video.TranscodingQuality import java.util.UUID import kotlin.math.roundToInt @@ -25,14 +29,20 @@ class TranscodeTestViewModel : ViewModel() { private var backPressedRunnable = {} private var transcodingJobs: Map = emptyMap() + var transcodingPreset by mutableStateOf(TranscodingPreset.LEVEL_2) + private set + var outputDirectory: Uri? by mutableStateOf(null) private set + var selectedVideos: List by mutableStateOf(emptyList()) - var videoMegaBitrate = DEFAULT_VIDEO_MEGABITRATE - var videoResolution = VideoResolution.HD - var useAutoTranscodingSettings = true - var enableFastStart = true - var forceSequentialQueueProcessing = false + var videoMegaBitrate by mutableFloatStateOf(calculateVideoMegaBitrateFromPreset(transcodingPreset)) + var videoResolution by mutableStateOf(convertPresetToVideoResolution(transcodingPreset)) + var audioKiloBitrate by mutableIntStateOf(calculateAudioKiloBitrateFromPreset(transcodingPreset)) + var useAutoTranscodingSettings by mutableStateOf(true) + var enableFastStart by mutableStateOf(true) + var enableAudioRemux by mutableStateOf(true) + var forceSequentialQueueProcessing by mutableStateOf(false) fun initialize(context: Context) { repository = TranscodeTestRepository(context) @@ -41,13 +51,36 @@ class TranscodeTestViewModel : ViewModel() { fun transcode() { val output = outputDirectory ?: throw IllegalStateException("No output directory selected!") - if (useAutoTranscodingSettings) { - transcodingJobs = repository.transcode(selectedVideos, output, forceSequentialQueueProcessing, null) + transcodingJobs = if (useAutoTranscodingSettings) { + repository.transcodeWithPresetOptions( + selectedVideos, + output, + forceSequentialQueueProcessing, + transcodingPreset + ) } else { - transcodingJobs = repository.transcode(selectedVideos, output, forceSequentialQueueProcessing, TranscodeTestRepository.CustomTranscodingOptions(videoResolution, (videoMegaBitrate * MEGABIT).roundToInt(), enableFastStart)) + repository.transcodeWithCustomOptions( + selectedVideos, + output, + forceSequentialQueueProcessing, + TranscodeTestRepository.CustomTranscodingOptions( + videoResolution, + (videoMegaBitrate * MEGABIT).roundToInt(), + audioKiloBitrate * KILOBIT, + enableAudioRemux, + enableFastStart + ) + ) } } + fun updateTranscodingPreset(preset: TranscodingPreset) { + transcodingPreset = preset + videoResolution = convertPresetToVideoResolution(preset) + videoMegaBitrate = calculateVideoMegaBitrateFromPreset(preset) + audioKiloBitrate = calculateAudioKiloBitrateFromPreset(preset) + } + fun getTranscodingJobsAsState(): Flow> { return repository.getTranscodingJobsAsFlow(transcodingJobs.keys.toList()) } @@ -57,17 +90,13 @@ class TranscodeTestViewModel : ViewModel() { repository.cleanFailedTranscodes(context, folderUri) } - fun getUriFromJobId(jobId: UUID): Uri? { - return transcodingJobs[jobId] - } - fun reset() { cancelAllTranscodes() resetOutputDirectory() selectedVideos = emptyList() } - fun cancelAllTranscodes() { + private fun cancelAllTranscodes() { repository.cancelAllTranscodes() transcodingJobs = emptyMap() } @@ -78,5 +107,24 @@ class TranscodeTestViewModel : ViewModel() { companion object { private const val MEGABIT = 1000000 + private const val KILOBIT = 1000 + + @JvmStatic + private fun calculateVideoMegaBitrateFromPreset(preset: TranscodingPreset): Float { + val quality = TranscodingQuality.createFromPreset(preset, -1) + return quality.targetVideoBitRate.toFloat() / MEGABIT + } + + @JvmStatic + private fun calculateAudioKiloBitrateFromPreset(preset: TranscodingPreset): Int { + val quality = TranscodingQuality.createFromPreset(preset, -1) + return quality.targetAudioBitRate / KILOBIT + } + + @JvmStatic + private fun convertPresetToVideoResolution(preset: TranscodingPreset) = when (preset) { + TranscodingPreset.LEVEL_3 -> VideoResolution.HD + else -> VideoResolution.SD + } } } diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeWorker.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeWorker.kt index 5316780c87..2b6c7f1947 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeWorker.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/TranscodeWorker.kt @@ -24,6 +24,7 @@ import androidx.work.WorkerParameters import org.signal.core.util.getLength import org.signal.core.util.readLength import org.thoughtcrime.securesms.video.StreamingTranscoder +import org.thoughtcrime.securesms.video.TranscodingPreset import org.thoughtcrime.securesms.video.postprocessing.Mp4FaststartPostProcessor import org.thoughtcrime.securesms.video.videoconverter.mediadatasource.InputStreamMediaDataSource import org.thoughtcrime.securesms.video.videoconverter.utils.VideoConstants @@ -41,6 +42,12 @@ class TranscodeWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker( @UnstableApi override suspend fun doWork(): Result { val logPrefix = "[Job ${id.toString().takeLast(4)}]" + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + Log.w(TAG, "$logPrefix Transcoder is only supported on API 26+!") + return Result.failure() + } + val notificationId = inputData.getInt(KEY_NOTIFICATION_ID, -1) if (notificationId < 0) { Log.w(TAG, "$logPrefix Notification ID was null!") @@ -60,8 +67,11 @@ class TranscodeWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker( } val postProcessForFastStart = inputData.getBoolean(KEY_ENABLE_FASTSTART, true) + val transcodingPreset = inputData.getString(KEY_TRANSCODING_PRESET_NAME) val resolution = inputData.getInt(KEY_SHORT_EDGE, -1) - val desiredBitrate = inputData.getInt(KEY_BIT_RATE, -1) + val videoBitrate = inputData.getInt(KEY_VIDEO_BIT_RATE, -1) + val audioBitrate = inputData.getInt(KEY_AUDIO_BIT_RATE, -1) + val audioRemux = inputData.getBoolean(KEY_ENABLE_AUDIO_REMUX, true) val input = DocumentFile.fromSingleUri(applicationContext, Uri.parse(inputUri))?.name if (input == null) { @@ -80,15 +90,14 @@ class TranscodeWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker( } val datasource = WorkerMediaDataSource(applicationContext, Uri.parse(inputUri)) - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - Log.w(TAG, "$logPrefix Transcoder is only supported on API 26+!") - return Result.failure() - } - val transcoder = if (resolution > 0 && desiredBitrate > 0) { - StreamingTranscoder(datasource, null, desiredBitrate, resolution, false) + val transcoder = if (resolution > 0 && videoBitrate > 0) { + Log.d(TAG, "$logPrefix Initializing StreamingTranscoder with custom parameters: B:V=$videoBitrate, B:A=$audioBitrate, res=$resolution, audioRemux=$audioRemux") + StreamingTranscoder.createManuallyForTesting(datasource, null, videoBitrate, audioBitrate, resolution, audioRemux) + } else if (transcodingPreset != null) { + StreamingTranscoder(datasource, null, TranscodingPreset.valueOf(transcodingPreset), DEFAULT_FILE_SIZE_LIMIT, audioRemux) } else { - StreamingTranscoder(datasource, null, DEFAULT_FILE_SIZE_LIMIT, true) + throw IllegalArgumentException("Improper input data! No TranscodingPreset defined, or invalid manual parameters!") } setForeground(createForegroundInfo(-1, notificationId)) @@ -213,13 +222,16 @@ class TranscodeWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker( private const val TAG = "TranscodeWorker" private const val OUTPUT_FILE_EXTENSION = ".mp4" private const val TEMP_FILE_EXTENSION = ".tmp" - private const val DEFAULT_FILE_SIZE_LIMIT: Long = 50 * 1024 * 1024 + private const val DEFAULT_FILE_SIZE_LIMIT: Long = 100 * 1024 * 1024 const val KEY_INPUT_URI = "input_uri" const val KEY_OUTPUT_URI = "output_uri" + const val KEY_TRANSCODING_PRESET_NAME = "transcoding_quality_preset" const val KEY_PROGRESS = "progress" const val KEY_LONG_EDGE = "resolution_long_edge" const val KEY_SHORT_EDGE = "resolution_short_edge" - const val KEY_BIT_RATE = "video_bit_rate" + const val KEY_VIDEO_BIT_RATE = "video_bit_rate" + const val KEY_AUDIO_BIT_RATE = "audio_bit_rate" + const val KEY_ENABLE_AUDIO_REMUX = "audio_remux" const val KEY_ENABLE_FASTSTART = "video_enable_faststart" const val KEY_NOTIFICATION_ID = "notification_id" } diff --git a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/composables/ConfigurationSelection.kt b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/composables/ConfigurationSelection.kt index 4b6d7cc41d..9ec0351c4d 100644 --- a/video/app/src/main/java/org/thoughtcrime/video/app/transcode/composables/ConfigurationSelection.kt +++ b/video/app/src/main/java/org/thoughtcrime/video/app/transcode/composables/ConfigurationSelection.kt @@ -20,11 +20,6 @@ import androidx.compose.material3.Slider import androidx.compose.material3.SliderDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.semantics.Role @@ -35,179 +30,272 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import org.thoughtcrime.video.app.transcode.DEFAULT_VIDEO_MEGABITRATE +import androidx.lifecycle.viewmodel.compose.viewModel +import org.thoughtcrime.securesms.video.TranscodingPreset import org.thoughtcrime.video.app.transcode.MAX_VIDEO_MEGABITRATE import org.thoughtcrime.video.app.transcode.MIN_VIDEO_MEGABITRATE +import org.thoughtcrime.video.app.transcode.OPTIONS_AUDIO_KILOBITRATES +import org.thoughtcrime.video.app.transcode.TranscodeTestViewModel import org.thoughtcrime.video.app.transcode.VideoResolution import org.thoughtcrime.video.app.ui.composables.LabeledButton +import kotlin.math.roundToInt /** * A view that shows the queue of video URIs to encode, and allows you to change the encoding options. */ @Composable fun ConfigureEncodingParameters( - videoUris: List, - onAutoSettingsCheckChanged: (Boolean) -> Unit, - onRadioButtonSelected: (VideoResolution) -> Unit, - onSliderValueChanged: (Float) -> Unit, - onFastStartSettingCheckChanged: (Boolean) -> Unit, - onSequentialSettingCheckChanged: (Boolean) -> Unit, - buttonClickListener: () -> Unit, modifier: Modifier = Modifier, - initialSettingsAutoSelected: Boolean = true + viewModel: TranscodeTestViewModel = viewModel() ) { - var sliderPosition by remember { mutableFloatStateOf(DEFAULT_VIDEO_MEGABITRATE) } - var selectedResolution by remember { mutableStateOf(VideoResolution.HD) } - val autoSettingsChecked = remember { mutableStateOf(initialSettingsAutoSelected) } - val fastStartChecked = remember { mutableStateOf(true) } - val sequentialProcessingChecked = remember { mutableStateOf(false) } Column( verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier.padding(16.dp) + modifier = modifier ) { Text( text = "Selected videos:", modifier = Modifier + .padding(horizontal = 8.dp) .align(Alignment.Start) - .padding(16.dp) ) - videoUris.forEach { + viewModel.selectedVideos.forEach { Text( text = it.toString(), fontSize = 8.sp, fontFamily = FontFamily.Monospace, modifier = Modifier + .padding(horizontal = 8.dp) .align(Alignment.Start) - .padding(horizontal = 16.dp) ) } Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier - .padding(horizontal = 8.dp) .fillMaxWidth() ) { Checkbox( - checked = sequentialProcessingChecked.value, - onCheckedChange = { isChecked -> - sequentialProcessingChecked.value = isChecked - onSequentialSettingCheckChanged(isChecked) - } + checked = viewModel.forceSequentialQueueProcessing, + onCheckedChange = { viewModel.forceSequentialQueueProcessing = it } ) Text(text = "Force Sequential Queue Processing", style = MaterialTheme.typography.bodySmall) } Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier - .padding(vertical = 8.dp, horizontal = 8.dp) .fillMaxWidth() ) { Checkbox( - checked = autoSettingsChecked.value, - onCheckedChange = { isChecked -> - autoSettingsChecked.value = isChecked - onAutoSettingsCheckChanged(isChecked) - } + checked = viewModel.useAutoTranscodingSettings, + onCheckedChange = { viewModel.useAutoTranscodingSettings = it } ) Text( text = "Match Signal App Transcoding Settings", style = MaterialTheme.typography.bodySmall ) } - if (!autoSettingsChecked.value) { - Row( + if (viewModel.useAutoTranscodingSettings) { + PresetPicker( + viewModel.transcodingPreset, + viewModel::updateTranscodingPreset, + modifier = Modifier.padding(vertical = 16.dp) + ) + } else { + CustomSettings( + selectedResolution = viewModel.videoResolution, + onResolutionSelected = { viewModel.videoResolution = it }, + fastStartChecked = viewModel.enableFastStart, + onFastStartSettingCheckChanged = { viewModel.enableFastStart = it }, + audioRemuxChecked = viewModel.enableAudioRemux, + onAudioRemuxCheckChanged = { viewModel.enableAudioRemux = it }, + videoSliderPosition = viewModel.videoMegaBitrate, + updateVideoSliderPosition = { viewModel.videoMegaBitrate = it }, + audioSliderPosition = viewModel.audioKiloBitrate, + updateAudioSliderPosition = { viewModel.audioKiloBitrate = it.roundToInt() }, + modifier = Modifier.padding(vertical = 16.dp) + ) + } + LabeledButton( + buttonLabel = "Transcode", + onClick = { + viewModel.transcode() + viewModel.selectedVideos = emptyList() + viewModel.resetOutputDirectory() + }, + modifier = Modifier.padding(vertical = 8.dp) + ) + } +} + +@Composable +private fun PresetPicker( + selectedTranscodingPreset: TranscodingPreset, + onPresetSelected: (TranscodingPreset) -> Unit, + modifier: Modifier = Modifier +) { + Row( + horizontalArrangement = Arrangement.SpaceEvenly, + modifier = modifier + .fillMaxWidth() + .selectableGroup() + ) { + TranscodingPreset.values().forEach { + Column( + horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .padding(vertical = 16.dp) - .fillMaxWidth() - .selectableGroup() + .selectable( + selected = selectedTranscodingPreset == it, + onClick = { + onPresetSelected(it) + }, + role = Role.RadioButton + ) ) { - VideoResolution.values().forEach { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier - .selectable( - selected = selectedResolution == it, - onClick = { - selectedResolution = it - onRadioButtonSelected(it) - }, - role = Role.RadioButton - ) - ) { - RadioButton( - selected = selectedResolution == it, - onClick = null, - modifier = Modifier.semantics { contentDescription = it.getContentDescription() } - ) - Text( - text = "${it.shortEdge}p", - textAlign = TextAlign.Center, - modifier = Modifier.padding(start = 16.dp) - ) - } - } + RadioButton( + selected = selectedTranscodingPreset == it, + onClick = null, + modifier = Modifier.semantics { contentDescription = it.name } + ) + Text( + text = it.name, + textAlign = TextAlign.Center + ) } - Slider( - value = sliderPosition, - onValueChange = { - sliderPosition = it - onSliderValueChanged(it) - }, - colors = SliderDefaults.colors( - thumbColor = MaterialTheme.colorScheme.secondary, - activeTrackColor = MaterialTheme.colorScheme.secondary, - inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer - ), - valueRange = MIN_VIDEO_MEGABITRATE..MAX_VIDEO_MEGABITRATE, - modifier = Modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp) - ) - Text(text = String.format("%.1f Mbit/s", sliderPosition)) - Row( - verticalAlignment = Alignment.CenterVertically, + } + } +} + +@Composable +private fun CustomSettings( + selectedResolution: VideoResolution, + onResolutionSelected: (VideoResolution) -> Unit, + fastStartChecked: Boolean, + onFastStartSettingCheckChanged: (Boolean) -> Unit, + audioRemuxChecked: Boolean, + onAudioRemuxCheckChanged: (Boolean) -> Unit, + videoSliderPosition: Float, + updateVideoSliderPosition: (Float) -> Unit, + audioSliderPosition: Int, + updateAudioSliderPosition: (Float) -> Unit, + modifier: Modifier = Modifier +) { + Row( + horizontalArrangement = Arrangement.SpaceEvenly, + modifier = modifier + .fillMaxWidth() + .selectableGroup() + ) { + VideoResolution.values().forEach { + Column( + horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier - .padding(vertical = 8.dp, horizontal = 8.dp) - .fillMaxWidth() + .selectable( + selected = selectedResolution == it, + onClick = { onResolutionSelected(it) }, + role = Role.RadioButton + ) + .padding(start = 16.dp) ) { - Checkbox( - checked = fastStartChecked.value, - onCheckedChange = { isChecked -> - fastStartChecked.value = isChecked - onFastStartSettingCheckChanged(isChecked) - } + RadioButton( + selected = selectedResolution == it, + onClick = null, + modifier = Modifier.semantics { contentDescription = it.getContentDescription() } + ) + Text( + text = "${it.shortEdge}p", + textAlign = TextAlign.Center ) - Text(text = "Enable Mp4San Postprocessing", style = MaterialTheme.typography.bodySmall) } } - LabeledButton(buttonLabel = "Transcode", onClick = buttonClickListener, modifier = Modifier.padding(vertical = 8.dp)) + } + VideoBitrateSlider(videoSliderPosition, updateVideoSliderPosition) + AudioBitrateSlider(audioSliderPosition, updateAudioSliderPosition) + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(vertical = 8.dp, horizontal = 8.dp) + .fillMaxWidth() + ) { + Checkbox( + checked = audioRemuxChecked, + onCheckedChange = { onAudioRemuxCheckChanged(it) } + ) + Text(text = "Allow audio remuxing", style = MaterialTheme.typography.bodySmall) + } + + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .padding(vertical = 8.dp, horizontal = 8.dp) + .fillMaxWidth() + ) { + Checkbox( + checked = fastStartChecked, + onCheckedChange = { onFastStartSettingCheckChanged(it) } + ) + Text(text = "Perform Mp4San Postprocessing", style = MaterialTheme.typography.bodySmall) } } -@Preview @Composable -private fun ConfigurationScreenPreviewChecked() { - ConfigureEncodingParameters( - videoUris = listOf(Uri.parse("content://1"), Uri.parse("content://2")), - onAutoSettingsCheckChanged = {}, - onRadioButtonSelected = {}, - onSliderValueChanged = {}, - onFastStartSettingCheckChanged = {}, - onSequentialSettingCheckChanged = {}, - buttonClickListener = {} +private fun VideoBitrateSlider( + videoSliderPosition: Float, + updateSliderPosition: (Float) -> Unit, + modifier: Modifier = Modifier +) { + Slider( + value = videoSliderPosition, + onValueChange = updateSliderPosition, + colors = SliderDefaults.colors( + thumbColor = MaterialTheme.colorScheme.secondary, + activeTrackColor = MaterialTheme.colorScheme.secondary, + inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer + ), + valueRange = MIN_VIDEO_MEGABITRATE..MAX_VIDEO_MEGABITRATE, + modifier = modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp) ) + Text(text = String.format("Video: %.2f Mbit/s", videoSliderPosition)) } -@Preview @Composable -private fun ConfigurationScreenPreviewUnchecked() { - ConfigureEncodingParameters( - videoUris = listOf(Uri.parse("content://1"), Uri.parse("content://2")), - onAutoSettingsCheckChanged = {}, - onRadioButtonSelected = {}, - onSliderValueChanged = {}, - onFastStartSettingCheckChanged = {}, - onSequentialSettingCheckChanged = {}, - buttonClickListener = {}, - initialSettingsAutoSelected = false +private fun AudioBitrateSlider( + audioSliderPosition: Int, + updateSliderPosition: (Float) -> Unit, + modifier: Modifier = Modifier +) { + val minValue = OPTIONS_AUDIO_KILOBITRATES.first().toFloat() + val maxValue = OPTIONS_AUDIO_KILOBITRATES.last().toFloat() + val steps = OPTIONS_AUDIO_KILOBITRATES.size - 2 + + Slider( + value = audioSliderPosition.toFloat(), + onValueChange = updateSliderPosition, + colors = SliderDefaults.colors( + thumbColor = MaterialTheme.colorScheme.secondary, + activeTrackColor = MaterialTheme.colorScheme.secondary, + inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer + ), + valueRange = minValue..maxValue, + steps = steps, + modifier = modifier.padding(top = 16.dp, start = 16.dp, end = 16.dp) ) + Text(text = String.format("Audio: %d Kbit/s", audioSliderPosition)) +} + +@Preview(showBackground = true) +@Composable +private fun ConfigurationScreenPreviewChecked() { + val vm: TranscodeTestViewModel = viewModel() + vm.selectedVideos = listOf(Uri.parse("content://1"), Uri.parse("content://2")) + vm.forceSequentialQueueProcessing = true + ConfigureEncodingParameters() +} + +@Preview(showBackground = true) +@Composable +private fun ConfigurationScreenPreviewUnchecked() { + val vm: TranscodeTestViewModel = viewModel() + vm.selectedVideos = listOf(Uri.parse("content://1"), Uri.parse("content://2")) + vm.useAutoTranscodingSettings = false + ConfigureEncodingParameters() } diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/StreamingTranscoder.java b/video/lib/src/main/java/org/thoughtcrime/securesms/video/StreamingTranscoder.java index 99d27fd8a5..90424a2ec2 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/StreamingTranscoder.java +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/StreamingTranscoder.java @@ -6,6 +6,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import androidx.annotation.VisibleForTesting; import com.google.common.io.CountingOutputStream; @@ -13,9 +14,8 @@ import org.thoughtcrime.securesms.video.exceptions.VideoSizeException; import org.thoughtcrime.securesms.video.exceptions.VideoSourceException; import org.thoughtcrime.securesms.video.interfaces.TranscoderCancelationSignal; -import org.thoughtcrime.securesms.video.videoconverter.exceptions.EncodingException; import org.thoughtcrime.securesms.video.videoconverter.MediaConverter; -import org.thoughtcrime.securesms.video.videoconverter.utils.VideoConstants; +import org.thoughtcrime.securesms.video.videoconverter.exceptions.EncodingException; import org.thoughtcrime.securesms.video.videoconverter.mediadatasource.MediaDataSourceMediaInput; import java.io.FilterOutputStream; @@ -46,6 +46,7 @@ public final class StreamingTranscoder { */ public StreamingTranscoder(@NonNull MediaDataSource dataSource, @Nullable TranscoderOptions options, + @NonNull TranscodingPreset preset, long upperSizeLimit, boolean allowAudioRemux) throws IOException, VideoSourceException @@ -69,8 +70,8 @@ public StreamingTranscoder(@NonNull MediaDataSource dataSource, } this.inSize = dataSource.getSize(); - this.inputBitRate = VideoBitRateCalculator.bitRate(inSize, duration); - this.targetQuality = new VideoBitRateCalculator(upperSizeLimit).getTargetQuality(duration, inputBitRate); + this.inputBitRate = TranscodingQuality.bitRate(inSize, duration); + this.targetQuality = TranscodingQuality.createFromPreset(preset, duration); this.upperSizeLimit = upperSizeLimit; this.transcodeRequired = inputBitRate >= targetQuality.getTargetTotalBitRate() * 1.2 || inSize > upperSizeLimit || containsLocation(mediaMetadataRetriever) || options != null; @@ -78,12 +79,13 @@ public StreamingTranscoder(@NonNull MediaDataSource dataSource, Log.i(TAG, "Video is within 20% of target bitrate, below the size limit, contained no location metadata or custom options."); } - this.fileSizeEstimate = targetQuality.getFileSizeEstimate(); + this.fileSizeEstimate = targetQuality.getByteCountEstimate(); } - public StreamingTranscoder(@NonNull MediaDataSource dataSource, + private StreamingTranscoder(@NonNull MediaDataSource dataSource, @Nullable TranscoderOptions options, int videoBitrate, + int audioBitrate, int shortEdge, boolean allowAudioRemux) throws IOException, VideoSourceException @@ -102,13 +104,25 @@ public StreamingTranscoder(@NonNull MediaDataSource dataSource, this.inSize = dataSource.getSize(); this.duration = getDuration(mediaMetadataRetriever); - this.inputBitRate = VideoBitRateCalculator.bitRate(inSize, duration); - this.targetQuality = new TranscodingQuality(videoBitrate, VideoConstants.AUDIO_BIT_RATE, 1.0, duration, shortEdge); + this.inputBitRate = TranscodingQuality.bitRate(inSize, duration); + this.targetQuality = TranscodingQuality.createManuallyForTesting(shortEdge, videoBitrate, audioBitrate, duration); this.upperSizeLimit = 0L; this.transcodeRequired = true; - this.fileSizeEstimate = targetQuality.getFileSizeEstimate(); + this.fileSizeEstimate = targetQuality.getByteCountEstimate(); + } + + @VisibleForTesting + public static StreamingTranscoder createManuallyForTesting(@NonNull MediaDataSource dataSource, + @Nullable TranscoderOptions options, + int videoBitrate, + int audioBitrate, + int shortEdge, + boolean allowAudioRemux) + throws VideoSourceException, IOException + { + return new StreamingTranscoder(dataSource, options, videoBitrate, audioBitrate, shortEdge, allowAudioRemux); } public void transcode(@NonNull Progress progress, @@ -193,7 +207,7 @@ public void transcode(@NonNull Progress progress, numberFormat.format(outSize / 1024), (outSize * 100d) / inSize, (outSize * 100d) / fileSizeEstimate, - numberFormat.format(VideoBitRateCalculator.bitRate(outSize, duration)))); + numberFormat.format(TranscodingQuality.bitRate(outSize, duration)))); if (sizeLimitEnabled && outSize > upperSizeLimit) { throw new VideoSizeException("Size constraints could not be met!"); diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/TranscodingQuality.kt b/video/lib/src/main/java/org/thoughtcrime/securesms/video/TranscodingQuality.kt index b264078585..c06d267bc2 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/TranscodingQuality.kt +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/TranscodingQuality.kt @@ -4,26 +4,51 @@ */ package org.thoughtcrime.securesms.video +import org.thoughtcrime.securesms.video.videoconverter.utils.VideoConstants + /** * A data class to hold various video transcoding parameters, such as bitrate. */ -data class TranscodingQuality(val targetVideoBitRate: Int, val targetAudioBitRate: Int, val quality: Double, private val duration: Long, val outputResolution: Int) { - init { - if (quality < 0.0 || quality > 1.0) { - throw IllegalArgumentException("Quality $quality is outside of accepted range [0.0, 1.0]!") +class TranscodingQuality private constructor(val outputResolution: Int, val targetVideoBitRate: Int, val targetAudioBitRate: Int, private val durationMs: Long) { + companion object { + + @JvmStatic + fun createFromPreset(preset: TranscodingPreset, durationMs: Long): TranscodingQuality { + return TranscodingQuality(preset.videoShortEdge, preset.videoBitRate, preset.audioBitRate, durationMs) + } + + @JvmStatic + fun createManuallyForTesting(outputShortEdge: Int, videoBitrate: Int, audioBitrate: Int, durationMs: Long): TranscodingQuality { + return TranscodingQuality(outputShortEdge, videoBitrate, audioBitrate, durationMs) + } + + @JvmStatic + fun bitRate(bytes: Long, durationMs: Long): Int { + return (bytes * 8 / (durationMs / 1000f)).toInt() } } val targetTotalBitRate = targetVideoBitRate + targetAudioBitRate - val fileSizeEstimate = targetTotalBitRate * duration / 8000 + val byteCountEstimate = (targetTotalBitRate / 8) * (durationMs / 1000) override fun toString(): String { return "Quality{" + "targetVideoBitRate=" + targetVideoBitRate + ", targetAudioBitRate=" + targetAudioBitRate + - ", quality=" + quality + - ", duration=" + duration + - ", filesize=" + fileSizeEstimate + + ", duration=" + durationMs + + ", filesize=" + byteCountEstimate + '}' } } + +enum class TranscodingPreset(val videoShortEdge: Int, val videoBitRate: Int, val audioBitRate: Int) { + LEVEL_1(VideoConstants.VIDEO_SHORT_EDGE_SD, VideoConstants.VIDEO_BITRATE_L1, VideoConstants.AUDIO_BITRATE), + LEVEL_2(VideoConstants.VIDEO_SHORT_EDGE_HD, VideoConstants.VIDEO_BITRATE_L2, VideoConstants.AUDIO_BITRATE), + LEVEL_3(VideoConstants.VIDEO_SHORT_EDGE_HD, VideoConstants.VIDEO_BITRATE_L3, VideoConstants.AUDIO_BITRATE); + + fun calculateMaxVideoUploadDurationInSeconds(upperFileSizeLimit: Long): Int { + val upperFileSizeLimitWithMargin = (upperFileSizeLimit / 1.1).toLong() + val totalBitRate = videoBitRate + audioBitRate + return Math.toIntExact((upperFileSizeLimitWithMargin * 8) / totalBitRate) + } +} diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/VideoBitRateCalculator.java b/video/lib/src/main/java/org/thoughtcrime/securesms/video/VideoBitRateCalculator.java deleted file mode 100644 index 47bb0c7b79..0000000000 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/VideoBitRateCalculator.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.thoughtcrime.securesms.video; - -import org.thoughtcrime.securesms.video.videoconverter.utils.VideoConstants; - -/** - * Calculates a target quality output for a video to fit within a specified size. - */ -public final class VideoBitRateCalculator { - - private final long upperFileSizeLimitWithMargin; - - public VideoBitRateCalculator(long upperFileSizeLimit) { - upperFileSizeLimitWithMargin = (long) (upperFileSizeLimit / 1.1); - } - - /** - * Gets the output quality of a video of the given {@param duration}. - */ - public TranscodingQuality getTargetQuality(long duration, int inputTotalBitRate) { - int maxVideoBitRate = Math.min(VideoConstants.VIDEO_TARGET_BIT_RATE, inputTotalBitRate - VideoConstants.AUDIO_BIT_RATE); - int minVideoBitRate = Math.min(VideoConstants.VIDEO_MINIMUM_TARGET_BIT_RATE, maxVideoBitRate); - - int targetVideoBitRate = Math.max(minVideoBitRate, Math.min(getTargetVideoBitRate(upperFileSizeLimitWithMargin, duration), maxVideoBitRate)); - int bitRateRange = maxVideoBitRate - minVideoBitRate; - double quality = bitRateRange == 0 ? 1 : (targetVideoBitRate - minVideoBitRate) / (double) bitRateRange; - int outputResolution = targetVideoBitRate < VideoConstants.LOW_RES_TARGET_VIDEO_BITRATE ? VideoConstants.LOW_RES_OUTPUT_FORMAT : VideoConstants.VIDEO_SHORT_EDGE; - - return new TranscodingQuality(targetVideoBitRate, VideoConstants.AUDIO_BIT_RATE, Math.max(0, Math.min(quality, 1)), duration, outputResolution); - } - - private int getTargetVideoBitRate(long sizeGuideBytes, long duration) { - double durationSeconds = duration / 1000d; - - sizeGuideBytes -= durationSeconds * VideoConstants.AUDIO_BIT_RATE / 8; - - double targetAttachmentSizeBits = sizeGuideBytes * 8L; - - return (int) (targetAttachmentSizeBits / durationSeconds); - } - - public static int bitRate(long bytes, long durationMs) { - return (int) (bytes * 8 / (durationMs / 1000f)); - } - - public int getMaxVideoUploadDurationInSeconds() { - long totalMinimumBitrate = VideoConstants.VIDEO_MINIMUM_TARGET_BIT_RATE + VideoConstants.AUDIO_BIT_RATE; - return Math.toIntExact((upperFileSizeLimitWithMargin * 8) / totalMinimumBitrate); - } -} diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/interfaces/MediaInput.kt b/video/lib/src/main/java/org/thoughtcrime/securesms/video/interfaces/MediaInput.kt index a961eb52c2..32c8142685 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/interfaces/MediaInput.kt +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/interfaces/MediaInput.kt @@ -15,4 +15,6 @@ import java.io.IOException interface MediaInput : Closeable { @Throws(IOException::class) fun createExtractor(): MediaExtractor + + fun hasSameInput(other: MediaInput): Boolean } diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/mediadatasource/MediaDataSourceMediaInput.kt b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/mediadatasource/MediaDataSourceMediaInput.kt index 74f42a57fc..12f87c8604 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/mediadatasource/MediaDataSourceMediaInput.kt +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/mediadatasource/MediaDataSourceMediaInput.kt @@ -23,6 +23,10 @@ class MediaDataSourceMediaInput(private val mediaDataSource: MediaDataSource) : } } + override fun hasSameInput(other: MediaInput): Boolean { + return other is MediaDataSourceMediaInput && other.mediaDataSource == this.mediaDataSource + } + @Throws(IOException::class) override fun close() { mediaDataSource.close() diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/MediaCodecCompat.kt b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/MediaCodecCompat.kt index 931c2784bc..963badbeb2 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/MediaCodecCompat.kt +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/MediaCodecCompat.kt @@ -39,6 +39,13 @@ object MediaCodecCompat { } else { findBackupDecoderForDolbyVision(inputFormat) ?: throw IOException("Can't create decoder for $mimeType!") } + } else if (mimeType != null) { + try { + val decoder = MediaCodec.createDecoderByType(mimeType) + return Pair(decoder, inputFormat) + } catch (iae: IllegalArgumentException) { + throw IOException("Can't create decoder for $mimeType, which is not a valid MIME type.", iae) + } } throw IOException("Can't create decoder for $mimeType!") diff --git a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/VideoConstants.kt b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/VideoConstants.kt index 9d55b90030..418f97846e 100644 --- a/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/VideoConstants.kt +++ b/video/lib/src/main/java/org/thoughtcrime/securesms/video/videoconverter/utils/VideoConstants.kt @@ -7,16 +7,15 @@ package org.thoughtcrime.securesms.video.videoconverter.utils import android.media.MediaFormat object VideoConstants { - const val AUDIO_BIT_RATE = 192_000 - const val VIDEO_FRAME_RATE = 30 - const val VIDEO_TARGET_BIT_RATE = 2_000_000 - const val VIDEO_MINIMUM_TARGET_BIT_RATE = 500_000 - const val LOW_RES_TARGET_VIDEO_BITRATE = 1_750_000 - const val LOW_RES_OUTPUT_FORMAT = 480 - const val VIDEO_SHORT_EDGE = 720 - const val VIDEO_LONG_EDGE = 1280 + const val AUDIO_BITRATE = 128_000 + const val VIDEO_BITRATE_L1 = 1_250_000 + const val VIDEO_BITRATE_L2 = VIDEO_BITRATE_L1 + const val VIDEO_BITRATE_L3 = 2_500_000 + const val VIDEO_SHORT_EDGE_SD = 480 + const val VIDEO_SHORT_EDGE_HD = 720 + const val VIDEO_LONG_EDGE_HD = 1280 const val VIDEO_MAX_RECORD_LENGTH_S = 60 - const val TOTAL_BYTES_PER_SECOND = VIDEO_TARGET_BIT_RATE / 8 + AUDIO_BIT_RATE / 8 + const val MAX_ALLOWED_BYTES_PER_SECOND = VIDEO_BITRATE_L3 / 8 + AUDIO_BITRATE / 8 const val VIDEO_MIME_TYPE = MediaFormat.MIMETYPE_VIDEO_AVC const val AUDIO_MIME_TYPE = MediaFormat.MIMETYPE_AUDIO_AAC const val RECORDED_VIDEO_CONTENT_TYPE: String = "video/mp4"