From b0c4e0edd63f663b63a25cd2d54b11bddb61da45 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 1 Nov 2017 18:01:56 +0100 Subject: [PATCH] File upload layout done --- .../org/linphone/chat/ChatEventsAdapter.java | 31 ++++++++------ .../org/linphone/chat/GroupChatFragment.java | 42 ++++++++++++------- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index 7c030c858..b4a46dec3 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -249,10 +249,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene String appData = message.getAppdata(); if (externalBodyUrl != null) { // Incoming file transfer if (appData != null) { // Download already done, just display the result - holder.fileName.setVisibility(View.VISIBLE); - holder.fileName.setText(fileTransferContent.getName()); - - displayDownloadedFile(message, holder); + displayAttachedFile(message, holder); } else { // Attachment not yet downloaded holder.fileName.setVisibility(View.VISIBLE); holder.fileName.setText(fileTransferContent.getName()); @@ -280,14 +277,21 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene } } else if (fileTransferContent != null) { // Outgoing file transfer if (appData != null) { - displayDownloadedFile(message, holder); + displayAttachedFile(message, holder); + } - if (message.getState() == ChatMessage.State.InProgress) { - holder.messageSendingInProgress.setVisibility(View.GONE); - holder.fileTransferLayout.setVisibility(View.VISIBLE); - } - } else { + holder.fileTransferLayout.setVisibility(View.GONE); + if (message.getState() == ChatMessage.State.InProgress) { + holder.messageSendingInProgress.setVisibility(View.GONE); holder.fileTransferLayout.setVisibility(View.VISIBLE); + holder.fileTransferAction.setText(mContext.getString(R.string.cancel)); + holder.fileTransferAction.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + message.cancelFileTransfer(); + notifyDataSetChanged(); + } + }); } } else if (msg != null) { // This is a else for now, the day we'll be able to send both file and text this won't be anymore text = LinphoneUtils.getTextWithHttpLinks(msg); @@ -378,7 +382,10 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene mContext.startActivity(intent); } - private void displayDownloadedFile(ChatMessage message, ChatBubbleViewHolder holder) { + private void displayAttachedFile(ChatMessage message, ChatBubbleViewHolder holder) { + holder.fileName.setVisibility(View.VISIBLE); + holder.fileName.setText(message.getFileTransferInformation().getName()); + String appData = message.getAppdata(); if (LinphoneUtils.isExtensionImage(appData)) { holder.messageImage.setVisibility(View.VISIBLE); @@ -418,7 +425,7 @@ public class ChatEventsAdapter extends BaseAdapter implements ChatMessageListene if (offset == total) { holder.fileTransferProgressBar.setVisibility(View.GONE); holder.fileTransferLayout.setVisibility(View.GONE); - displayDownloadedFile(message, holder); + displayAttachedFile(message, holder); } else { holder.fileTransferProgressBar.setVisibility(View.VISIBLE); holder.fileTransferProgressBar.setProgress(offset * 100 / total); diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 8f5e8a5e0..c3dc468ff 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -91,7 +91,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener; private Uri mImageToUploadUri; - private ChatEventsAdapter mMessagesAdapter; + private ChatEventsAdapter mEventsAdapter; private String mRemoteSipUri; private Address mRemoteSipAddress; private ChatRoom mChatRoom; @@ -405,8 +405,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } } - if (mMessagesAdapter != null) { - mMessagesAdapter.setContacts(mParticipants); + if (mEventsAdapter != null) { + mEventsAdapter.setContacts(mParticipants); } } @@ -462,8 +462,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con private void displayChatRoomHistory() { if (mChatRoom == null) return; - mMessagesAdapter = new ChatEventsAdapter(getActivity(), this, mInflater, mChatRoom.getHistoryEvents(0), mParticipants); - mChatEventsList.setAdapter(mMessagesAdapter); + mEventsAdapter = new ChatEventsAdapter(getActivity(), this, mInflater, mChatRoom.getHistoryEvents(0), mParticipants); + mChatEventsList.setAdapter(mEventsAdapter); } private void pickFile() { @@ -557,6 +557,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con content.setName(fileName); msg = mChatRoom.createFileTransferMessage(content); msg.setFileTransferFilepath(filePath); // Let the file body handler take care of the upload + msg.setAppdata(filePath); } else { msg = mChatRoom.createMessage(text); } @@ -564,7 +565,16 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con msg.setListener(new ChatMessageListenerStub() { @Override public void onFileTransferProgressIndication(ChatMessage message, Content content, int offset, int total) { - + ChatBubbleViewHolder holder = (ChatBubbleViewHolder) message.getUserData(); + if (holder != null && message.getMessageId().equals(holder.messageId) && message.isOutgoing()) { + if (offset == total) { + holder.fileTransferLayout.setVisibility(View.GONE); + mEventsAdapter.notifyDataSetChanged(); + } else { + holder.fileTransferProgressBar.setVisibility(View.VISIBLE); + holder.fileTransferProgressBar.setProgress(offset * 100 / total); + } + } } @Override @@ -598,8 +608,8 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } public void scrollToBottom() { - if (((mChatEventsList.getLastVisiblePosition() >= (mMessagesAdapter.getCount() - 1)) && (mChatEventsList.getFirstVisiblePosition() <= (mMessagesAdapter.getCount() - 1)))) { - mChatEventsList.setSelection(mMessagesAdapter.getCount() - 1); + if (((mChatEventsList.getLastVisiblePosition() >= (mEventsAdapter.getCount() - 1)) && (mChatEventsList.getFirstVisiblePosition() <= (mEventsAdapter.getCount() - 1)))) { + mChatEventsList.setSelection(mEventsAdapter.getCount() - 1); } } @@ -609,7 +619,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con @Override public void onChatMessageSent(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override @@ -667,7 +677,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con LinphoneActivity.instance().checkAndRequestExternalStoragePermission(); } - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override @@ -737,22 +747,22 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con @Override public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override public void onParticipantDeviceRemoved(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override public void onParticipantRemoved(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override public void onParticipantDeviceAdded(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override @@ -762,12 +772,12 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con @Override public void onParticipantAdded(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); } @Override public void onSubjectChanged(ChatRoom cr, EventLog event) { - mMessagesAdapter.addToHistory(event); + mEventsAdapter.addToHistory(event); mRoomLabel.setText(event.getSubject()); }