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) {
|
||||
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();
|
||||
|
||||
View v;
|
||||
|
@ -260,13 +260,6 @@ public class ChatMessageViewHolder extends RecyclerView.ViewHolder implements Vi
|
|||
message.downloadContent(c);
|
||||
}
|
||||
});
|
||||
|
||||
message.setListener(new ChatMessageListenerStub() {
|
||||
@Override
|
||||
public void onMsgStateChanged(ChatMessage msg, ChatMessage.State state) {
|
||||
//TODO: invalidate
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.w("WRITE_EXTERNAL_STORAGE permission not granted, won't be able to store the downloaded file");
|
||||
LinphoneActivity.instance().checkAndRequestExternalStoragePermission();
|
||||
|
|
|
@ -25,6 +25,7 @@ import android.view.LayoutInflater;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import org.linphone.mediastream.Log;
|
||||
import org.linphone.utils.LinphoneUtils;
|
||||
import org.linphone.R;
|
||||
import org.linphone.contacts.ContactsManager;
|
||||
|
@ -50,6 +51,8 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
|||
private int mItemResource;
|
||||
private ChatMessagesFragment mFragment;
|
||||
|
||||
private List<ChatMessage> mTransientMessages;
|
||||
|
||||
private ChatMessageViewHolderClickListener mClickListener;
|
||||
|
||||
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);
|
||||
mParticipants = participants;
|
||||
mClickListener = clickListener;
|
||||
mTransientMessages = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -76,7 +80,7 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull final ChatMessageViewHolder holder, int position) {
|
||||
public void onBindViewHolder(@NonNull ChatMessageViewHolder holder, int position) {
|
||||
EventLog event = mHistory.get(position);
|
||||
|
||||
holder.deleteEvent.setVisibility(View.GONE);
|
||||
|
@ -89,7 +93,6 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
|||
|
||||
if (event.getType() == EventLog.Type.ConferenceChatMessage) {
|
||||
ChatMessage message = event.getChatMessage();
|
||||
message.setUserData(holder);
|
||||
|
||||
if (isEditionEnabled()) {
|
||||
holder.deleteMessage.setVisibility(View.VISIBLE);
|
||||
|
@ -97,13 +100,23 @@ public class ChatMessagesAdapter extends SelectableAdapter<ChatMessageViewHolder
|
|||
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() {
|
||||
@Override
|
||||
public void onMsgStateChanged(ChatMessage message, ChatMessage.State state) {
|
||||
ChatMessageViewHolder holder = (ChatMessageViewHolder) message.getUserData();
|
||||
if (holder != null) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
mTransientMessages.clear();
|
||||
mHistory.clear();
|
||||
}
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@ import android.widget.LinearLayout;
|
|||
import android.widget.TextView;
|
||||
|
||||
import org.linphone.LinphoneManager;
|
||||
import org.linphone.core.ChatMessageListenerStub;
|
||||
import org.linphone.settings.LinphonePreferences;
|
||||
import org.linphone.LinphoneService;
|
||||
import org.linphone.utils.FileUtils;
|
||||
|
@ -900,6 +901,10 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
|||
|
||||
private void sendMessage() {
|
||||
ChatMessage msg = mChatRoom.createEmptyMessage();
|
||||
|
||||
String text = mMessageTextToSend.getText().toString();
|
||||
boolean hasText = text != null && text.length() > 0;
|
||||
|
||||
for (int i = 0; i < mFilesUploadLayout.getChildCount(); i++) {
|
||||
String filePath = (String) mFilesUploadLayout.getChildAt(i).getTag();
|
||||
String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
|
||||
|
@ -914,7 +919,8 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
|||
content.setName(fileName);
|
||||
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);
|
||||
fileMessage.send();
|
||||
} else {
|
||||
|
@ -922,8 +928,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener,
|
|||
}
|
||||
}
|
||||
|
||||
String text = mMessageTextToSend.getText().toString();
|
||||
if (text != null && text.length() > 0) {
|
||||
if (hasText) {
|
||||
msg.addTextContent(text);
|
||||
}
|
||||
|
||||
|
|
|
@ -136,6 +136,10 @@ public class ImdnFragment extends Fragment {
|
|||
}
|
||||
|
||||
private void refreshInfo() {
|
||||
if (mMessage == null) {
|
||||
//TODO: error
|
||||
return;
|
||||
}
|
||||
Address remoteSender = mMessage.getFromAddress();
|
||||
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(remoteSender);
|
||||
|
||||
|
|
Loading…
Reference in a new issue