diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt index 3902b2707..14b07cb68 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt @@ -63,6 +63,7 @@ import org.linphone.utils.ImageUtils import org.linphone.utils.LinphoneUtils import org.linphone.utils.PhoneNumberUtils import org.linphone.utils.ShortcutUtils +import java.io.FileNotFoundException class ContactsManager @UiThread @@ -741,6 +742,8 @@ fun Friend.getNativeContactPictureUri(): Uri? { fd.close() return pictureUri } + } catch (fnfe: FileNotFoundException) { + Log.w("[Contacts Manager] Can't open [$pictureUri] for contact [$name]: $fnfe") } catch (e: Exception) { Log.e("[Contacts Manager] Can't open [$pictureUri] for contact [$name]: $e") } diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt index f29e9ae6c..125806442 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationFragment.kt @@ -740,6 +740,12 @@ open class ConversationFragment : SlidingPaneChildFragment() { false } + sendMessageViewModel.messageSentEvent.observe(viewLifecycleOwner) { + it.consume { message -> + viewModel.addSentMessageToEventsList(message) + } + } + sendMessageViewModel.emojiToAddEvent.observe(viewLifecycleOwner) { it.consume { emoji -> binding.sendArea.messageToSend.addCharacterAtPosition(emoji) diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index 73851eedb..45c41a951 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -196,17 +196,6 @@ class ConversationViewModel Log.i("$TAG Conversation was marked as read") } - @WorkerThread - override fun onChatMessageSending(chatRoom: ChatRoom, eventLog: EventLog) { - val message = eventLog.chatMessage - Log.i("$TAG Message [$message] is being sent, marking conversation as read") - - // Prevents auto scroll to go to latest received message - chatRoom.markAsRead() - - addEvents(arrayOf(eventLog)) - } - @WorkerThread override fun onChatMessagesReceived(chatRoom: ChatRoom, eventLogs: Array) { Log.i("$TAG Received [${eventLogs.size}] new message(s)") @@ -622,6 +611,19 @@ class ConversationViewModel } } + @UiThread + fun addSentMessageToEventsList(message: ChatMessage) { + coreContext.postOnCoreThread { + val eventLog = message.eventLog + if (eventLog != null) { + Log.i("$TAG Adding sent message with ID [${message.messageId}] to events list") + addEvents(arrayOf(eventLog)) + } else { + Log.e("$TAG Failed to get event log for sent message with ID [${message.messageId}]") + } + } + } + @WorkerThread private fun configureChatRoom() { if (!isChatRoomInitialized()) return @@ -718,7 +720,7 @@ class ConversationViewModel @WorkerThread private fun addEvents(eventLogs: Array) { - Log.i("$TAG Adding [${eventLogs.size}] events") + Log.i("$TAG Adding [${eventLogs.size}] event(s)") // Need to use a new list, otherwise ConversationFragment's dataObserver isn't triggered... val list = arrayListOf() list.addAll(eventsList) diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index 0b28e186f..f44cb2a5d 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -135,6 +135,10 @@ class SendMessageInConversationViewModel MutableLiveData>() } + val messageSentEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + lateinit var chatRoom: ChatRoom private var chatMessageToReplyTo: ChatMessage? = null @@ -325,6 +329,7 @@ class SendMessageInConversationViewModel val voiceMessage = chatRoom.createEmptyMessage() voiceMessage.addContent(content) voiceMessage.send() + messageSentEvent.postValue(Event(voiceMessage)) } else { message.addContent(content) } @@ -356,6 +361,7 @@ class SendMessageInConversationViewModel val fileMessage = chatRoom.createEmptyMessage() fileMessage.addFileContent(content) fileMessage.send() + messageSentEvent.postValue(Event(fileMessage)) } else { message.addFileContent(content) contentAdded = true @@ -366,6 +372,7 @@ class SendMessageInConversationViewModel if (message.contents.isNotEmpty()) { Log.i("$TAG Sending message") message.send() + messageSentEvent.postValue(Event(message)) } Log.i("$TAG Message sent, re-setting defaults")