Merge pull request #4658 from nextcloud/conversation_description_length

Set limit on conversation description length
This commit is contained in:
Marcel Hibbe 2025-02-05 13:44:24 +00:00 committed by GitHub
commit 0e4e2f3b03
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 38 additions and 2 deletions

View File

@ -90,6 +90,7 @@ import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.contacts.ContactsActivityCompose import com.nextcloud.talk.contacts.ContactsActivityCompose
import com.nextcloud.talk.contacts.loadImage import com.nextcloud.talk.contacts.loadImage
import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser import com.nextcloud.talk.models.json.autocomplete.AutocompleteUser
import com.nextcloud.talk.utils.CapabilitiesUtil
import com.nextcloud.talk.utils.PickImage import com.nextcloud.talk.utils.PickImage
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
import javax.inject.Inject import javax.inject.Inject
@ -342,7 +343,22 @@ fun ConversationNameAndDescription(conversationCreationViewModel: ConversationCr
OutlinedTextField( OutlinedTextField(
value = conversationDescription.value, value = conversationDescription.value,
onValueChange = { onValueChange = {
conversationCreationViewModel.updateConversationDescription(it) if (it.length > CapabilitiesUtil.conversationDescriptionLength(
conversationCreationViewModel.currentUser
.capabilities?.spreedCapability!!
)
) {
conversationCreationViewModel.updateConversationDescription(
it.take(
CapabilitiesUtil.conversationDescriptionLength(
conversationCreationViewModel.currentUser
.capabilities?.spreedCapability!!
)
)
)
} else {
conversationCreationViewModel.updateConversationDescription(it)
}
}, },
label = { Text(text = stringResource(id = R.string.nc_conversation_description)) }, label = { Text(text = stringResource(id = R.string.nc_conversation_description)) },
modifier = Modifier modifier = Modifier

View File

@ -10,6 +10,7 @@ package com.nextcloud.talk.conversationinfoedit
import android.app.Activity import android.app.Activity
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.text.InputFilter
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.Menu import android.view.Menu
@ -118,6 +119,12 @@ class ConversationInfoEditActivity : BaseActivity() {
pickImage = PickImage(this, conversationUser) pickImage = PickImage(this, conversationUser)
val max = CapabilitiesUtil.conversationDescriptionLength(conversationUser.capabilities?.spreedCapability!!)
binding.conversationDescription.filters = arrayOf(
InputFilter.LengthFilter(max)
)
binding.conversationDescriptionInputLayout.counterMaxLength = max
initObservers() initObservers()
} }
@ -277,7 +284,7 @@ class ConversationInfoEditActivity : BaseActivity() {
) )
} }
fun saveConversationDescription() { private fun saveConversationDescription() {
val conversationDescription = binding.conversationDescription.text.toString() val conversationDescription = binding.conversationDescription.text.toString()
conversationInfoEditViewModel.setConversationDescription(conversation!!.token, conversationDescription) conversationInfoEditViewModel.setConversationDescription(conversation!!.token, conversationDescription)
} }

View File

@ -121,6 +121,16 @@ object CapabilitiesUtil {
return DEFAULT_CHAT_SIZE return DEFAULT_CHAT_SIZE
} }
fun conversationDescriptionLength(spreedCapabilities: SpreedCapability): Int {
if (spreedCapabilities.config?.containsKey("conversations") == true) {
val map: Map<String, Any>? = spreedCapabilities.config!!["conversations"]
if (map != null && map.containsKey("description-length")) {
return (map["description-length"].toString().toInt())
}
}
return CONVERSATION_DESCRIPTION_LENGTH_FOR_OLD_SERVER
}
fun isReadStatusAvailable(spreedCapabilities: SpreedCapability): Boolean { fun isReadStatusAvailable(spreedCapabilities: SpreedCapability): Boolean {
if (spreedCapabilities.config?.containsKey("chat") == true) { if (spreedCapabilities.config?.containsKey("chat") == true) {
val map: Map<String, Any>? = spreedCapabilities.config!!["chat"] val map: Map<String, Any>? = spreedCapabilities.config!!["chat"]
@ -287,4 +297,5 @@ object CapabilitiesUtil {
const val RECORDING_CONSENT_DEPEND_ON_CONVERSATION = 2 const val RECORDING_CONSENT_DEPEND_ON_CONVERSATION = 2
private const val SERVER_VERSION_MIN_SUPPORTED = 17 private const val SERVER_VERSION_MIN_SUPPORTED = 17
private const val SERVER_VERSION_SUPPORT_WARNING = 26 private const val SERVER_VERSION_SUPPORT_WARNING = 26
private const val CONVERSATION_DESCRIPTION_LENGTH_FOR_OLD_SERVER = 500
} }

View File

@ -138,12 +138,14 @@
app:boxStrokeColor="@color/colorPrimary" app:boxStrokeColor="@color/colorPrimary"
app:errorTextAppearance="@style/ErrorAppearance" app:errorTextAppearance="@style/ErrorAppearance"
app:hintTextColor="@color/colorPrimary" app:hintTextColor="@color/colorPrimary"
app:counterEnabled="true"
android:hint="@string/nc_conversation_description"> android:hint="@string/nc_conversation_description">
<com.nextcloud.talk.utils.EmojiTextInputEditText <com.nextcloud.talk.utils.EmojiTextInputEditText
android:id="@+id/conversation_description" android:id="@+id/conversation_description"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxHeight="300dp"
android:imeOptions="actionNext" android:imeOptions="actionNext"
android:inputType="text|textMultiLine" android:inputType="text|textMultiLine"
android:singleLine="true" android:singleLine="true"