From f6ec145c4765511cc608e63934ae3fcaec5b8383 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 3 Aug 2018 11:59:08 +0200 Subject: [PATCH] Enable multi content on message --- .../org/linphone/chat/ChatListFragment.java | 4 +- .../org/linphone/chat/ChatRoomsAdapter.java | 2 +- .../org/linphone/chat/GroupChatFragment.java | 52 ++++++++++--------- .../org/linphone/chat/ImdnFragment.java | 2 +- 4 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index 5aa8da0f1..b90eb7fe9 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -193,8 +193,8 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene for (EventLog eventLog : room.getHistoryEvents(0)) { if (eventLog.getType() == EventLog.Type.ConferenceChatMessage) { ChatMessage message = eventLog.getChatMessage(); - if (message.getAppdata() != null && !message.isOutgoing()) { - File file = new File(message.getAppdata()); + if (message.getContents() != null && message.getContents().length > 0 && !message.isOutgoing()) { + File file = new File(message.getContents()[0].getFilePath()); if (file.exists()) { file.delete(); // Delete downloaded file from incoming message that will be deleted } diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index 453f2e05e..34488411f 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -174,7 +174,7 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { holder.date.setText(LinphoneUtils.timestampToHumanDate(mContext, chatRoom.getLastUpdateTime(), ((LinphoneUtils.isToday(chatRoom.getLastUpdateTime())) ? R.string.today_date_format2 : R.string.messages_list_date_format), false)); if (lastMessage != null) { - if (lastMessage.getFileTransferInformation() != null || lastMessage.getExternalBodyUrl() != null || lastMessage.getAppdata() != null) { + if (lastMessage.getFileTransferInformation() != null || lastMessage.getExternalBodyUrl() != null || lastMessage.getContents().length > 0) { holder.lastMessageView.setBackgroundResource(R.drawable.chat_file_message); } else if (lastMessage.getTextContent() != null && lastMessage.getTextContent().length() > 0) { holder.lastMessageView.setBackgroundResource(0); diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index b7e69a0d3..5d32cbe07 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -331,8 +331,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con EventLog eventLog = (EventLog)obj; if (eventLog.getType() == EventLog.Type.ConferenceChatMessage) { ChatMessage message = eventLog.getChatMessage(); - if (message.getAppdata() != null && !message.isOutgoing()) { - File file = new File(message.getAppdata()); + if (message.getContents() != null && message.getContents().length > 0 && !message.isOutgoing()) { + File file = new File(message.getContents()[0].getFilePath()); if (file.exists()) { file.delete(); // Delete downloaded file from incoming message that will be deleted } @@ -684,34 +684,38 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con */ private void sendMessage() { - String text = mMessageTextToSend.getText().toString(); - ChatMessage msg; - //TODO: rework when we'll send multiple files at once - if (mFilesUploadLayout.getChildCount() > 0) { - String filePath = (String) mFilesUploadLayout.getChildAt(0).getTag(); - String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); - String extension = LinphoneUtils.getExtensionFromFileName(fileName); - Content content = Factory.instance().createContent(); - if (LinphoneUtils.isExtensionImage(fileName)) { - content.setType("image"); - } else { - content.setType("file"); - } - content.setSubtype(extension); - content.setName(fileName); - msg = mChatRoom.createFileTransferMessage(content); - msg.setFileTransferFilepath(filePath); // Let the file body handler take care of the upload - msg.setAppdata(filePath); + String text = mMessageTextToSend.getText().toString(); + boolean textSend = false; - if (text != null && text.length() > 0) { - msg.addTextContent(text); + if (mFilesUploadLayout.getChildCount() > 0) { + for (int i = 0 ; i < mFilesUploadLayout.getChildCount() ; i++) { + String filePath = (String) mFilesUploadLayout.getChildAt(i).getTag(); + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + String extension = LinphoneUtils.getExtensionFromFileName(fileName); + Content content = Factory.instance().createContent(); + if (LinphoneUtils.isExtensionImage(fileName)) { + content.setType("image"); + } else { + content.setType("file"); + } + content.setSubtype(extension); + content.setName(fileName); + content.setFilePath(filePath); + msg = mChatRoom.createFileTransferMessage(content); + + if (!textSend && text != null && text.length() > 0) { + msg.addTextContent(text); + textSend = true; + } + // Set listener not required here anymore, message will be added to messages list and adapter will set the listener + msg.send(); } } else { msg = mChatRoom.createMessage(text); + // Set listener not required here anymore, message will be added to messages list and adapter will set the listener + msg.send(); } - // Set listener not required here anymore, message will be added to messages list and adapter will set the listener - msg.send(); mFilesUploadLayout.removeAllViews(); mAttachImageButton.setEnabled(true); diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index 1fb5aab1f..8163aff97 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -206,7 +206,7 @@ public class ImdnFragment extends Fragment { mBubble.messageText.setVisibility(View.VISIBLE); } - String appData = mMessage.getAppdata(); + String appData = (mMessage.getContents().length > 0) ? mMessage.getContents()[0].getFilePath() : ""; if (appData != null) { // Something to display mBubble.fileName.setVisibility(View.VISIBLE); mBubble.fileName.setText(LinphoneUtils.getNameFromFilePath(appData));