|
@@ -1973,31 +1973,7 @@ public class CallActivity extends CallBaseActivity {
|
|
|
if (!publisher) {
|
|
|
CallParticipant callParticipant = callParticipants.get(sessionId);
|
|
|
if (callParticipant == null) {
|
|
|
- callParticipant = new CallParticipant(sessionId);
|
|
|
- callParticipants.put(sessionId, callParticipant);
|
|
|
-
|
|
|
- SignalingMessageReceiver.CallParticipantMessageListener callParticipantMessageListener =
|
|
|
- new CallActivityCallParticipantMessageListener(sessionId);
|
|
|
- callParticipantMessageListeners.put(sessionId, callParticipantMessageListener);
|
|
|
- signalingMessageReceiver.addListener(callParticipantMessageListener, sessionId);
|
|
|
-
|
|
|
- if (!hasExternalSignalingServer) {
|
|
|
- OfferAnswerNickProvider offerAnswerNickProvider = new OfferAnswerNickProvider(sessionId);
|
|
|
- offerAnswerNickProviders.put(sessionId, offerAnswerNickProvider);
|
|
|
- signalingMessageReceiver.addListener(offerAnswerNickProvider.getVideoWebRtcMessageListener(), sessionId, "video");
|
|
|
- signalingMessageReceiver.addListener(offerAnswerNickProvider.getScreenWebRtcMessageListener(), sessionId, "screen");
|
|
|
- }
|
|
|
-
|
|
|
- final CallParticipantModel callParticipantModel = callParticipant.getCallParticipantModel();
|
|
|
-
|
|
|
- ScreenParticipantDisplayItemManager screenParticipantDisplayItemManager =
|
|
|
- new ScreenParticipantDisplayItemManager(callParticipantModel);
|
|
|
- screenParticipantDisplayItemManagers.put(sessionId, screenParticipantDisplayItemManager);
|
|
|
- callParticipantModel.addObserver(screenParticipantDisplayItemManager, screenParticipantDisplayItemManagersHandler);
|
|
|
-
|
|
|
- runOnUiThread(() -> {
|
|
|
- addParticipantDisplayItem(callParticipantModel, "video");
|
|
|
- });
|
|
|
+ callParticipant = addCallParticipant(sessionId);
|
|
|
}
|
|
|
|
|
|
if ("screen".equals(type)) {
|
|
@@ -2017,6 +1993,36 @@ public class CallActivity extends CallBaseActivity {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private CallParticipant addCallParticipant(String sessionId) {
|
|
|
+ CallParticipant callParticipant = new CallParticipant(sessionId);
|
|
|
+ callParticipants.put(sessionId, callParticipant);
|
|
|
+
|
|
|
+ SignalingMessageReceiver.CallParticipantMessageListener callParticipantMessageListener =
|
|
|
+ new CallActivityCallParticipantMessageListener(sessionId);
|
|
|
+ callParticipantMessageListeners.put(sessionId, callParticipantMessageListener);
|
|
|
+ signalingMessageReceiver.addListener(callParticipantMessageListener, sessionId);
|
|
|
+
|
|
|
+ if (!hasExternalSignalingServer) {
|
|
|
+ OfferAnswerNickProvider offerAnswerNickProvider = new OfferAnswerNickProvider(sessionId);
|
|
|
+ offerAnswerNickProviders.put(sessionId, offerAnswerNickProvider);
|
|
|
+ signalingMessageReceiver.addListener(offerAnswerNickProvider.getVideoWebRtcMessageListener(), sessionId, "video");
|
|
|
+ signalingMessageReceiver.addListener(offerAnswerNickProvider.getScreenWebRtcMessageListener(), sessionId, "screen");
|
|
|
+ }
|
|
|
+
|
|
|
+ final CallParticipantModel callParticipantModel = callParticipant.getCallParticipantModel();
|
|
|
+
|
|
|
+ ScreenParticipantDisplayItemManager screenParticipantDisplayItemManager =
|
|
|
+ new ScreenParticipantDisplayItemManager(callParticipantModel);
|
|
|
+ screenParticipantDisplayItemManagers.put(sessionId, screenParticipantDisplayItemManager);
|
|
|
+ callParticipantModel.addObserver(screenParticipantDisplayItemManager, screenParticipantDisplayItemManagersHandler);
|
|
|
+
|
|
|
+ runOnUiThread(() -> {
|
|
|
+ addParticipantDisplayItem(callParticipantModel, "video");
|
|
|
+ });
|
|
|
+
|
|
|
+ return callParticipant;
|
|
|
+ }
|
|
|
+
|
|
|
private List<PeerConnectionWrapper> getPeerConnectionWrapperListForSessionId(String sessionId) {
|
|
|
List<PeerConnectionWrapper> internalList = new ArrayList<>();
|
|
|
for (PeerConnectionWrapper peerConnectionWrapper : peerConnectionWrapperList) {
|
|
@@ -2055,26 +2061,32 @@ public class CallActivity extends CallBaseActivity {
|
|
|
}
|
|
|
|
|
|
if (!justScreen) {
|
|
|
- CallParticipant callParticipant = callParticipants.remove(sessionId);
|
|
|
- if (callParticipant != null) {
|
|
|
- ScreenParticipantDisplayItemManager screenParticipantDisplayItemManager =
|
|
|
- screenParticipantDisplayItemManagers.remove(sessionId);
|
|
|
- callParticipant.getCallParticipantModel().removeObserver(screenParticipantDisplayItemManager);
|
|
|
+ removeCallParticipant(sessionId);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- callParticipant.destroy();
|
|
|
+ private void removeCallParticipant(String sessionId) {
|
|
|
+ CallParticipant callParticipant = callParticipants.remove(sessionId);
|
|
|
+ if (callParticipant == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- SignalingMessageReceiver.CallParticipantMessageListener listener = callParticipantMessageListeners.remove(sessionId);
|
|
|
- signalingMessageReceiver.removeListener(listener);
|
|
|
+ ScreenParticipantDisplayItemManager screenParticipantDisplayItemManager =
|
|
|
+ screenParticipantDisplayItemManagers.remove(sessionId);
|
|
|
+ callParticipant.getCallParticipantModel().removeObserver(screenParticipantDisplayItemManager);
|
|
|
|
|
|
- OfferAnswerNickProvider offerAnswerNickProvider = offerAnswerNickProviders.remove(sessionId);
|
|
|
- if (offerAnswerNickProvider != null) {
|
|
|
- signalingMessageReceiver.removeListener(offerAnswerNickProvider.getVideoWebRtcMessageListener());
|
|
|
- signalingMessageReceiver.removeListener(offerAnswerNickProvider.getScreenWebRtcMessageListener());
|
|
|
- }
|
|
|
+ callParticipant.destroy();
|
|
|
|
|
|
- runOnUiThread(() -> removeParticipantDisplayItem(sessionId, "video"));
|
|
|
- }
|
|
|
+ SignalingMessageReceiver.CallParticipantMessageListener listener = callParticipantMessageListeners.remove(sessionId);
|
|
|
+ signalingMessageReceiver.removeListener(listener);
|
|
|
+
|
|
|
+ OfferAnswerNickProvider offerAnswerNickProvider = offerAnswerNickProviders.remove(sessionId);
|
|
|
+ if (offerAnswerNickProvider != null) {
|
|
|
+ signalingMessageReceiver.removeListener(offerAnswerNickProvider.getVideoWebRtcMessageListener());
|
|
|
+ signalingMessageReceiver.removeListener(offerAnswerNickProvider.getScreenWebRtcMessageListener());
|
|
|
}
|
|
|
+
|
|
|
+ runOnUiThread(() -> removeParticipantDisplayItem(sessionId, "video"));
|
|
|
}
|
|
|
|
|
|
private void removeParticipantDisplayItem(String sessionId, String videoStreamType) {
|