From a8a454c0cacf5bf0299752db664c6afb64617769 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Sat, 16 May 2020 01:16:07 +0300 Subject: [PATCH] NY-10358: [AN]: The conference created after call escalation doesn't contains all participants and empty call screen after call is ended (cherry picked from commit 218ed9b35d00d75d8542fea18f1f5603f881a2d0) --- .../data/sdk/calls/ConferenceSDKModule.java | 58 +++++++++---------- .../mvp/presenters/ChooseUserPresenter.java | 16 +++-- .../presenters/ConferenceCallPresenter.java | 1 + .../mvp/presenters/MainActivityPresenter.kt | 10 ++++ .../ui/activities/MainActivity.java | 1 + 5 files changed, 49 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java index f88f25458e..791a9ce7c1 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKModule.java @@ -1465,19 +1465,7 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public void replaceCall(String oldCallId, NYNCall newCall) { - if (oldCallId != null) { - Timber.d("replaceCall old call \'CallId\'=\'" + - oldCallId + "\' with new \'CallId\'=\'" + newCall!=null? newCall.callId(): "null"+ "\'"); - if (hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(oldCallId)) { - mActiveConference.mConference.setListener(null); - final String callId = newCall.callId(); - onReplaceCall(callId); - } else if (newCall != null && !hasCreatedActiveCall() && oldCallId.contentEquals(newCall.replaceRef())) { - final String callId = newCall.callId(); - replaceNewCall(callId); - } - } + trySwitchP2pToConferenceCall(oldCallId, newCall); } @Override @@ -1587,6 +1575,24 @@ public class ConferenceSDKModule extends BaseSDKModule { } } + private synchronized void trySwitchP2pToConferenceCall(String oldCallId, NYNCall newCall) { + if (oldCallId != null) { + Timber.d("replaceCall old call \'CallId\'=\'" + + oldCallId + "\' with new \'CallId\'=\'" + newCall!=null? newCall.callId(): "null"+ "\'"); + if (hasCreatedActiveCall() && mActiveConference.mConference != null + && mActiveConference.mConference.callId().contentEquals(oldCallId)) { + Timber.d("replaceCall::trySwitchP2pToConferenceCall(): check 1"); + mActiveConference.mConference.setListener(null); + final String callId = newCall.callId(); + onReplaceCall(callId); + } else if (newCall != null && !hasCreatedActiveCall() && oldCallId.contentEquals(newCall.replaceRef())) { + Timber.d("replaceCall::trySwitchP2pToConferenceCall(): check 2"); + final String callId = newCall.callId(); + replaceNewCall(callId); + } + } + } + private void onScreenShareState(String callId, boolean active) { // not need twice for active call or not!!! for (ConferenceSDKListener conferenceListener : mConferenceSDKListener) { @@ -1900,24 +1906,14 @@ public class ConferenceSDKModule extends BaseSDKModule { if (!hasCreatedActiveCall() || StringUtils.isEmpty(conferenceId)) return; if (isP2P()) { if (replaceRef.contentEquals(mActiveConference.mConference.callId())) { - NYNCall conference = mCallManager.getCallById(conferenceId); - if (conference != null && conference.isConference()) { - // Escalate call to Conference - new Handler(Looper.getMainLooper()).post(() -> { - boolean isVideoConference = false;//NOT SUPPORTING VIDEO CONFERENCING YET!!!! mActiveConference.isVideoEnabled; - String subject = conference.getSubject(); - //conferenceHangUp(true); - mActiveConference.mConference.setListener(null); - endConference(false, false); - if (makeConferenceEx(conference, subject, roomId, null, isVideoConference, true)) { - mConferenceDetails.mCallId = conferenceId; - initConferenceCall(); - if (mHandler != null) mHandler.post( () -> { - onConferenceParticipantsUpdated(conferenceId); - }); - } - }); - } + // Escalate call to Conference + final NYNCall conference = mCallManager.getCallById(conferenceId); + if (conference == null || !conference.isConference()) return; + //////////////////////////////////////////////////////////////////////////////// + // !!!!!!!!!!! after that comes REPLACE event too ... + // so no needs to Recreate 2 time the new conference call !!! + trySwitchP2pToConferenceCall(replaceRef, conference); + //////////////////////////////////////////////////////////////////////////////// } } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChooseUserPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChooseUserPresenter.java index 9364873255..9d1444c78e 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChooseUserPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChooseUserPresenter.java @@ -723,18 +723,22 @@ public class ChooseUserPresenter extends ConferenceSDKPresenter return contact; } - private ArrayList getOriginParticipantContacts(List items) { - return getOriginParticipantContacts(items, false); + private ArrayList getOriginParticipantContacts(List items, + ContactModel me) { + return getOriginParticipantContacts(items, me, false); } - private ArrayList getOriginParticipantContacts(List items, boolean isEscalateCall) { + private ArrayList getOriginParticipantContacts(List items, + ContactModel me, + boolean isEscalateCall) { ArrayList contacts = new ArrayList<>(); if (items != null) { if (mNewAllContacts != null) { for (int i = 0; i < items.size(); i++) { ContactModel contact = getOriginParticipantContact(mNewAllContacts, items.get(i)); if (isEscalateCall) { - contact.isMe = false; // check with real MY contact!!! + if (me.equals(contact)) continue; + contact.isMe = false; } contacts.add(contact); } @@ -845,8 +849,8 @@ public class ChooseUserPresenter extends ConferenceSDKPresenter String roomName; String roomId = null; if (mRoom != null) { - contacts = getOriginParticipantContacts(items); ContactModel me = mDataManager.getMyConferenceContact(); + contacts = getOriginParticipantContacts(items, me); if (me != null) { MemberModel memberMe = mRoom.findMemberById(me.phoneId); if (memberMe != null) { @@ -860,8 +864,8 @@ public class ChooseUserPresenter extends ConferenceSDKPresenter roomName = mRoom.name; roomId = mRoom.id; } else { - contacts = getOriginParticipantContacts(items, isEscalateCall); ContactModel me = mDataManager.getMyConferenceContact(); + contacts = getOriginParticipantContacts(items, me, isEscalateCall); if (me != null) { me.isMe = true; contacts.add(0, me); diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java index 94842bed4c..57fd65d479 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ConferenceCallPresenter.java @@ -487,6 +487,7 @@ public class ConferenceCallPresenter extends ConferenceSDKPresenter @Nullable private ArrayList getConferenceParticipants() { + if (isP2PCall()) return null; if (mDataManager.getConferenceSDK(). getActiveConference().mData.mParticipantArray != null) { ArrayList currentContacts = new ArrayList<>(); diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/MainActivityPresenter.kt b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/MainActivityPresenter.kt index 89994c6709..d3c2aa40e2 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/MainActivityPresenter.kt +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/MainActivityPresenter.kt @@ -888,4 +888,14 @@ class MainActivityPresenter : ConferenceSDKPresenter() { mDataManager.getConferenceSDK().declineConference() } + fun setContactForP2P() { + val activeConferenceCall = mDataManager.conferenceSDK.activeConference + val peerId = mDataManager.conferenceSDK.activeConferencePeerName // getConferenceRoomId() + if (mDataManager.conferenceSDK.isP2P) { + val contact = mDataManager.getContactByChatId(peerId) + if (contact != null) { + activeConferenceCall?.addMember(contact) + } + } + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/MainActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/MainActivity.java index c11eb28521..d3ec2a1c17 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/MainActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/MainActivity.java @@ -402,6 +402,7 @@ public class MainActivity extends BaseActivity implements MainActivityView, if (permission.granted) { Timber.d("All permission(s) requests finished"); if (incomming) { + mPresenter.setContactForP2P(); mPresenter.navigateToActiveCall(); mPresenter.clearIncomingCallNotification(); } else { -- GitLab