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 f88f25458ed954d4ea555ff58e2a23a9a6b6b35d..791a9ce7c18f10fc6e92ed5b23934c69f3b5eb41 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 93648732556ae8d919774ed20b67e184e235b582..9d1444c78ec96b9b252a0ff8dbdbdffc58e23c11 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 94842bed4c9f64eabefe281cf92ee81746166a53..57fd65d47961e3ef37c439b56f61254df91b3112 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 89994c6709c6436e1bbb660749c10f056bb8b546..d3c2aa40e20633bc87fdb3ee887d81c227f7bdb3 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 c11eb28521e568d4483671d3eb9c8a1fa615b991..d3ec2a1c170d69e573b0ffc25313171dccef8c2c 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 {