From 4fe67b5a46e262c9f5a8a0338cebcdb2b9e46975 Mon Sep 17 00:00:00 2001 From: Lucas Legrand Date: Thu, 19 Jul 2018 15:03:37 +0200 Subject: [PATCH] Commit for save, converting ListView from GroupChatFragment+Adapter, currently onBindViewHolder Stage. --- .../linphone/chat/ChatBubbleViewHolder.java | 35 ++++++- .../org/linphone/chat/ChatEventsAdapter.java | 98 +++++++++++++++++-- .../org/linphone/chat/ChatListFragment.java | 12 +-- .../org/linphone/chat/ChatRoomsAdapter.java | 1 + .../org/linphone/chat/GroupChatFragment.java | 2 + submodules/cmake-builder | 2 +- submodules/mediastreamer2 | 2 +- 7 files changed, 132 insertions(+), 20 deletions(-) diff --git a/src/android/org/linphone/chat/ChatBubbleViewHolder.java b/src/android/org/linphone/chat/ChatBubbleViewHolder.java index 0977a0a3a..00bcc852e 100644 --- a/src/android/org/linphone/chat/ChatBubbleViewHolder.java +++ b/src/android/org/linphone/chat/ChatBubbleViewHolder.java @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package org.linphone.chat; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -28,11 +29,17 @@ import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import org.linphone.LinphoneManager; +import org.linphone.LinphoneUtils; import org.linphone.R; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatRoom; +import org.linphone.core.EventLog; -public class ChatBubbleViewHolder { +public class ChatBubbleViewHolder extends RecyclerView.ViewHolder{ public String messageId; - + public EventLog mEvent; + public ChatMessage message; public LinearLayout eventLayout; //public TextView eventTime; public TextView eventMessage; @@ -62,7 +69,8 @@ public class ChatBubbleViewHolder { public CheckBox delete; public ChatBubbleViewHolder(View view) { - eventLayout = view.findViewById(R.id.event); + super(view); + eventLayout = view.findViewById(R.id.event); //eventTime = view.findViewById(R.id.event_date); eventMessage = view.findViewById(R.id.event_text); @@ -90,4 +98,25 @@ public class ChatBubbleViewHolder { delete = view.findViewById(R.id.delete_message); } + + public void bindEvent(EventLog event) { + + //Bind the data to the ViewHolder + this.mEvent = event; + this.message = event.getChatMessage(); + this.messageId = message.getMessageId(); + + this.eventLayout.setVisibility(event.getType() == EventLog.Type.ConferenceChatMessage ? View.GONE : View.VISIBLE); + this.bubbleLayout.setVisibility(event.getType() == EventLog.Type.ConferenceChatMessage ? View.VISIBLE : View.GONE); + this.messageText.setVisibility(event.getType() == EventLog.Type.ConferenceChatMessage ? View.VISIBLE : View.GONE); + this.messageImage.setVisibility(View.GONE); + this.fileTransferLayout.setVisibility(View.GONE); + + this.lastMessageSenderView.setText(getSender(mRoom)); + this.lastMessageView.setText(mRoom.getLastMessageInHistory() != null ? mRoom.getLastMessageInHistory().getTextContent(): ""); + this.date.setText(mRoom.getLastMessageInHistory()!=null ? LinphoneUtils.timestampToHumanDate(this.mContext, mRoom.getLastUpdateTime(), R.string.messages_list_date_format) : ""); + this.displayName.setText(getContact(mRoom)); + this.unreadMessages.setText(String.valueOf(LinphoneManager.getInstance().getUnreadCountForChatRoom(mRoom))); + getAvatar(mRoom); + } } \ No newline at end of file diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java index 509d9b246..706d353d4 100644 --- a/src/android/org/linphone/chat/ChatEventsAdapter.java +++ b/src/android/org/linphone/chat/ChatEventsAdapter.java @@ -35,7 +35,9 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Environment; import android.provider.MediaStore; +import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; +import android.support.v7.widget.RecyclerView; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; @@ -55,12 +57,14 @@ import org.linphone.contacts.LinphoneContact; import org.linphone.core.Address; import org.linphone.core.ChatMessage; import org.linphone.core.ChatMessageListenerStub; +import org.linphone.core.ChatRoom; import org.linphone.core.Content; import org.linphone.core.EventLog; import org.linphone.core.LimeState; import org.linphone.mediastream.Log; import org.linphone.ui.ListSelectionAdapter; import org.linphone.ui.ListSelectionHelper; +import org.linphone.ui.SelectableHelper; import java.io.File; import java.io.FileNotFoundException; @@ -72,19 +76,24 @@ import java.util.List; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; -public class ChatEventsAdapter extends ListSelectionAdapter { +public class ChatEventsAdapter extends RecyclerView.Adapter { private Context mContext; private List mHistory; private List mParticipants; private LayoutInflater mLayoutInflater; +// private int itemResource; private Bitmap mDefaultBitmap; private GroupChatFragment mFragment; private ChatMessageListenerStub mListener; +// public ChatEventsAdapter(GroupChatFragment fragment, ListSelectionHelper helper, LayoutInflater inflater, EventLog[] history, ArrayList participants) { public ChatEventsAdapter(GroupChatFragment fragment, ListSelectionHelper helper, LayoutInflater inflater, EventLog[] history, ArrayList participants) { - super(helper); +// public ChatRoomsAdapter(Context context, int itemResource, List mRooms, ChatRoomViewHolder.ClickListener clickListener, SelectableHelper helper) { + + super(); mFragment = fragment; mContext = mFragment.getActivity(); +// itemResource = inflater.; mLayoutInflater = inflater; mHistory = new ArrayList<>(Arrays.asList(history)); mParticipants = participants; @@ -120,6 +129,77 @@ public class ChatEventsAdapter extends ListSelectionAdapter { }; } + @Override + public ChatBubbleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v = mLayoutInflater.inflate(R.layout.chat_bubble, parent, false); + return new ChatBubbleViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull ChatBubbleViewHolder holder, int position) { + EventLog event = (EventLog)getItem(position); + final ChatMessage message = event.getChatMessage(); + + //Apply generic bindings + holder.bindEvent(event); + +// holder.delete.setVisibility(this.isEditionEnabled() == true ? View.VISIBLE : View.INVISIBLE); +// holder.delete.setChecked(isSelected(position) ? true : false); + + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + + //If event is Chat Message + if(event.getType() == EventLog.Type.ConferenceChatMessage) { + + + //layoutParams Settings + + + + if (isEditionEnabled()) { + layoutParams.addRule(RelativeLayout.LEFT_OF, holder.delete.getId()); + layoutParams.setMargins(100, 10, 10, 10); + } else if (message.isOutgoing()) { + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + layoutParams.setMargins(100, 10, 10, 10); + + } else { + layoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); + layoutParams.setMargins(10, 10, 100, 10); + } + + + //Display attached files + if (message.getAppdata() != null) { + displayAttachedFile(message, holder); + } + + + if (message.getExternalBodyUrl() != null ) { + holder.fileTransferProgressBar.setVisibility(View.GONE); + holder.fileTransferLayout.setVisibility(View.VISIBLE); + } + + if (message.isFileTransferInProgress()){ + holder.fileTransferLayout.setVisibility(View.VISIBLE); + } + + } + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public int getItemCount() { + return 0; + } + + + + public void addToHistory(EventLog log) { mHistory.add(log); notifyDataSetChanged(); @@ -144,22 +224,22 @@ public class ChatEventsAdapter extends ListSelectionAdapter { mHistory.clear(); } - @Override +// @Override public int getCount() { return mHistory.size(); } - @Override +// @Override public Object getItem(int i) { return mHistory.get(i); } - @Override - public long getItemId(int i) { - return i; - } + @NonNull - public void removeItem(int i) { + + + + public void removeItem(int i) { mHistory.remove(i); notifyDataSetChanged(); } diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index 9de1b9ccd..2e248b1c7 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -112,15 +112,16 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene //Actions allowed by swipe buttons - /*final SwipeController swipeController = new SwipeController(new SwipeControllerActions() { - *//*@Override - public void onLeftClicked(int position) { - super.onLeftClicked(position); - }*//* + final SwipeController swipeController = new SwipeController(new SwipeControllerActions() { +// @Override +// public void onLeftClicked(int position) { +// super.onLeftClicked(position); +// } @Override public void onRightClicked(int position) { mChatRoomsAdapter.removeItem(position); + mChatRoomsAdapter.notifyDataSetChanged(); } }); @@ -137,7 +138,6 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene swipeController.onDraw(c); } }); -*/ // Buttons onClickListeners definitions diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index cf0ec0116..4c0ca33f6 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -54,6 +54,7 @@ import java.util.List; public class ChatRoomsAdapter extends SelectableAdapter { public static class ChatRoomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ + public TextView lastMessageSenderView; public TextView lastMessageView; public TextView date; diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 83c29c7d4..9ee74db9a 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -96,6 +96,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con private ListView mChatEventsList; private LinearLayout mFilesUploadLayout; private ListSelectionHelper mSelectionHelper; +// private ListSelectionHelper mSelectionHelper; private ViewTreeObserver.OnGlobalLayoutListener mKeyboardListener; private Uri mImageToUploadUri; @@ -551,6 +552,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con if (mChatRoom == null) return; if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, mInflater, mChatRoom.getHistoryMessageEvents(0), mParticipants); +// mChatRoomsAdapter = new ChatRoomsAdapter(mContext, R.layout.chatlist_cell, mRooms,this, mSelectionHelper); } else { mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, mInflater, mChatRoom.getHistoryEvents(0), mParticipants); } diff --git a/submodules/cmake-builder b/submodules/cmake-builder index 456993edd..f58510c8c 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit 456993eddd5f4724ff2b59487fb57aa5a85d782a +Subproject commit f58510c8ce6cd89dadff2b29574d03b05c6efcc9 diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index 75a861960..52d316934 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit 75a86196030bb6efd9d67d42c0b25f17b4ec4e25 +Subproject commit 52d3169349b55b27090ecb81f88d10ebb65fa469