diff --git a/res/raw/assistant_create.rc b/res/raw/assistant_create.rc
index bcfa7a073..dc66e4efc 100644
--- a/res/raw/assistant_create.rc
+++ b/res/raw/assistant_create.rc
@@ -13,6 +13,7 @@
1
nat_policy_default_values
sip.linphone.org
+ sip:conference-factory@sip.linphone.org
stun.linphone.org
diff --git a/res/raw/linphonerc_factory b/res/raw/linphonerc_factory
index adc4d0a78..815e1ce9d 100644
--- a/res/raw/linphonerc_factory
+++ b/res/raw/linphonerc_factory
@@ -37,7 +37,6 @@ dtmf_player_amp=0.1
ec_calibrator_cool_tones=1
[misc]
-conference_factory_uri=sip:conference-factory@sip.linphone.org
max_calls=10
history_max_size=100
enable_basic_to_client_group_chat_room_migration=0
diff --git a/res/values/non_localizable_custom.xml b/res/values/non_localizable_custom.xml
index 1879eedbe..d2a5c766a 100644
--- a/res/values/non_localizable_custom.xml
+++ b/res/values/non_localizable_custom.xml
@@ -3,6 +3,7 @@
sip.linphone.org
+ sip:conference-factory@sip.linphone.org
org.linphone
vnd.android.cursor.item/org.linphone.profile
sip:rls@sip.linphone.org
diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java
index 7c2047d88..1889c8f39 100644
--- a/src/android/org/linphone/LinphoneManager.java
+++ b/src/android/org/linphone/LinphoneManager.java
@@ -723,6 +723,15 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
mLc.migrateLogsFromRcToDb();
+ // Migrate existing linphone accounts to have conference factory uri set
+ for (ProxyConfig lpc : mLc.getProxyConfigList()) {
+ if (lpc.getConferenceFactoryUri() == null && lpc.getIdentityAddress().getDomain().equals(getString(R.string.default_domain))) {
+ lpc.edit();
+ lpc.setConferenceFactoryUri(getString(R.string.default_conference_factory_uri));
+ lpc.done();
+ }
+ }
+
if (mServiceContext.getResources().getBoolean(R.bool.enable_push_id)) {
initPushNotificationsService();
}
diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java
index e99972bfa..090099491 100644
--- a/src/android/org/linphone/chat/ChatCreationFragment.java
+++ b/src/android/org/linphone/chat/ChatCreationFragment.java
@@ -45,6 +45,7 @@ import org.linphone.core.Address;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core;
+import org.linphone.core.ProxyConfig;
import org.linphone.mediastream.Log;
import org.linphone.ui.ContactSelectView;
import org.linphone.contacts.ContactsUpdatedListener;
@@ -336,9 +337,15 @@ 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) {
- mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
- mChatRoom.addListener(mChatRoomCreationListener);
- mChatRoom.addParticipant(participant);
+ ProxyConfig lpc = lc.getDefaultProxyConfig();
+ if (lpc != null && lpc.getConferenceFactoryUri() != null) {
+ chatRoom = lc.getChatRoom(participant);
+ LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
+ } else {
+ mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
+ mChatRoom.addListener(mChatRoomCreationListener);
+ mChatRoom.addParticipant(participant);
+ }
} else {
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
}
@@ -361,7 +368,14 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
ContactAddress ca = mSearchAdapter.getContacts().get(i);
- removeContactFromSelection(ca);
+ Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
+ ProxyConfig lpc = lc.getDefaultProxyConfig();
+ if (lpc == null || lpc.getConferenceFactoryUri() == null) {
+ ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
+ LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
+ } else {
+ removeContactFromSelection(ca);
+ }
}
@Override
diff --git a/src/android/org/linphone/contacts/ContactDetailsFragment.java b/src/android/org/linphone/contacts/ContactDetailsFragment.java
index b33d5e16c..1a36353af 100644
--- a/src/android/org/linphone/contacts/ContactDetailsFragment.java
+++ b/src/android/org/linphone/contacts/ContactDetailsFragment.java
@@ -78,10 +78,16 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
if (room != null) {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else {
- mWaitLayout.setVisibility(View.VISIBLE);
- mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
- mChatRoom.addListener(mChatRoomCreationListener);
- mChatRoom.addParticipant(participant);
+ ProxyConfig lpc = lc.getDefaultProxyConfig();
+ if (lpc != null && lpc.getConferenceFactoryUri() != null) {
+ room = lc.getChatRoom(participant);
+ LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
+ } else {
+ mWaitLayout.setVisibility(View.VISIBLE);
+ mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
+ mChatRoom.addListener(mChatRoomCreationListener);
+ mChatRoom.addParticipant(participant);
+ }
}
}
}
diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java
index ed0033e46..b7c10e17e 100644
--- a/src/android/org/linphone/fragments/HistoryDetailFragment.java
+++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java
@@ -41,6 +41,7 @@ import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core;
import org.linphone.core.Factory;
+import org.linphone.core.ProxyConfig;
import org.linphone.mediastream.Log;
public class HistoryDetailFragment extends Fragment implements OnClickListener {
@@ -199,10 +200,16 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
if (room != null) {
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
} else {
- mWaitLayout.setVisibility(View.VISIBLE);
- mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));
- mChatRoom.addListener(mChatRoomCreationListener);
- mChatRoom.addParticipant(participant);
+ ProxyConfig lpc = lc.getDefaultProxyConfig();
+ if (lpc != null && lpc.getConferenceFactoryUri() != null) {
+ room = lc.getChatRoom(participant);
+ LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
+ } else {
+ mWaitLayout.setVisibility(View.VISIBLE);
+ 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);