mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-26 03:40:56 +01:00
Fix large message size calculation to use bytes.
This commit is contained in:
@@ -1052,8 +1052,10 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
|
||||
|
||||
if (hasExtraText(messageRecord)) {
|
||||
bodyText.setOverflowText(getLongMessageSpan(messageRecord));
|
||||
bodyText.setMaxLength(messageRecord.getBody().length() - 2);
|
||||
} else {
|
||||
bodyText.setOverflowText(null);
|
||||
bodyText.setMaxLength(messageRecord.getBody().length());
|
||||
}
|
||||
|
||||
if (messageRecord.isOutgoing()) {
|
||||
|
||||
@@ -2,14 +2,10 @@ package org.thoughtcrime.securesms.conversation
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.ColorRes
|
||||
import androidx.annotation.DrawableRes
|
||||
import androidx.annotation.StringRes
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.util.CharacterCalculator
|
||||
import org.thoughtcrime.securesms.util.PushCharacterCalculator
|
||||
import java.lang.IllegalArgumentException
|
||||
|
||||
/**
|
||||
* The kinds of messages you can send, e.g. a plain Signal message, an SMS message, etc.
|
||||
@@ -22,22 +18,14 @@ sealed class MessageSendType(
|
||||
val composeHintRes: Int,
|
||||
@DrawableRes
|
||||
val buttonDrawableRes: Int,
|
||||
@DrawableRes
|
||||
val menuDrawableRes: Int,
|
||||
@ColorRes
|
||||
val backgroundColorRes: Int,
|
||||
val transportType: TransportType,
|
||||
val characterCalculator: CharacterCalculator
|
||||
val maxBodyByteSize: Int
|
||||
) : Parcelable {
|
||||
|
||||
@get:JvmName("usesSignalTransport")
|
||||
val usesSignalTransport
|
||||
get() = transportType == TransportType.SIGNAL
|
||||
|
||||
fun calculateCharacters(body: String): CharacterCalculator.CharacterState {
|
||||
return characterCalculator.calculateCharacters(body)
|
||||
}
|
||||
|
||||
open fun getTitle(context: Context): String {
|
||||
return context.getString(titleRes)
|
||||
}
|
||||
@@ -50,26 +38,12 @@ sealed class MessageSendType(
|
||||
titleRes = R.string.ConversationActivity_send_message_content_description,
|
||||
composeHintRes = R.string.conversation_activity__type_message_push,
|
||||
buttonDrawableRes = R.drawable.ic_send_lock_24,
|
||||
menuDrawableRes = R.drawable.ic_secure_24,
|
||||
backgroundColorRes = R.color.core_ultramarine,
|
||||
transportType = TransportType.SIGNAL,
|
||||
characterCalculator = PushCharacterCalculator()
|
||||
maxBodyByteSize = 2048
|
||||
)
|
||||
|
||||
enum class TransportType {
|
||||
SIGNAL,
|
||||
SMS
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun getAllAvailable(): List<MessageSendType> {
|
||||
return listOf(SignalMessageSendType)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun getFirstForTransport(transportType: TransportType): MessageSendType {
|
||||
return getAllAvailable().firstOrNull { it.transportType == transportType } ?: throw IllegalArgumentException("No options available for desired type $transportType!")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1281,25 +1281,6 @@ class ConversationFragment :
|
||||
}
|
||||
}
|
||||
|
||||
private fun calculateCharactersRemaining() {
|
||||
val messageBody: String = binding.conversationInputPanel.embeddedTextEditor.textTrimmed.toString()
|
||||
val charactersLeftView: TextView = binding.conversationInputSpaceLeft
|
||||
val characterState = MessageSendType.SignalMessageSendType.calculateCharacters(messageBody)
|
||||
|
||||
if (characterState.charactersRemaining <= 15 || characterState.messagesSpent > 1) {
|
||||
charactersLeftView.text = String.format(
|
||||
Locale.getDefault(),
|
||||
"%d/%d (%d)",
|
||||
characterState.charactersRemaining,
|
||||
characterState.maxTotalMessageSize,
|
||||
characterState.messagesSpent
|
||||
)
|
||||
charactersLeftView.visibility = View.VISIBLE
|
||||
} else {
|
||||
charactersLeftView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
private fun registerForResults() {
|
||||
addToContactsLauncher = registerForActivityResult(AddToContactsContract()) {}
|
||||
conversationActivityResultContracts = ConversationActivityResultContracts(this, ActivityResultCallbacks())
|
||||
@@ -4020,7 +4001,6 @@ class ConversationFragment :
|
||||
}
|
||||
|
||||
override fun afterTextChanged(s: Editable) {
|
||||
calculateCharactersRemaining()
|
||||
if (composeText.textTrimmed.isEmpty() || beforeLength == 0) {
|
||||
composeText.postDelayed({
|
||||
if (lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) {
|
||||
|
||||
@@ -40,7 +40,6 @@ import org.thoughtcrime.securesms.components.emoji.EmojiStrings
|
||||
import org.thoughtcrime.securesms.contactshare.Contact
|
||||
import org.thoughtcrime.securesms.contactshare.ContactUtil
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage
|
||||
import org.thoughtcrime.securesms.conversation.MessageSendType
|
||||
import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart
|
||||
import org.thoughtcrime.securesms.conversation.v2.RequestReviewState.GroupReviewState
|
||||
import org.thoughtcrime.securesms.conversation.v2.RequestReviewState.IndividualReviewState
|
||||
@@ -186,8 +185,7 @@ class ConversationRepository(
|
||||
val sendCompletable = Completable.create { emitter ->
|
||||
val splitMessage: MessageUtil.SplitResult = MessageUtil.getSplitMessage(
|
||||
applicationContext,
|
||||
body,
|
||||
MessageSendType.SignalMessageSendType.calculateCharacters(body).maxPrimaryMessageSize
|
||||
body
|
||||
)
|
||||
|
||||
val outgoingMessageSlideDeck: SlideDeck? = splitMessage.textSlide.map {
|
||||
|
||||
Reference in New Issue
Block a user