From 32378c3c99f2e7155fb965a36c3bb119dbd491c2 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 2 Nov 2018 11:34:50 +0100 Subject: [PATCH] Added use of findOneToOneChatRoom with encryption --- liblinphone_tester/build.gradle | 10 +++---- res/layout/image_upload_cell.xml | 7 +++-- .../linphone/chat/ChatCreationFragment.java | 28 ++++++++++++++----- .../org/linphone/chat/DevicesFragment.java | 27 +++++++++++------- .../org/linphone/chat/GroupChatFragment.java | 13 +-------- .../org/linphone/chat/ImdnFragment.java | 10 ++----- .../contacts/ContactDetailsFragment.java | 2 +- .../fragments/HistoryDetailFragment.java | 2 +- submodules/linphone | 2 +- 9 files changed, 54 insertions(+), 47 deletions(-) diff --git a/liblinphone_tester/build.gradle b/liblinphone_tester/build.gradle index f58bbc87a..595fe5035 100644 --- a/liblinphone_tester/build.gradle +++ b/liblinphone_tester/build.gradle @@ -33,11 +33,11 @@ dependencies { androidTestCompile group: 'junit', name: 'junit', version: '+' androidTestCompile group: 'com.jayway.android.robotium', name: 'robotium', version: '+' androidTestCompile fileTree(dir: 'libs', include: 'android-junit-report*.jar') - compile 'org.apache.commons:commons-compress:1.16.1' - compile group: 'junit', name: 'junit', version: '+' - compile group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+' - compile fileTree(dir: 'libs', include: 'android-junit-report*.jar') - compile project(":liblinphone-sdk") + implementation 'org.apache.commons:commons-compress:1.16.1' + implementation group: 'junit', name: 'junit', version: '+' + implementation group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+' + implementation fileTree(dir: 'libs', include: 'android-junit-report*.jar') + implementation project(":liblinphone-sdk") } android { diff --git a/res/layout/image_upload_cell.xml b/res/layout/image_upload_cell.xml index 737de0816..709bfe6bb 100644 --- a/res/layout/image_upload_cell.xml +++ b/res/layout/image_upload_cell.xml @@ -7,7 +7,8 @@ + android:layout_alignRight="@id/pendingImageForUpload" + android:layout_alignTop="@id/pendingImageForUpload"/> \ No newline at end of file diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index 3794cc60b..535695527 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -469,14 +469,28 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen boolean createEncryptedChatRoom = mSecurityToggle.isChecked(); if (lpc == null || lpc.getConferenceFactoryUri() == null || mCreateGroupChatRoom == false) { if (createEncryptedChatRoom && lpc != null && lpc.getConferenceFactoryUri() != null) { - mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), !createEncryptedChatRoom, createEncryptedChatRoom); - mChatRoom.addListener(mChatRoomCreationListener); - Address participants[] = new Address[1]; - participants[0] = ca.getAddress(); - mChatRoom.addParticipants(participants); + mChatRoom = lc.findOneToOneChatRoom(lpc.getIdentityAddress(), ca.getAddress(), true); + if (mChatRoom != null) { + LinphoneActivity.instance().goToChat(mChatRoom.getPeerAddress().asStringUriOnly(), mShareInfos, mChatRoom.getLocalAddress().asString()); + } else { + mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), !createEncryptedChatRoom, createEncryptedChatRoom); + mChatRoom.addListener(mChatRoomCreationListener); + Address participants[] = new Address[1]; + participants[0] = ca.getAddress(); + mChatRoom.addParticipants(participants); + } } else { - ChatRoom chatRoom = lc.getChatRoom(ca.getAddress()); - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos, chatRoom.getLocalAddress().asString()); + if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) { + mWaitLayout.setVisibility(View.VISIBLE); + mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), true); + mChatRoom.addListener(mChatRoomCreationListener); + Address participants[] = new Address[1]; + participants[0] = ca.getAddress(); + mChatRoom.addParticipants(participants); + } else { + ChatRoom chatRoom = lc.getChatRoom(ca.getAddress()); + LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos, chatRoom.getLocalAddress().asString()); + } } } else { addOrRemoveContactFromSelection(ca); diff --git a/src/android/org/linphone/chat/DevicesFragment.java b/src/android/org/linphone/chat/DevicesFragment.java index 3e6d636c4..429772401 100644 --- a/src/android/org/linphone/chat/DevicesFragment.java +++ b/src/android/org/linphone/chat/DevicesFragment.java @@ -39,6 +39,9 @@ import org.linphone.core.Address; import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomCapabilities; import org.linphone.core.Core; +import org.linphone.core.Factory; +import org.linphone.core.Participant; +import org.linphone.core.ParticipantDevice; import org.linphone.mediastream.Log; import java.util.Arrays; @@ -53,6 +56,7 @@ public class DevicesFragment extends Fragment { private String mRoomUri; private Address mRoomAddr; private ChatRoom mRoom; + private boolean mOnlyDisplayChilds; @Nullable @Override @@ -67,16 +71,26 @@ public class DevicesFragment extends Fragment { mInflater = inflater; View view = mInflater.inflate(R.layout.chat_devices, container, false); + mOnlyDisplayChilds = false; + mExpandableList = view.findViewById(R.id.devices_list); mExpandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long l) { + ParticipantDevice device = (ParticipantDevice) mAdapter.getChild(groupPosition, childPosition); + LinphoneManager.getLc().inviteAddress(device.getAddress()); return false; } }); mExpandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) { + if (mOnlyDisplayChilds) { + // in this case groups are childs, so call on click + ParticipantDevice device = (ParticipantDevice) mAdapter.getGroup(groupPosition); + LinphoneManager.getLc().inviteAddress(device.getAddress()); + return true; + } return false; } }); @@ -109,13 +123,7 @@ public class DevicesFragment extends Fragment { private void initChatRoom() { Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - Address proxyConfigContact = core.getDefaultProxyConfig().getContact(); - if (proxyConfigContact != null) { - mRoom = core.findOneToOneChatRoom(proxyConfigContact, mRoomAddr); - } - if (mRoom == null) { - mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); - } + mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); } private void initHeader() { @@ -144,10 +152,9 @@ public class DevicesFragment extends Fragment { initChatRoom(); } - boolean onlyDisplayChilds = mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()); - if (mRoom != null && mRoom.getNbParticipants() > 0) { - mAdapter.updateListItems(Arrays.asList(mRoom.getParticipants()), onlyDisplayChilds); + mOnlyDisplayChilds = mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()); + mAdapter.updateListItems(Arrays.asList(mRoom.getParticipants()), mOnlyDisplayChilds); } } } diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 4b15354e8..47bb58d61 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -580,18 +580,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con return; } - Address proxyConfigContact = mLocalIdentityAddress; - if (proxyConfigContact == null) { - proxyConfigContact = core.getDefaultProxyConfig() != null ? core.getDefaultProxyConfig().getContact() : null; - } - - if (proxyConfigContact != null) { - mChatRoom = core.findOneToOneChatRoom(proxyConfigContact, mRemoteSipAddress); - } - if (mChatRoom == null) { - mChatRoom = core.getChatRoomFromUri(mRemoteSipAddress.asStringUriOnly()); - } - + mChatRoom = core.getChatRoomFromUri(mRemoteSipAddress.asStringUriOnly()); mChatRoom.addListener(this); mChatRoom.markAsRead(); LinphoneManager.getInstance().updateUnreadCountForChatRoom(mChatRoom, 0); diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index 4d9c66e5e..2de5af390 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -33,6 +33,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import org.linphone.LinphoneManager; +import org.linphone.LinphonePreferences; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; @@ -70,14 +71,9 @@ public class ImdnFragment extends Fragment { mRoomAddr = LinphoneManager.getLc().createAddress(mRoomUri); mMessageId = getArguments().getString("MessageId"); } + Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - Address proxyConfigContact = core.getDefaultProxyConfig().getContact(); - if (proxyConfigContact != null) { - mRoom = core.findOneToOneChatRoom(proxyConfigContact, mRoomAddr); - } - if (mRoom == null) { - mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); - } + mRoom = core.getChatRoomFromUri(mRoomAddr.asStringUriOnly()); mInflater = inflater; mContainer = container; diff --git a/src/android/org/linphone/contacts/ContactDetailsFragment.java b/src/android/org/linphone/contacts/ContactDetailsFragment.java index 990a7b075..3d0fb1ae8 100644 --- a/src/android/org/linphone/contacts/ContactDetailsFragment.java +++ b/src/android/org/linphone/contacts/ContactDetailsFragment.java @@ -79,7 +79,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener Address participant = Factory.instance().createAddress(tag); ProxyConfig defaultProxyConfig = lc.getDefaultProxyConfig(); if (defaultProxyConfig != null) { - ChatRoom room = lc.findOneToOneChatRoom(defaultProxyConfig.getContact(), participant); + ChatRoom room = lc.findOneToOneChatRoom(defaultProxyConfig.getContact(), participant, false); if (room != null) { LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null, room.getLocalAddress().asString()); } else { diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java index b7dad2ffc..87546b4a2 100644 --- a/src/android/org/linphone/fragments/HistoryDetailFragment.java +++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java @@ -197,7 +197,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { } else if (id == R.id.chat) { Core lc = LinphoneManager.getLc(); Address participant = Factory.instance().createAddress(sipUri); - ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); + ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant, false); if (room != null) { LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null, room.getLocalAddress().asString()); } else { diff --git a/submodules/linphone b/submodules/linphone index 9b9dcbbc5..fc5cc0c22 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 9b9dcbbc5ec45c637dbbade15fdd64cf56bbd758 +Subproject commit fc5cc0c22b7cab831052a17afc699376c64c85bf