diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index 002c5e858..04ad23854 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -60,6 +60,7 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C private ListSelectionHelper mSelectionHelper; private RelativeLayout mWaitLayout; private int mChatRoomDeletionPendingCount; + private ChatRoomListenerStub mChatRoomListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -111,6 +112,25 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C } }; + mChatRoomListener = new ChatRoomListenerStub() { + @Override + public void onStateChanged(ChatRoom room, ChatRoom.State state) { + super.onStateChanged(room, state); + if (state == ChatRoom.State.Deleted || state == ChatRoom.State.TerminationFailed) { + mChatRoomDeletionPendingCount -= 1; + + if (state == ChatRoom.State.TerminationFailed) { + //TODO error message + } + + if (mChatRoomDeletionPendingCount == 0) { + mWaitLayout.setVisibility(View.GONE); + refreshChatRoomsList(); + } + } + } + }; + return view; } @@ -173,24 +193,7 @@ public class ChatListFragment extends Fragment implements OnItemClickListener, C } } - room.setListener(new ChatRoomListenerStub() { - @Override - public void onStateChanged(ChatRoom room, ChatRoom.State state) { - super.onStateChanged(room, state); - if (state == ChatRoom.State.Deleted || state == ChatRoom.State.TerminationFailed) { - mChatRoomDeletionPendingCount -= 1; - - if (state == ChatRoom.State.TerminationFailed) { - //TODO error message - } - - if (mChatRoomDeletionPendingCount == 0) { - mWaitLayout.setVisibility(View.GONE); - refreshChatRoomsList(); - } - } - } - }); + room.addListener(mChatRoomListener); lc.deleteChatRoom(room); } if (mChatRoomDeletionPendingCount > 0) { diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index ce7cab298..b91de72c5 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -111,7 +111,7 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { public void clear() { for (ChatRoom room : mRooms) { - room.setListener(null); + room.removeListener(mListener); } mRooms.clear(); } @@ -158,7 +158,7 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { } 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.addListener(mListener); chatRoom.setUserData(holder); }