From ad9c163db79eddf5ef878f3c4e7e9b16bdfec873 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Mon, 8 Jun 2020 17:21:07 +0300 Subject: [PATCH] NY-10583: [NYNJA for Samsung] Force close when voice call is rejected by another user --- .../data/sdk/ConferenceSDKPresenter.java | 2 +- .../data/sdk/calls/ConferenceSDKListener.java | 2 +- .../data/sdk/calls/ConferenceSDKModule.java | 177 +++++++++++------- .../mvp/presenters/ChatPresenter.java | 24 +-- 4 files changed, 120 insertions(+), 85 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/ConferenceSDKPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/ConferenceSDKPresenter.java index 9e3b3ee8cc..0e7458d091 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/ConferenceSDKPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/ConferenceSDKPresenter.java @@ -49,7 +49,7 @@ public abstract class ConferenceSDKPresenter extends Bas @Override public void onConferenceMembersUpdate(ActiveConferenceCall activeConferenceCall) {} - @Override public void onStateChangedForCall(NYNCall iConference) {} + @Override public void onStateChangedForCall(int membersCount) {} @Override public void onAcceptedElsewhereConference(String conferenceId) {} diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKListener.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKListener.java index 4b7d023f76..37770d85ee 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKListener.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceSDKListener.java @@ -34,7 +34,7 @@ public interface ConferenceSDKListener { void onConferenceMembersUpdate(ActiveConferenceCall activeConferenceCall); - void onStateChangedForCall(NYNCall iConference); + void onStateChangedForCall(int membersCount); void onAcceptedElsewhereConference(String conferenceId); 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 f45a7dde97..878d4f9c4f 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 @@ -814,24 +814,26 @@ public class ConferenceSDKModule extends BaseSDKModule { public void didChangeCallState(NYNCall iConference, NYNCallState newState) { if (iConference == null) return; final String callId = iConference.callId(); - if (mHandler != null) mHandler.post( () -> { - if (!hasCreatedActiveCall()) return; - if (mActiveConference.mConference == null) return; - if (mActiveConference.mConference.callId().contentEquals(callId)) { - Timber.d("didChangeCallState(): callId=" + callId + - "; state=" + newState.toString()); - onChangeCallState(iConference, newState); - } - }); + Timber.d("didChangeCallState(): callId=" + callId + + "; state=" + newState.toString()); + if (!hasCreatedActiveCall()) return; + if (mActiveConference.mConference == null) return; + if (mActiveConference.mConference.callId().contentEquals(callId)) { + if (mHandler != null) mHandler.post( () -> { + onChangeCallState(newState); + }); + } } @Override public void didEndCall(NYNCall iConference) { - if (iConference != null && - hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(iConference.callId())) { - Timber.d("didEndCall(): callId=" + iConference.callId()); - onConferenceEnded(iConference.callId()); + if (iConference != null) { + String callId = iConference.callId(); + Timber.d("didEndCall(): callId=" + callId); + if (hasCreatedActiveCall() && mActiveConference.mConference != null + && mActiveConference.mConference.callId().contentEquals(callId)) { + onConferenceEnded(callId); + } } } @@ -855,73 +857,86 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public void onScreenShareStarted(NYNCall call) { + if (call == null) return; if (call != null) { - Timber.d("onScreenShareStarted(): callId=" + call.callId()); - onOwnScreenShareStarted(call); + String callId = call.callId(); + int pCount = call.getParticipantsCount(); + + Timber.d("onScreenShareStarted(): callId=" + callId); + onOwnScreenShareStarted(callId, pCount); } } @Override public void onScreenShareStopped(NYNCall call) { if (call != null) { + String callId = call.callId(); + int pCount = call.getParticipantsCount(); + Timber.d("onScreenShareStopped(): callId=" + call.callId()); - onOwnScreenShareStopped(call); + onOwnScreenShareStopped(callId, pCount); } } @Override public void onRemoteScreenShareTrackAdded(NYNCall call, String trackId, String participantId) { if (call != null) { - Timber.d("onRemoteScreenShareTrackAdded(): callId=" + call.callId() + + String callId = call.callId(); + Timber.d("onRemoteScreenShareTrackAdded(): callId=" + callId + "; trackId=" + trackId + "; participantId=" + participantId); - onRemoteScreenShareAdded(call.callId(), trackId, participantId); + onRemoteScreenShareAdded(callId, trackId, participantId); } } @Override public void onRemoteScreenShareTrackRemoved(NYNCall call, String trackId, String participantId) { if (call != null) { - Timber.d("onRemoteScreenShareTrackRemoved(): callId=" + call.callId() + + String callId = call.callId(); + Timber.d("onRemoteScreenShareTrackRemoved(): callId=" + callId + "; trackId=" + trackId + "; participantId=" + participantId); - onRemoteScreenShareRemoved(call.callId(), trackId, participantId); + onRemoteScreenShareRemoved(callId, trackId, participantId); } } @Override public void onRemoteVideoTrackAdded(NYNCall call, String trackId, String participantId) { if (call != null) { + String callId = call.callId(); boolean isConference = call.isConference(); - Timber.d("onRemoteVideoTrackAdded(): callId=" + call.callId() + + Timber.d("onRemoteVideoTrackAdded(): callId=" + callId + "; trackId=" + trackId + "; participantId=" + participantId + "; isConference=" + (isConference ? "true" : "false")); - onRemoteVideoAdded(call.callId(), trackId, participantId, isConference); + onRemoteVideoAdded(callId, trackId, participantId, isConference); } } @Override public void onRemoteVideoTrackRemoved(NYNCall call, String trackId, String participantId) { if (call != null) { + String callId = call.callId(); boolean isConference = call.isConference(); - Timber.d("onRemoteVideoTrackRemoved(): callId=" + call.callId() + + Timber.d("onRemoteVideoTrackRemoved(): callId=" + callId + "; trackId=" + trackId + "; participantId=" + participantId + "; isConference=" + (isConference ? "true" : "false")); - onRemoteVideoRemoved(call.callId(), trackId, participantId, isConference); + onRemoteVideoRemoved(callId, trackId, participantId, isConference); } } @Override public void onLocalVideoCapturerStarted(NYNCall call) { if (call != null) { - Timber.d("onLocalVideoCapturerStarted(): callId=" + call.callId()); - onLocalVideoStarted(call.callId()); + String callId = call.callId(); + Timber.d("onLocalVideoCapturerStarted(): callId=" + callId); + onLocalVideoStarted(callId); } } @Override public void onLocalVideoCapturerStopped(NYNCall call) { if (call != null) { - Timber.d("onLocalVideoCapturerStopped(): callId=" + call.callId()); - onLocalVideoStopped(call.callId()); + String callId = call.callId(); + Timber.d("onLocalVideoCapturerStopped(): callId=" + callId); + onLocalVideoStopped(callId); } } @@ -956,24 +971,28 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public void startScreenShareFailed(NYNCall call, int code) { if (call != null) { - Timber.d("startScreenShareFailed(): callId=" + call.callId()); - onStartCapturerFailed(call, code, false); + String callId = call.callId(); + Timber.d("startScreenShareFailed(): callId=" + callId); + onStartCapturerFailed(callId, code, false); } } @Override public void screenShareEnded(NYNCall call) { if (call != null) { - Timber.d("screenShareEnded(): callId=" + call.callId()); - onOwnScreenShareStopped(call); + String callId = call.callId(); + int pCount = call.getParticipantsCount(); + Timber.d("screenShareEnded(): callId=" + callId); + onOwnScreenShareStopped(callId, pCount); } } @Override public void startCameraFailed(NYNCall call, int code) { if (call != null) { - Timber.d("startCameraFailed(): callId=" + call.callId()); - onStartCapturerFailed(call, code, true); + String callId = call.callId(); + Timber.d("startCameraFailed(): callId=" + callId); + onStartCapturerFailed(callId, code, true); } } }; @@ -1220,10 +1239,10 @@ public class ConferenceSDKModule extends BaseSDKModule { } private synchronized void onActiveSpeakersUpdated(NYNCall call) { + if (call == null) return; if (!hasCreatedActiveCall()) return; if (mActiveConference.mConference == null) return; if (!mActiveConference.mConference.isConference()) return; - if (call == null) return; if (!mActiveConference.mConference.callId().contentEquals(call.callId())) return; String activeSpeakers = ""; ArrayList participantIds = new ArrayList<>(); @@ -1244,6 +1263,7 @@ public class ConferenceSDKModule extends BaseSDKModule { } private synchronized void onMuteStateChangedByHost(NYNCall call, boolean isMuted) { + if (call == null) return; if (!hasCreatedActiveCall()) return; if (mActiveConference.mConference == null) return; if (!mActiveConference.mConference.isConference()) return; @@ -1261,9 +1281,8 @@ public class ConferenceSDKModule extends BaseSDKModule { } } - private void onCallStateHandle(NYNCall call, boolean forceFireEvent) { + private void onCallStateHandle(NYNCall call, boolean isActiveCall, boolean forceFireEvent) { if (call != null) { - String callId = call.callId(); String roomId = (call.isConference() ? call.getChatRoomId() : (call.isOutgoing() ? call.callee() : call.caller())); NYNCallState state = call.callState(); @@ -1279,8 +1298,7 @@ public class ConferenceSDKModule extends BaseSDKModule { } } if (!forceFireEvent) { - if ((hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(callId))) { + if (isActiveCall) { return; } else if (call.isOutgoing()) { return; @@ -1295,7 +1313,7 @@ public class ConferenceSDKModule extends BaseSDKModule { } } - private void onCallEndedHandle(NYNCall call, boolean forceFireEvent) { + private void onCallEndedHandle(NYNCall call, String callId, boolean forceFireEvent) { if (call != null) { String callId = call.callId(); String roomId = (call.isConference() ? call.getChatRoomId() : @@ -1319,7 +1337,9 @@ public class ConferenceSDKModule extends BaseSDKModule { } private synchronized void onSignalCallCompleted(NYNCall call) { - onCallEndedHandle(call, false); + if (call == null) return; + String callId = call.callId(); + onCallEndedHandle(call, callId, false); trackCallStatus(call, true); } @@ -1529,6 +1549,10 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public void stateChangedForCall(NYNCall call) { + if (call == null) { + Timber.d("stateChangedForCall(): with NULL call bject!!!"); + return; + } onStateChangedForCall(call); } @@ -1575,10 +1599,10 @@ public class ConferenceSDKModule extends BaseSDKModule { @Override public void receivedCompletedCall(NYNCall call) { - String callId = (call != null ? call.callId(): null); - Timber.d("receivedCompletedCall(): call with \'CallId\'=\'%s", callId); - onCallEndedHandle(call, true); - if (call != null && callId != null && + if (call == null) return; + String callId = call.callId(); + onCallEndedHandle(call, callId, true); + if (callId != null && hasCreatedActiveCall() && mActiveConference.mConference != null && mActiveConference.mConference.callId().contentEquals(callId)) { onConferenceEnded(callId); @@ -1847,12 +1871,10 @@ public class ConferenceSDKModule extends BaseSDKModule { } } - private void onOwnScreenShareStarted(NYNCall call) { - if (call != null && - hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(call.callId())) { - Timber.d("onOwnScreenShareStarted(): callId=" + call.callId()); - int pCount = call.getParticipantsCount(); + private void onOwnScreenShareStarted(String callId, int pCount) { + if (hasCreatedActiveCall() && mActiveConference.mConference != null + && mActiveConference.mConference.callId().contentEquals(callId)) { + Timber.d("onOwnScreenShareStarted(): callId=" + callId); if (pCount > 0) { Map values = new HashMap<>(); values.put("Screen Share", pCount); @@ -1860,16 +1882,14 @@ public class ConferenceSDKModule extends BaseSDKModule { } else { AppsTrackerUtils.getCleverTapInstance().trackEvent(getContext(), AppsTrackerConsts.ATEventScreenShareStarted); } - onScreenShareState(call.callId(), true); + onScreenShareState(callId, true); } } - private void onOwnScreenShareStopped(NYNCall call) { - if (call != null && - hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(call.callId())) { - Timber.d("onOwnScreenShareStopped(): callId=" + call.callId()); - int pCount = call.getParticipantsCount(); + private void onOwnScreenShareStopped(String callId, int pCount) { + if (hasCreatedActiveCall() && mActiveConference.mConference != null + && mActiveConference.mConference.callId().contentEquals(callId)) { + Timber.d("onOwnScreenShareStopped(): callId=" + callId); if (pCount > 0) { Map values = new HashMap<>(); values.put("Screen Share", pCount); @@ -1877,14 +1897,14 @@ public class ConferenceSDKModule extends BaseSDKModule { } else { AppsTrackerUtils.getCleverTapInstance().trackEvent(getContext(), AppsTrackerConsts.ATEventScreenShareDidEnd); } - onScreenShareState(call.callId(), false); + onScreenShareState(callId, false); } } - private void onStartCapturerFailed(NYNCall call, int code, boolean isCamera) { - if (call != null && + private void onStartCapturerFailed(String callId, int code, boolean isCamera) { + if (callId != null && hasCreatedActiveCall() && mActiveConference.mConference != null - && mActiveConference.mConference.callId().contentEquals(call.callId())) { + && mActiveConference.mConference.callId().contentEquals(callId)) { for (ConferenceSDKListener conferenceListener : mConferenceSDKListener) { if (code == -47) { if (isCamera) { @@ -1903,7 +1923,7 @@ public class ConferenceSDKModule extends BaseSDKModule { } } - private void onChangeCallState(NYNCall call, NYNCallState newState) { + private void onChangeCallState(NYNCallState newState) { for (ConferenceSDKListener conferenceSDKListener : mConferenceSDKListener) { conferenceSDKListener.onConferenceStateChanged(mActiveConference); } @@ -2462,11 +2482,8 @@ public class ConferenceSDKModule extends BaseSDKModule { mCallManager.hasRunningCallWithContact(roomId))); } - public NYNCall getConferenceCallWithRoom(String roomId) { - if (hasRunningCallWithRoom(roomId)) { - return mCallManager.getCallForRunningCallWithRoom(roomId); - } - return null; + public int getConferenceCallRoomMembers(String roomId) { + return getConferenceMembersCount(mCallManager.getCallForRunningCallWithRoom(roomId)); } public void createNewConference(String roomId, boolean isVideoConference) { @@ -3241,6 +3258,28 @@ public class ConferenceSDKModule extends BaseSDKModule { } } + private int getConferenceMembersCount(NYNCall iConference) { + int membersCount = 1; + if (iConference != null && iConference.isConference()) { + membersCount = iConference.membersCount(); + } + return membersCount; + } + + private synchronized void onStateChangedForCall(NYNCall iConference) { + String callId = iConference.callId(); + final int membersCount = getConferenceMembersCount(iConference); + boolean isActiveCall = ((hasCreatedActiveCall() && mActiveConference.mConference != null + && mActiveConference.mConference.callId().contentEquals(callId))); + onCallStateHandle(iConference, isActiveCall, false); + + mHandler.post(() -> { + for (ConferenceSDKListener conferenceSDKListener : mConferenceSDKListener) { + conferenceSDKListener.onStateChangedForCall(membersCount); + } + }); + } + private synchronized void onAcceptedCall(NYNCall call) { if (call != null && hasCreatedActiveCall() && !mActiveConference.isOutgoingCall diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChatPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChatPresenter.java index 97f0ac33be..53eda70485 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChatPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/ChatPresenter.java @@ -125,9 +125,7 @@ import kotlin.jvm.Synchronized; import ru.terrakok.cicerone.result.ResultListener; import timber.log.Timber; -import static com.nynja.mobile.communicator.data.FragmentTransferObject.Type.OpenAudioConferenceCreate; import static com.nynja.mobile.communicator.data.FragmentTransferObject.Type.OpenChooseUsersAdminAddUsersEditMode; -import static com.nynja.mobile.communicator.data.FragmentTransferObject.Type.OpenVideoConferenceCreate; import static com.nynja.mobile.communicator.data.models.events.local.Event.Type; import static com.nynja.mobile.communicator.mvp.presenters.ChatLanguagePresenter.LANGUAGE_LIST_REQUEST_CODE; import static com.nynja.mobile.communicator.utils.Consts.LIMIT_MESSAGE_TO_CHAT; @@ -574,7 +572,7 @@ public class ChatPresenter extends BaseChatPresenter { processUnreadState(); } updateConferenceCallBanner(mDataManager.getConferenceSDK() - .getConferenceCallWithRoom(mRoom.id)); + .getConferenceCallRoomMembers(mRoom.id)); } }, Timber::e)); //Subscribe to Amazon event @@ -1003,15 +1001,17 @@ public class ChatPresenter extends BaseChatPresenter { } } - @Override public void onStateChangedForCall(NYNCall iConference) { - updateConferenceCallBanner(iConference); + @Override public void onStateChangedForCall(int membersCount) { + updateConferenceCallBanner(membersCount); } @Override public void onRoomCallStateChanges(String roomId, boolean active) { if (roomId == null) return; if (mRoom == null || StringUtils.isEmpty(mRoom.id)) return; if (!roomId.contentEquals(mRoom.id)) return; - updateConferenceCallBanner(mDataManager.getConferenceSDK().getConferenceCallWithRoom(mRoom.id), active); + + int membersCount = mDataManager.getConferenceSDK().getConferenceCallRoomMembers(mRoom.id); + updateConferenceCallBanner(membersCount, active); } @Override public void showRequestPermissionForReJoinCall(RejoinConferenceCallData rejoinData) { @@ -1023,21 +1023,17 @@ public class ChatPresenter extends BaseChatPresenter { mDataManager.getConferenceSDK().continueJoinConference(rejoinData); } - private void updateConferenceCallBanner(NYNCall iConference) { - updateConferenceCallBanner(iConference, false); + private void updateConferenceCallBanner(int membersCount) { + updateConferenceCallBanner(membersCount, false); } - private void updateConferenceCallBanner(NYNCall iConference, boolean activeConference) { + private void updateConferenceCallBanner(int membersCount, boolean activeConference) { if (mRoom == null) return; int total = mRoom.getRoomStatus()[0]; - int active = 1; - if (iConference != null && iConference.isConference()) { - active = iConference.membersCount(); - } boolean show = (!isConferenceActive() && (hasRunningCallForCurrentRoom() || activeConference) && (mRoom.isGroupOrCalllChat())); - getViewState().updateConferenceCallBanner(show, total, active); + getViewState().updateConferenceCallBanner(show, total, membersCount); } private void subscribeOnNewData() { -- GitLab