From 3639bd67d7a257113e5d6cbaedd4e3e88c4610fe Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 15 Feb 2018 17:01:00 +0100 Subject: [PATCH] Fixes & improvements over listeners --- .../org/linphone/chat/ChatCreationFragment.java | 2 ++ src/android/org/linphone/chat/ChatRoomsAdapter.java | 2 +- src/android/org/linphone/chat/GroupInfoFragment.java | 12 +++++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index a06f05f8d..510666d93 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -305,9 +305,11 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen @Override public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (newState == ChatRoom.State.Created) { + cr.setListener(null); mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); } else if (newState == ChatRoom.State.CreationFailed) { + cr.setListener(null); mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index e7781a144..d24c89d89 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -157,7 +157,7 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { contactAddress = chatRoom.getParticipants()[0].getAddress(); } - if (!chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { + if (chatRoom.hasCapability(ChatRoomCapabilities.Conference.toInt()) && chatRoom.getState() == ChatRoom.State.Created) { // Only set for state Created otherwise it will conflict with removal listener chatRoom.setListener(mListener); chatRoom.setUserData(holder); } diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index cce72eaa5..9c6ac2e2b 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -177,9 +177,11 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { @Override public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (newState == ChatRoom.State.Created) { + cr.setListener(null); mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); } else if (newState == ChatRoom.State.CreationFailed) { + cr.setListener(null); mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); @@ -268,7 +270,15 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { return view; } - private void refreshParticipantsList() { + @Override + public void onDestroy() { + if (mChatRoom != null) { + mChatRoom.setListener(null); + } + super.onDestroy(); + } + + private void refreshParticipantsList() { if (mChatRoom == null) return; mParticipants = new ArrayList<>(); for (Participant p : mChatRoom.getParticipants()) {