Search an existing one to one chatroom to not create a new one if not necessary

This commit is contained in:
Sylvain Berfini 2018-02-13 10:48:21 +01:00
parent 83657e33a1
commit cdec808f28
3 changed files with 61 additions and 45 deletions

View file

@ -44,6 +44,8 @@ import org.linphone.contacts.SearchContactsListAdapter;
import org.linphone.core.Address;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.mediastream.Log;
import org.linphone.ui.ContactSelectView;
import org.linphone.contacts.ContactsUpdatedListener;
@ -297,7 +299,11 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
if (mContactsSelected.size() == 1) {
mContactsSelectedLayout.removeAllViews();
mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
Core lc = LinphoneManager.getLc();
Address participant = Factory.instance().createAddress(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.setListener(new ChatRoomListenerStub() {
@Override
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
@ -312,10 +318,10 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
}
});
Address addresses[] = new Address[1];
String addr = mContactsSelected.get(0).getAddress();
addresses[0] = LinphoneManager.getLc().interpretUrl(addr);
chatRoom.addParticipants(addresses);
chatRoom.addParticipant(participant);
} else {
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
}
} else {
mContactsSelectedLayout.removeAllViews();
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false);

View file

@ -77,8 +77,10 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else {
mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
chatRoom.setListener(new ChatRoomListenerStub() {
room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
if (room == null) {
room = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
room.setListener(new ChatRoomListenerStub() {
@Override
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
if (newState == ChatRoom.State.Created) {
@ -91,7 +93,10 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
}
}
});
chatRoom.addParticipant(participant);
room.addParticipant(participant);
} else {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
}
}
}
}

View file

@ -176,8 +176,10 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else {
mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
chatRoom.setListener(new ChatRoomListenerStub() {
room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
if (room == null) {
room = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
room.setListener(new ChatRoomListenerStub() {
@Override
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
if (newState == ChatRoom.State.Created) {
@ -190,7 +192,10 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
}
}
});
chatRoom.addParticipant(participant);
room.addParticipant(participant);
} else {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
}
}
} else if (id == R.id.add_contact) {
Address addr = Factory.instance().createAddress(sipUri);