From c6c4e7b5034de038335a495d778c082652b81bb1 Mon Sep 17 00:00:00 2001 From: rapterjet2004 Date: Wed, 15 May 2024 10:40:04 -0500 Subject: [PATCH] Bug fixes Signed-off-by: rapterjet2004 --- .../com/nextcloud/talk/chat/ChatActivity.kt | 11 +++-- .../talk/chat/MessageInputFragment.kt | 44 +++++++++++++------ .../talk/chat/viewmodels/ChatViewModel.kt | 38 +--------------- .../chat/viewmodels/MessageInputViewModel.kt | 14 +++--- 4 files changed, 45 insertions(+), 62 deletions(-) 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 b9e484211d..edd0e87aa5 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -517,10 +517,10 @@ class ChatActivity : override fun onSaveInstanceState(outState: Bundle) { if (currentlyPlayedVoiceMessage != null) { - outState.putString(CURRENT_AUDIO_MESSAGE_KEY, currentlyPlayedVoiceMessage!!.getId()) + outState.putString(CURRENT_AUDIO_MESSAGE_KEY, currentlyPlayedVoiceMessage!!.id) outState.putInt(CURRENT_AUDIO_POSITION_KEY, currentlyPlayedVoiceMessage!!.voiceMessagePlayedSeconds) outState.putBoolean(CURRENT_AUDIO_WAS_PLAYING_KEY, currentlyPlayedVoiceMessage!!.isPlayingVoiceMessage) - Log.d(RESUME_AUDIO_TAG, "Stored current audio message ID: " + currentlyPlayedVoiceMessage!!.getId()) + Log.d(RESUME_AUDIO_TAG, "Stored current audio message ID: " + currentlyPlayedVoiceMessage!!.id) Log.d( RESUME_AUDIO_TAG, "Audio Position: " + currentlyPlayedVoiceMessage!!.voiceMessagePlayedSeconds @@ -1347,7 +1347,10 @@ class ChatActivity : .duration = TYPING_INDICATOR_ANIMATION_DURATION } else if (binding.typingIndicator.lineCount == 2) { binding.typingIndicatorWrapper.animate() - .translationY(binding.fragmentContainerActivityChat.y + DisplayUtils.convertDpToPixel(15f, context)) + .translationY( + binding.fragmentContainerActivityChat.y + + DisplayUtils.convertDpToPixel(15f, context) + ) .setInterpolator(AccelerateDecelerateInterpolator()) .duration = TYPING_INDICATOR_ANIMATION_DURATION } @@ -2797,7 +2800,7 @@ class ChatActivity : } else { Log.d( RESUME_AUDIO_TAG, - "voiceMessagePosition is -1, adapter # of items: " + adapter!!.getItemCount() + "voiceMessagePosition is -1, adapter # of items: " + adapter!!.itemCount ) } } else { diff --git a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt index d840c56d35..4e87f94564 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/MessageInputFragment.kt @@ -132,6 +132,8 @@ class MessageInputFragment : Fragment() { if (mentionAutocomplete != null && mentionAutocomplete!!.isPopupShowing) { mentionAutocomplete?.dismissPopup() } + clearEditUI() + cancelReply() } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -142,11 +144,11 @@ class MessageInputFragment : Fragment() { private fun initObservers() { Log.d(TAG, "LifeCyclerOwner is: ${viewLifecycleOwner.lifecycle}") chatActivity.messageInputViewModel.getReplyChatMessage.observe(viewLifecycleOwner) { message -> - replyToMessage(message) + message?.let { replyToMessage(message) } } chatActivity.messageInputViewModel.getEditChatMessage.observe(viewLifecycleOwner) { message -> - setEditUI(message as ChatMessage) + message?.let { setEditUI(it as ChatMessage) } } } @@ -264,7 +266,9 @@ class MessageInputFragment : Fragment() { binding.fragmentMessageInputView.editMessageButton.setOnClickListener { val text = binding.fragmentMessageInputView.inputEditText.text.toString() val message = chatActivity.messageInputViewModel.getEditChatMessage.value as ChatMessage - editMessageAPI(message, text) + if (message.message!!.trim() != text.trim()) { + editMessageAPI(message, text) + } clearEditUI() } binding.fragmentEditView.clearEdit.setOnClickListener { @@ -292,7 +296,11 @@ class MessageInputFragment : Fragment() { binding.fragmentMessageInputView.messageSendButton.visibility = if (binding.fragmentMessageInputView.inputEditText.text.isEmpty() || binding.fragmentEditView.editMessageView.visibility == View.VISIBLE - ) View.GONE else View.VISIBLE + ) { + View.GONE + } else { + View.VISIBLE + } } binding.fragmentMessageInputView.recordAudioButton.setOnTouchListener { v, event -> @@ -551,11 +559,14 @@ class MessageInputFragment : Fragment() { fun updateOwnTypingStatus(typedText: CharSequence) { fun sendStartTypingSignalingMessage() { - for ((sessionId, _) in chatActivity.webSocketInstance!!.getUserMap()) { - val ncSignalingMessage = NCSignalingMessage() - ncSignalingMessage.to = sessionId - ncSignalingMessage.type = TYPING_STARTED_SIGNALING_MESSAGE_TYPE - chatActivity.signalingMessageSender!!.send(ncSignalingMessage) + val websocketInstance = chatActivity.webSocketInstance + if (websocketInstance != null) { + for ((sessionId, _) in websocketInstance.getUserMap()) { + val ncSignalingMessage = NCSignalingMessage() + ncSignalingMessage.to = sessionId + ncSignalingMessage.type = TYPING_STARTED_SIGNALING_MESSAGE_TYPE + chatActivity.signalingMessageSender!!.send(ncSignalingMessage) + } } } @@ -595,11 +606,14 @@ class MessageInputFragment : Fragment() { typingTimer = null typedWhileTypingTimerIsRunning = false - for ((sessionId, _) in chatActivity.webSocketInstance!!.getUserMap()) { - val ncSignalingMessage = NCSignalingMessage() - ncSignalingMessage.to = sessionId - ncSignalingMessage.type = TYPING_STOPPED_SIGNALING_MESSAGE_TYPE - chatActivity.signalingMessageSender?.send(ncSignalingMessage) + val websocketInstance = chatActivity.webSocketInstance + if (websocketInstance != null) { + for ((sessionId, _) in websocketInstance.getUserMap()) { + val ncSignalingMessage = NCSignalingMessage() + ncSignalingMessage.to = sessionId + ncSignalingMessage.type = TYPING_STOPPED_SIGNALING_MESSAGE_TYPE + chatActivity.signalingMessageSender?.send(ncSignalingMessage) + } } } } @@ -733,6 +747,7 @@ class MessageInputFragment : Fragment() { binding.fragmentMessageInputView.inputEditText.setText("") binding.fragmentEditView.editMessageView.visibility = View.GONE binding.fragmentMessageInputView.attachmentButton.visibility = View.VISIBLE + chatActivity.messageInputViewModel.edit(null) } private fun themeMessageInputView() { @@ -787,5 +802,6 @@ class MessageInputFragment : Fragment() { quote.visibility = View.GONE quote.tag = null binding.fragmentMessageInputView.findViewById(R.id.attachmentButton)?.visibility = View.VISIBLE + chatActivity.messageInputViewModel.reply(null) } } diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt index 0d82cf61e2..cffa5e37f4 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt @@ -53,7 +53,7 @@ class ChatViewModel @Inject constructor( STOPPED } lateinit var currentLifeCycleFlag: LifeCycleFlag - public val disposableSet = mutableSetOf() + val disposableSet = mutableSetOf() override fun onResume(owner: LifecycleOwner) { super.onResume(owner) @@ -99,10 +99,6 @@ class ChatViewModel @Inject constructor( private val _getReminderExistState: MutableLiveData = MutableLiveData(GetReminderStartState) - var isPausedDueToBecomingNoisy = false - var receiverRegistered = false - var receiverUnregistered = false - val getReminderExistState: LiveData get() = _getReminderExistState @@ -185,14 +181,6 @@ class ChatViewModel @Inject constructor( val reactionDeletedViewState: LiveData get() = _reactionDeletedViewState - object EditMessageStartState : ViewState - object EditMessageErrorState : ViewState - class EditMessageSuccessState(val messageEdited: ChatOverallSingleMessage) : ViewState - - private val _editMessageViewState: MutableLiveData = MutableLiveData(EditMessageStartState) - val editMessageViewState: LiveData - get() = _editMessageViewState - fun refreshChatParams(pullChatMessagesFieldMap: HashMap, overrideRefresh: Boolean = false) { if (pullChatMessagesFieldMap != _getFieldMapForChat.value || overrideRefresh) { _getFieldMapForChat.postValue(pullChatMessagesFieldMap) @@ -550,30 +538,6 @@ class ChatViewModel @Inject constructor( }) } - fun editChatMessage(credentials: String, url: String, text: String) { - chatRepository.editChatMessage(credentials, url, text) - .subscribeOn(Schedulers.io()) - ?.observeOn(AndroidSchedulers.mainThread()) - ?.subscribe(object : Observer { - override fun onSubscribe(d: Disposable) { - disposableSet.add(d) - } - - override fun onError(e: Throwable) { - Log.e(TAG, "failed to edit message", e) - _editMessageViewState.value = EditMessageErrorState - } - - override fun onComplete() { - // unused atm - } - - override fun onNext(messageEdited: ChatOverallSingleMessage) { - _editMessageViewState.value = EditMessageSuccessState(messageEdited) - } - }) - } - fun startAudioRecording(context: Context, currentConversation: ConversationModel) { audioFocusRequestManager.audioFocusRequest(true) { Log.d(TAG, "Recording Started") diff --git a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt index 414d23d33b..509268ac87 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/viewmodels/MessageInputViewModel.kt @@ -80,12 +80,12 @@ class MessageInputViewModel @Inject constructor( val mediaPlayerSeekbarObserver: LiveData get() = mediaPlayerManager.mediaPlayerSeekBarPosition - private val _getEditChatMessage: MutableLiveData = MutableLiveData() - val getEditChatMessage: LiveData + private val _getEditChatMessage: MutableLiveData = MutableLiveData() + val getEditChatMessage: LiveData get() = _getEditChatMessage - private val _getReplyChatMessage: MutableLiveData = MutableLiveData() - val getReplyChatMessage: LiveData + private val _getReplyChatMessage: MutableLiveData = MutableLiveData() + val getReplyChatMessage: LiveData get() = _getReplyChatMessage sealed interface ViewState @@ -99,7 +99,7 @@ class MessageInputViewModel @Inject constructor( object EditMessageErrorState : ViewState class EditMessageSuccessState(val messageEdited: ChatOverallSingleMessage) : ViewState - private val _editMessageViewState: MutableLiveData = MutableLiveData(EditMessageStartState) + private val _editMessageViewState: MutableLiveData = MutableLiveData() val editMessageViewState: LiveData get() = _editMessageViewState @@ -168,11 +168,11 @@ class MessageInputViewModel @Inject constructor( }) } - fun reply(message: IMessage) { + fun reply(message: IMessage?) { _getReplyChatMessage.postValue(message) } - fun edit(message: IMessage) { + fun edit(message: IMessage?) { _getEditChatMessage.postValue(message) }