diff --git a/app/src/main/java/org/thoughtcrime/securesms/events/CallParticipant.kt b/app/src/main/java/org/thoughtcrime/securesms/events/CallParticipant.kt index 418aa08201..a1f91d08b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/events/CallParticipant.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/events/CallParticipant.kt @@ -67,6 +67,10 @@ data class CallParticipant( return copy(identityKey = identityKey) } + fun withAudioEnabled(audioEnabled: Boolean): CallParticipant { + return copy(isMicrophoneEnabled = audioEnabled) + } + fun withVideoEnabled(videoEnabled: Boolean): CallParticipant { return copy(isVideoEnabled = videoEnabled) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java index 846d4f9b2b..ae8de2654d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java @@ -56,6 +56,21 @@ public class ActiveCallActionProcessorDelegate extends WebRtcActionProcessor { return currentState; } + @Override + protected @NonNull WebRtcServiceState handleRemoteAudioEnable(@NonNull WebRtcServiceState currentState, boolean enable) { + RemotePeer activePeer = currentState.getCallInfoState().requireActivePeer(); + + Log.i(tag, "handleRemoteAudioEnable(): call_id: " + activePeer.getCallId()); + + CallParticipant oldParticipant = Objects.requireNonNull(currentState.getCallInfoState().getRemoteCallParticipant(activePeer.getRecipient())); + CallParticipant newParticipant = oldParticipant.withAudioEnabled(enable); + + return currentState.builder() + .changeCallInfoState() + .putParticipant(activePeer.getRecipient(), newParticipant) + .build(); + } + @Override protected @NonNull WebRtcServiceState handleRemoteVideoEnable(@NonNull WebRtcServiceState currentState, boolean enable) { RemotePeer activePeer = currentState.getCallInfoState().requireActivePeer(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java index e618c24f99..1bbc223360 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java @@ -110,6 +110,11 @@ public class ConnectedCallActionProcessor extends DeviceAwareActionProcessor { .build(); } + @Override + protected @NonNull WebRtcServiceState handleRemoteAudioEnable(@NonNull WebRtcServiceState currentState, boolean enable) { + return activeCallDelegate.handleRemoteAudioEnable(currentState, enable); + } + @Override protected @NonNull WebRtcServiceState handleRemoteVideoEnable(@NonNull WebRtcServiceState currentState, boolean enable) { return activeCallDelegate.handleRemoteVideoEnable(currentState, enable); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java index 5537792369..0023f3f64c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java @@ -232,6 +232,11 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor { return currentState; } + @Override + protected @NonNull WebRtcServiceState handleRemoteAudioEnable(@NonNull WebRtcServiceState currentState, boolean enable) { + return activeCallDelegate.handleRemoteAudioEnable(currentState, enable); + } + @Override protected @NonNull WebRtcServiceState handleRemoteVideoEnable(@NonNull WebRtcServiceState currentState, boolean enable) { return activeCallDelegate.handleRemoteVideoEnable(currentState, enable); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java index 1f30e0fbae..0431e5066c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/OutgoingCallActionProcessor.java @@ -233,6 +233,11 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor { .build(); } + @Override + protected @NonNull WebRtcServiceState handleRemoteAudioEnable(@NonNull WebRtcServiceState currentState, boolean enable) { + return activeCallDelegate.handleRemoteAudioEnable(currentState, enable); + } + @Override protected @NonNull WebRtcServiceState handleRemoteVideoEnable(@NonNull WebRtcServiceState currentState, boolean enable) { return activeCallDelegate.handleRemoteVideoEnable(currentState, enable); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index 2e5b7ca039..063f491f95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -616,11 +616,9 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall. case REMOTE_CONNECTED: return p.handleCallConnected(s, remotePeer); case REMOTE_AUDIO_ENABLE: - // TODO: Implement handling when the remote enables audio. - break; + return p.handleRemoteAudioEnable(s, true); case REMOTE_AUDIO_DISABLE: - // TODO: Implement handling when the remote disables audio. - break; + return p.handleRemoteAudioEnable(s, false); case REMOTE_VIDEO_ENABLE: return p.handleRemoteVideoEnable(s, true); case REMOTE_VIDEO_DISABLE: diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java index 0ad2523204..1e19488452 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java @@ -375,6 +375,11 @@ public abstract class WebRtcActionProcessor { .build(); } + protected @NonNull WebRtcServiceState handleRemoteAudioEnable(@NonNull WebRtcServiceState currentState, boolean enable) { + Log.i(tag, "handleRemoteAudioEnable not processed"); + return currentState; + } + protected @NonNull WebRtcServiceState handleRemoteVideoEnable(@NonNull WebRtcServiceState currentState, boolean enable) { Log.i(tag, "handleRemoteVideoEnable not processed"); return currentState;