diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 3f5bd5366..bcb3e8bd9 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -84,6 +84,7 @@ import android.widget.RelativeLayout.BELOW import android.widget.RelativeLayout.LayoutParams import android.widget.SeekBar import android.widget.TextView +import android.widget.Toast import androidx.activity.OnBackPressedCallback import androidx.appcompat.view.ContextThemeWrapper import androidx.core.content.ContextCompat @@ -893,8 +894,25 @@ class ChatActivity : // unused atm } - override fun onNext(t: ChatOCSSingleMessage) { + override fun onNext(message: ChatOCSSingleMessage) { //unused atm + when(message.meta!!.statusCode){ + HTTP_BAD_REQUEST -> { + Toast.makeText(context, + getString(R.string.edit_error_24_hours_old_message),Toast.LENGTH_SHORT) + .show() + } + HTTP_FORBIDDEN -> { + Toast.makeText(context, + getString(R.string.conversation_is_read_only), + Toast.LENGTH_SHORT).show() + } + HTTP_NOT_FOUND -> { + Toast.makeText(context, + "Conversation Cannot be Found", + Toast.LENGTH_SHORT).show() + } + } } override fun onError(e: Throwable) { @@ -904,7 +922,7 @@ class ChatActivity : clearEditUI() } }) - // remove last item from list + } private fun clearEditUI() { @@ -912,6 +930,7 @@ class ChatActivity : binding.messageInputView.clearEditMessage.visibility = View.GONE editableBehaviorSubject.onNext(false) binding.messageInputView.inputEditText.setText("") + } private fun themeMessageInputView() { @@ -3820,6 +3839,10 @@ class ChatActivity : } else if (isPollVotedMessage(currentMessage)) { // delete poll system messages chatMessageIterator.remove() + }else if(isEditMessage(currentMessage)){ + if (!chatMessageMap.containsKey(currentMessage.value.parentMessage!!.id)){ + chatMessageIterator.remove() + } } } return chatMessageMap.values.toList() @@ -3860,6 +3883,11 @@ class ChatActivity : currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.REACTION_REVOKED } + private fun isEditMessage(currentMessage:MutableMap.MutableEntry):Boolean{ + return currentMessage.value.parentMessage != null && currentMessage.value.systemMessageType == ChatMessage + .SystemMessageType.MESSAGE_EDITED + } + private fun isPollVotedMessage(currentMessage: MutableMap.MutableEntry): Boolean { return currentMessage.value.systemMessageType == ChatMessage.SystemMessageType.POLL_VOTED } @@ -4672,6 +4700,9 @@ class ChatActivity : private const val STATUS_SIZE_IN_DP = 9f private const val HTTP_CODE_NOT_MODIFIED = 304 private const val HTTP_CODE_PRECONDITION_FAILED = 412 + private const val HTTP_BAD_REQUEST = 400 + private const val HTTP_FORBIDDEN = 403 + private const val HTTP_NOT_FOUND = 404 private const val QUOTED_MESSAGE_IMAGE_MAX_HEIGHT = 96f private const val MENTION_AUTO_COMPLETE_ELEVATION = 6f private const val MESSAGE_PULL_LIMIT = 100 diff --git a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.kt b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.kt index c9d70038a..3b6db4fd7 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.kt @@ -507,6 +507,7 @@ data class ChatMessage( GUEST_MODERATOR_PROMOTED, GUEST_MODERATOR_DEMOTED, MESSAGE_DELETED, + MESSAGE_EDITED, FILE_SHARED, OBJECT_SHARED, MATTERBRIDGE_CONFIG_ADDED, diff --git a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt index 9fe1a36b3..807e7a914 100644 --- a/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt +++ b/app/src/main/java/com/nextcloud/talk/models/json/converters/EnumSystemMessageTypeConverter.kt @@ -127,6 +127,7 @@ class EnumSystemMessageTypeConverter : StringBasedTypeConverter GUEST_MODERATOR_PROMOTED "guest_moderator_demoted" -> GUEST_MODERATOR_DEMOTED "message_deleted" -> MESSAGE_DELETED + "message_edited" -> ChatMessage.SystemMessageType.MESSAGE_EDITED "file_shared" -> FILE_SHARED "object_shared" -> OBJECT_SHARED "matterbridge_config_added" -> MATTERBRIDGE_CONFIG_ADDED @@ -193,6 +194,7 @@ class EnumSystemMessageTypeConverter : StringBasedTypeConverter "guest_moderator_promoted" GUEST_MODERATOR_DEMOTED -> "guest_moderator_demoted" MESSAGE_DELETED -> "message_deleted" + ChatMessage.SystemMessageType.MESSAGE_EDITED -> "message_edited" FILE_SHARED -> "file_shared" OBJECT_SHARED -> "object_shared" MATTERBRIDGE_CONFIG_ADDED -> "matterbridge_config_added" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6bb941f8d..b87215ad3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -790,4 +790,6 @@ How to translate with transifex: Edit message Send Edit Message Clear Edit Message + Cannot Edit Messages older than 24 hours + Conversation is read Only