Fixed issue with file transfer messages not being updated
This commit is contained in:
parent
7370712dc3
commit
d2198518cc
4 changed files with 30 additions and 14 deletions
|
@ -217,7 +217,7 @@ public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements Vi
|
||||||
for (Content c : fileContents) {
|
for (Content c : fileContents) {
|
||||||
View content = LayoutInflater.from(mContext).inflate(R.layout.chat_bubble_content, null, false);
|
View content = LayoutInflater.from(mContext).inflate(R.layout.chat_bubble_content, null, false);
|
||||||
|
|
||||||
if (c.isFile()) {
|
if (c.isFile() || (c.isFileTransfer() && message.isOutgoing())) { // If message is outgoing, even if content is file transfer we have the file available
|
||||||
String filePath = c.getFilePath();
|
String filePath = c.getFilePath();
|
||||||
|
|
||||||
View v;
|
View v;
|
||||||
|
@ -260,13 +260,6 @@ public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements Vi
|
||||||
message.downloadContent(c);
|
message.downloadContent(c);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
message.setListener(new ChatMessageListenerStub() {
|
|
||||||
@Override
|
|
||||||
public void onMsgStateChanged(ChatMessage msg, ChatMessage.State state) {
|
|
||||||
//TODO: invalidate
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
|
Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
|
||||||
LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
|
LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.utils.LinphoneUtils;
|
import org.linphone.utils.LinphoneUtils;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.contacts.ContactsManager;
|
import org.linphone.contacts.ContactsManager;
|
||||||
|
@ -50,6 +51,8 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
private int mItemResource;
|
private int mItemResource;
|
||||||
private ChatMessagesFragment mFragment;
|
private ChatMessagesFragment mFragment;
|
||||||
|
|
||||||
|
private List<ChatMessage> mTransientMessages;
|
||||||
|
|
||||||
private ChatMessageViewHolderClickListener mClickListener;
|
private ChatMessageViewHolderClickListener mClickListener;
|
||||||
|
|
||||||
public ChatMessagesAdapter(ChatMessagesFragment fragment, SelectableHelper helper, int itemResource, EventLog[] history, ArrayList<LinphoneContact> participants, ChatMessageViewHolderClickListener clickListener) {
|
public ChatMessagesAdapter(ChatMessagesFragment fragment, SelectableHelper helper, int itemResource, EventLog[] history, ArrayList<LinphoneContact> participants, ChatMessageViewHolderClickListener clickListener) {
|
||||||
|
@ -61,6 +64,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
Collections.reverse(mHistory);
|
Collections.reverse(mHistory);
|
||||||
mParticipants = participants;
|
mParticipants = participants;
|
||||||
mClickListener = clickListener;
|
mClickListener = clickListener;
|
||||||
|
mTransientMessages = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -76,7 +80,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull final ChatMessageViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ChatMessageViewHolder holder, int position) {
|
||||||
EventLog event = mHistory.get(position);
|
EventLog event = mHistory.get(position);
|
||||||
|
|
||||||
holder.deleteEvent.setVisibility(View.GONE);
|
holder.deleteEvent.setVisibility(View.GONE);
|
||||||
|
@ -89,7 +93,6 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
|
|
||||||
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
||||||
ChatMessage message = event.getChatMessage();
|
ChatMessage message = event.getChatMessage();
|
||||||
message.setUserData(holder);
|
|
||||||
|
|
||||||
if (isEditionEnabled()) {
|
if (isEditionEnabled()) {
|
||||||
holder.deleteMessage.setVisibility(View.VISIBLE);
|
holder.deleteMessage.setVisibility(View.VISIBLE);
|
||||||
|
@ -97,13 +100,23 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
holder.deleteMessage.setTag(position);
|
holder.deleteMessage.setTag(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.isOutgoing() && message.getState() != ChatMessage.State.Displayed) {
|
if ((message.isOutgoing() && message.getState() != ChatMessage.State.Displayed) || (!message.isOutgoing() && message.isFileTransfer())) {
|
||||||
|
if (!mTransientMessages.contains(message)) {
|
||||||
|
mTransientMessages.add(message);
|
||||||
|
}
|
||||||
|
message.setUserData(holder); // This only works if JAVA object is kept, hence the transient list
|
||||||
message.setListener(new ChatMessageListenerStub() {
|
message.setListener(new ChatMessageListenerStub() {
|
||||||
@Override
|
@Override
|
||||||
public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
|
public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
|
||||||
ChatMessageViewHolder holder = (ChatMessageViewHolder) message.getUserData();
|
ChatMessageViewHolder holder = (ChatMessageViewHolder) message.getUserData();
|
||||||
if (holder != null) {
|
if (holder != null) {
|
||||||
notifyItemChanged(holder.getAdapterPosition());
|
notifyItemChanged(holder.getAdapterPosition());
|
||||||
|
} else {
|
||||||
|
// Just in case, better to refresh the whole view than to miss an update
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
if (state == ChatMessage.State.Displayed) {
|
||||||
|
mTransientMessages.remove(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -244,6 +257,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
||||||
message.setListener(null);
|
message.setListener(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mTransientMessages.clear();
|
||||||
mHistory.clear();
|
mHistory.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
|
import org.linphone.core.ChatMessageListenerStub;
|
||||||
import org.linphone.settings.LinphonePreferences;
|
import org.linphone.settings.LinphonePreferences;
|
||||||
import org.linphone.LinphoneService;
|
import org.linphone.LinphoneService;
|
||||||
import org.linphone.utils.FileUtils;
|
import org.linphone.utils.FileUtils;
|
||||||
|
@ -900,6 +901,10 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
||||||
|
|
||||||
private void sendMessage() {
|
private void sendMessage() {
|
||||||
ChatMessage msg = mChatRoom.createEmptyMessage();
|
ChatMessage msg = mChatRoom.createEmptyMessage();
|
||||||
|
|
||||||
|
String text = mMessageTextToSend.getText().toString();
|
||||||
|
boolean hasText = text != null && text.length() > 0;
|
||||||
|
|
||||||
for (int i = 0; i < mFilesUploadLayout.getChildCount(); i++) {
|
for (int i = 0; i < mFilesUploadLayout.getChildCount(); i++) {
|
||||||
String filePath = (String) mFilesUploadLayout.getChildAt(i).getTag();
|
String filePath = (String) mFilesUploadLayout.getChildAt(i).getTag();
|
||||||
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
|
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
|
||||||
|
@ -914,7 +919,8 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
||||||
content.setName(fileName);
|
content.setName(fileName);
|
||||||
content.setFilePath(filePath); // Let the file body handler take care of the upload
|
content.setFilePath(filePath); // Let the file body handler take care of the upload
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.send_text_and_images_as_different_messages)) {
|
if (getResources().getBoolean(R.bool.send_text_and_images_as_different_messages)
|
||||||
|
&& (mFilesUploadLayout.getChildCount() > 1 || hasText)) {
|
||||||
ChatMessage fileMessage = mChatRoom.createFileTransferMessage(content);
|
ChatMessage fileMessage = mChatRoom.createFileTransferMessage(content);
|
||||||
fileMessage.send();
|
fileMessage.send();
|
||||||
} else {
|
} else {
|
||||||
|
@ -922,8 +928,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String text = mMessageTextToSend.getText().toString();
|
if (hasText) {
|
||||||
if (text != null && text.length() > 0) {
|
|
||||||
msg.addTextContent(text);
|
msg.addTextContent(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,6 +136,10 @@ public class ImdnFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshInfo() {
|
private void refreshInfo() {
|
||||||
|
if (mMessage == null) {
|
||||||
|
//TODO: error
|
||||||
|
return;
|
||||||
|
}
|
||||||
Address remoteSender = mMessage.getFromAddress();
|
Address remoteSender = mMessage.getFromAddress();
|
||||||
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(remoteSender);
|
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(remoteSender);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue