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.Address;
import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
import org.linphone.ui.ContactSelectView; import org.linphone.ui.ContactSelectView;
import org.linphone.contacts.ContactsUpdatedListener; import org.linphone.contacts.ContactsUpdatedListener;
@ -297,25 +299,29 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
if (mContactsSelected.size() == 1) { if (mContactsSelected.size() == 1) {
mContactsSelectedLayout.removeAllViews(); mContactsSelectedLayout.removeAllViews();
mWaitLayout.setVisibility(View.VISIBLE); mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); Core lc = LinphoneManager.getLc();
chatRoom.setListener(new ChatRoomListenerStub() { Address participant = Factory.instance().createAddress(mContactsSelected.get(0).getAddress());
@Override ChatRoom chatRoom = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (chatRoom == null) {
if (newState == ChatRoom.State.Created) { chatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
mWaitLayout.setVisibility(View.GONE); chatRoom.setListener(new ChatRoomListenerStub() {
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); @Override
} else if (newState == ChatRoom.State.CreationFailed) { public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
mWaitLayout.setVisibility(View.GONE); if (newState == ChatRoom.State.Created) {
LinphoneActivity.instance().displayChatRoomError(); mWaitLayout.setVisibility(View.GONE);
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
} else if (newState == ChatRoom.State.CreationFailed) {
mWaitLayout.setVisibility(View.GONE);
LinphoneActivity.instance().displayChatRoomError();
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !");
}
} }
} });
});
Address addresses[] = new Address[1]; chatRoom.addParticipant(participant);
String addr = mContactsSelected.get(0).getAddress(); } else {
addresses[0] = LinphoneManager.getLc().interpretUrl(addr); LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
chatRoom.addParticipants(addresses); }
} else { } else {
mContactsSelectedLayout.removeAllViews(); mContactsSelectedLayout.removeAllViews();
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false); LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false);

View file

@ -77,21 +77,26 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else { } else {
mWaitLayout.setVisibility(View.VISIBLE); mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
chatRoom.setListener(new ChatRoomListenerStub() { if (room == null) {
@Override room = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { room.setListener(new ChatRoomListenerStub() {
if (newState == ChatRoom.State.Created) { @Override
mWaitLayout.setVisibility(View.GONE); public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); if (newState == ChatRoom.State.Created) {
} else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE);
mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
LinphoneActivity.instance().displayChatRoomError(); } else if (newState == ChatRoom.State.CreationFailed) {
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); mWaitLayout.setVisibility(View.GONE);
LinphoneActivity.instance().displayChatRoomError();
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !");
}
} }
} });
}); room.addParticipant(participant);
chatRoom.addParticipant(participant); } else {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
}
} }
} }
} }

View file

@ -176,21 +176,26 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else { } else {
mWaitLayout.setVisibility(View.VISIBLE); mWaitLayout.setVisibility(View.VISIBLE);
ChatRoom chatRoom = LinphoneManager.getLc().createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
chatRoom.setListener(new ChatRoomListenerStub() { if (room == null) {
@Override room = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { room.setListener(new ChatRoomListenerStub() {
if (newState == ChatRoom.State.Created) { @Override
mWaitLayout.setVisibility(View.GONE); public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); if (newState == ChatRoom.State.Created) {
} else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE);
mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
LinphoneActivity.instance().displayChatRoomError(); } else if (newState == ChatRoom.State.CreationFailed) {
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !"); mWaitLayout.setVisibility(View.GONE);
LinphoneActivity.instance().displayChatRoomError();
Log.e("Group chat room for address " + cr.getPeerAddress() + " has failed !");
}
} }
} });
}); room.addParticipant(participant);
chatRoom.addParticipant(participant); } else {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
}
} }
} else if (id == R.id.add_contact) { } else if (id == R.id.add_contact) {
Address addr = Factory.instance().createAddress(sipUri); Address addr = Factory.instance().createAddress(sipUri);