From f5c6abbc8341ee749e840b0435a1ebc844c8216d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 27 Nov 2018 15:47:36 +0100 Subject: [PATCH] Fixes due to using 2 Adapters --- .../linphone/chat/ChatMessagesAdapter.java | 2 +- .../linphone/chat/ChatMessagesFragment.java | 42 +++++++++---------- .../chat/ChatMessagesGenericAdapter.java | 41 ++++++++++++++++++ .../linphone/chat/ChatMessagesOldAdapter.java | 2 +- .../org/linphone/utils/SelectableHelper.java | 4 ++ 5 files changed, 68 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/org/linphone/chat/ChatMessagesGenericAdapter.java diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java index 7b54cf067..ae1beb7f6 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesAdapter.java @@ -41,7 +41,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -public class ChatMessagesAdapter extends SelectableAdapter { +public class ChatMessagesAdapter extends SelectableAdapter implements ChatMessagesGenericAdapter { public static int MAX_TIME_TO_GROUP_MESSAGES = 60; private Context mContext; diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java index a4d768296..c189ab8b8 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java @@ -345,7 +345,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, removeVirtualKeyboardVisiblityListener(); LinphoneManager.getInstance().setCurrentChatRoomAddress(null); if (mChatRoom != null) mChatRoom.removeListener(this); - if (mEventsAdapter != null) mEventsAdapter.clear(); + if (mChatEventsList.getAdapter() != null) ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).clear(); super.onPause(); } @@ -409,9 +409,9 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, eventLog.deleteFromDatabase(); } if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { - mEventsAdapter.refresh(mChatRoom.getHistoryMessageEvents(MESSAGES_PER_PAGE)); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).refresh(mChatRoom.getHistoryMessageEvents(MESSAGES_PER_PAGE)); } else { - mEventsAdapter.refresh(mChatRoom.getHistoryEvents(MESSAGES_PER_PAGE)); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).refresh(mChatRoom.getHistoryEvents(MESSAGES_PER_PAGE)); } } @@ -428,7 +428,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, mContextMenuMessagePosition = holder.getAdapterPosition(); } - EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition); + EventLog event = (EventLog) ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).getItem(mContextMenuMessagePosition); if (event.getType() != EventLog.Type.ConferenceChatMessage) { return; } @@ -463,7 +463,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public boolean onContextItemSelected(MenuItem item) { - EventLog event = (EventLog) mEventsAdapter.getItem(mContextMenuMessagePosition); + EventLog event = (EventLog) ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).getItem(mContextMenuMessagePosition); if (event.getType() != EventLog.Type.ConferenceChatMessage) { return super.onContextItemSelected(item); @@ -473,7 +473,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, String messageId = message.getMessageId(); if (item.getItemId() == R.id.resend) { - mEventsAdapter.removeItem(mContextMenuMessagePosition); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).removeItem(mContextMenuMessagePosition); message.resend(); return true; } @@ -491,7 +491,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, } if (item.getItemId() == R.id.delete_message) { mChatRoom.deleteMessage(message); - mEventsAdapter.removeItem(mContextMenuMessagePosition); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).removeItem(mContextMenuMessagePosition); return true; } if (item.getItemId() == R.id.add_to_contacts) { @@ -518,7 +518,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, } EventLog[] newLogs = mChatRoom.getHistoryRangeEvents(totalItemsCount, upperBound); ArrayList logsList = new ArrayList<>(Arrays.asList(newLogs)); - mEventsAdapter.addAllToHistory(logsList); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addAllToHistory(logsList); } } }); @@ -597,8 +597,8 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, mParticipantsLabel.setText(participantsLabel.toString()); } - if (mEventsAdapter != null) { - mEventsAdapter.setContacts(mParticipants); + if (mChatEventsList.getAdapter() != null) { + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).setContacts(mParticipants); } } @@ -761,8 +761,8 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public void onItemClicked(int position) { - if (mEventsAdapter.isEditionEnabled()) { - mEventsAdapter.toggleSelection(position); + if (mSelectionHelper.getAdapter().isEditionEnabled()) { + mSelectionHelper.getAdapter().toggleSelection(position); } } @@ -944,7 +944,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public void onChatMessageSent(ChatRoom cr, EventLog event) { - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @@ -1031,7 +1031,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, LinphoneActivity.instance().checkAndRequestExternalStoragePermission(); } - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @@ -1099,19 +1099,19 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, getContactsForParticipants(); displayChatRoomHeader(); - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @Override public void onConferenceLeft(ChatRoom cr, EventLog event) { - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @Override public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) { - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @@ -1123,7 +1123,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public void onParticipantRemoved(ChatRoom cr, EventLog event) { getContactsForParticipants(); - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @@ -1145,7 +1145,7 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public void onSecurityEvent(ChatRoom cr, EventLog eventLog) { updateSecurityLevelIcon(); - mEventsAdapter.addToHistory(eventLog); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(eventLog); scrollToBottom(); } @@ -1159,14 +1159,14 @@ public class ChatMessagesFragment extends Fragment implements ChatRoomListener, @Override public void onParticipantAdded(ChatRoom cr, EventLog event) { getContactsForParticipants(); - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } @Override public void onSubjectChanged(ChatRoom cr, EventLog event) { mRoomLabel.setText(event.getSubject()); - mEventsAdapter.addToHistory(event); + ((ChatMessagesGenericAdapter)mChatEventsList.getAdapter()).addToHistory(event); scrollToBottom(); } diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesGenericAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesGenericAdapter.java new file mode 100644 index 000000000..862fe2310 --- /dev/null +++ b/app/src/main/java/org/linphone/chat/ChatMessagesGenericAdapter.java @@ -0,0 +1,41 @@ +package org.linphone.chat; + +/* + ChatMessagesGenericAdapter.java + Copyright (C) 2018 Belledonne Communications, Grenoble, France + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import org.linphone.contacts.LinphoneContact; +import org.linphone.core.EventLog; + +import java.util.ArrayList; + +public interface ChatMessagesGenericAdapter { + void addToHistory(EventLog log); + + void addAllToHistory(ArrayList logs); + + void setContacts(ArrayList participants); + + void refresh(EventLog[] history); + + void clear(); + + Object getItem(int i); + + void removeItem(int i); +} diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java b/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java index dd96448e9..6d3c38b4d 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesOldAdapter.java @@ -74,7 +74,7 @@ import java.util.List; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; -public class ChatMessagesOldAdapter extends SelectableAdapter { +public class ChatMessagesOldAdapter extends SelectableAdapter implements ChatMessagesGenericAdapter { private static int MARGIN_BETWEEN_MESSAGES = 10; private static int SIDE_MARGIN = 100; diff --git a/app/src/main/java/org/linphone/utils/SelectableHelper.java b/app/src/main/java/org/linphone/utils/SelectableHelper.java index 1544d91c9..518c76d3f 100644 --- a/app/src/main/java/org/linphone/utils/SelectableHelper.java +++ b/app/src/main/java/org/linphone/utils/SelectableHelper.java @@ -130,6 +130,10 @@ public class SelectableHelper { mEditButton.setEnabled(mAdapter.getItemCount() != 0); } + public SelectableAdapter getAdapter() { + return mAdapter; + } + public void updateSelectionButtons(boolean isSelectionEmpty, boolean isSelectionFull) { if (isSelectionEmpty) { mDeleteSelectionButton.setEnabled(false);