From 585daf2fe389ceb89d048593c643907e96804ee3 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 26 Feb 2018 16:41:37 +0100 Subject: [PATCH] Revert "Do not remove chatRoomListener in onPause, can lead to crashes", linphone updates now allows to remove a callback from a callback This reverts commit 8e4627d7da27b2578a92be985526bf2ec2693706. --- .../org/linphone/chat/ChatCreationFragment.java | 15 ++++++++++++--- .../org/linphone/chat/GroupInfoFragment.java | 16 ++++++++++++---- .../contacts/ContactDetailsFragment.java | 15 ++++++++++++--- .../fragments/HistoryDetailFragment.java | 15 ++++++++++++--- submodules/linphone | 2 +- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index fcef40ef9..7764524eb 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -67,6 +67,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private ProgressBar mContactsFetchInProgress; private SearchContactsListAdapter mSearchAdapter; private String mChatRoomSubject, mChatRoomAddress; + private ChatRoom mChatRoom; private ChatRoomListenerStub mChatRoomCreationListener; @Override @@ -179,6 +180,14 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen return view; } + @Override + public void onPause() { + if (mChatRoom != null) { + mChatRoom.removeListener(mChatRoomCreationListener); + } + super.onPause(); + } + private void displayChatCreation() { mNextButton.setVisibility(View.VISIBLE); mNextButton.setEnabled(mContactsSelected.size() > 0); @@ -316,9 +325,9 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen Address participant = mContactsSelected.get(0).getAddress(); ChatRoom chatRoom = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); if (chatRoom == null) { - chatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); - chatRoom.addListener(mChatRoomCreationListener); - chatRoom.addParticipant(participant); + mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); + mChatRoom.addListener(mChatRoomCreationListener); + mChatRoom.addParticipant(participant); } else { LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly()); } diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index e065d3c99..27b4ba292 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -66,7 +66,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { private boolean mIsEditionEnabled; private ArrayList mParticipants; private String mSubject; - private ChatRoom mChatRoom; + private ChatRoom mChatRoom, mTempChatRoom; private Dialog mAdminStateChangedDialog; private ChatRoomListenerStub mChatRoomCreationListener; @@ -215,8 +215,8 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { public void onClick(View view) { if (!mIsAlreadyCreatedGroup) { mWaitLayout.setVisibility(View.VISIBLE); - ChatRoom room = LinphoneManager.getLc().createClientGroupChatRoom(mSubjectField.getText().toString()); - room.addListener(mChatRoomCreationListener); + mTempChatRoom = LinphoneManager.getLc().createClientGroupChatRoom(mSubjectField.getText().toString()); + mTempChatRoom.addListener(mChatRoomCreationListener); Address addresses[] = new Address[mParticipants.size()]; int index = 0; @@ -224,7 +224,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { addresses[index] = ca.getAddress(); index++; } - room.addParticipants(addresses); + mTempChatRoom.addParticipants(addresses); } else { // Subject String newSubject = mSubjectField.getText().toString(); @@ -299,6 +299,14 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { return view; } + @Override + public void onPause() { + if (mTempChatRoom != null) { + mTempChatRoom.removeListener(mChatRoomCreationListener); + } + super.onPause(); + } + @Override public void onDestroy() { if (mChatRoom != null) { diff --git a/src/android/org/linphone/contacts/ContactDetailsFragment.java b/src/android/org/linphone/contacts/ContactDetailsFragment.java index cf48f3f24..b33d5e16c 100644 --- a/src/android/org/linphone/contacts/ContactDetailsFragment.java +++ b/src/android/org/linphone/contacts/ContactDetailsFragment.java @@ -54,6 +54,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener private LayoutInflater inflater; private View view; private boolean displayChatAddressOnly = false; + private ChatRoom mChatRoom; private ChatRoomListenerStub mChatRoomCreationListener; private OnClickListener dialListener = new OnClickListener() { @@ -78,9 +79,9 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); } else { mWaitLayout.setVisibility(View.VISIBLE); - room = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); - room.addListener(mChatRoomCreationListener); - room.addParticipant(participant); + mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); + mChatRoom.addListener(mChatRoomCreationListener); + mChatRoom.addParticipant(participant); } } } @@ -138,6 +139,14 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener return view; } + @Override + public void onPause() { + if (mChatRoom != null) { + mChatRoom.removeListener(mChatRoomCreationListener); + } + super.onPause(); + } + public void changeDisplayedContact(LinphoneContact newContact) { contact = newContact; displayContact(inflater, view); diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java index b3487ec21..ed0033e46 100644 --- a/src/android/org/linphone/fragments/HistoryDetailFragment.java +++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java @@ -51,6 +51,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { private String sipUri, displayName, pictureUri; private RelativeLayout mWaitLayout; private LinphoneContact contact; + private ChatRoom mChatRoom; private ChatRoomListenerStub mChatRoomCreationListener; @Override @@ -118,6 +119,14 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { return view; } + @Override + public void onPause() { + if (mChatRoom != null) { + mChatRoom.removeListener(mChatRoomCreationListener); + } + super.onPause(); + } + private void displayHistory(String status, String callTime, String callDate) { if (status.equals(getResources().getString(R.string.missed))) { callDirection.setImageResource(R.drawable.call_missed); @@ -191,9 +200,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); } else { mWaitLayout.setVisibility(View.VISIBLE); - room = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); - room.addListener(mChatRoomCreationListener); - room.addParticipant(participant); + mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); + mChatRoom.addListener(mChatRoomCreationListener); + mChatRoom.addParticipant(participant); } } else if (id == R.id.add_contact) { Address addr = Factory.instance().createAddress(sipUri); diff --git a/submodules/linphone b/submodules/linphone index 86493a151..247c2877a 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 86493a151c0d8af59140675a548dec0a87554491 +Subproject commit 247c2877a832c84de0d1af547dd5350b2bddf9f3