mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 04:28:35 +00:00
Hook in Call Links integration via factory.
This commit is contained in:
committed by
Cody Henthorne
parent
59435e49c8
commit
bf7aaddbf9
@@ -12,11 +12,9 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState
|
|||||||
* Process actions for when the call link has at least once been connected and joined.
|
* Process actions for when the call link has at least once been connected and joined.
|
||||||
*/
|
*/
|
||||||
class CallLinkConnectedActionProcessor(
|
class CallLinkConnectedActionProcessor(
|
||||||
|
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||||
webRtcInteractor: WebRtcInteractor
|
webRtcInteractor: WebRtcInteractor
|
||||||
) : GroupConnectedActionProcessor(webRtcInteractor) {
|
) : GroupConnectedActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||||
override fun getGroupNetworkUnavailableActionProcessor(): GroupNetworkUnavailableActionProcessor {
|
|
||||||
return CallLinkNetworkUnavailableActionProcessor(webRtcInteractor)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
||||||
Log.i(tag, "handleGroupRequestUpdateMembers():")
|
Log.i(tag, "handleGroupRequestUpdateMembers():")
|
||||||
|
|||||||
@@ -12,11 +12,9 @@ import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState
|
|||||||
* Process actions to go from lobby to a joined call link.
|
* Process actions to go from lobby to a joined call link.
|
||||||
*/
|
*/
|
||||||
class CallLinkJoiningActionProcessor(
|
class CallLinkJoiningActionProcessor(
|
||||||
|
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||||
webRtcInteractor: WebRtcInteractor
|
webRtcInteractor: WebRtcInteractor
|
||||||
) : GroupJoiningActionProcessor(webRtcInteractor) {
|
) : GroupJoiningActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||||
override fun getGroupNetworkUnavailableActionProcessor(): GroupNetworkUnavailableActionProcessor {
|
|
||||||
return CallLinkNetworkUnavailableActionProcessor(webRtcInteractor)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
||||||
Log.i(tag, "handleGroupRequestUpdateMembers():")
|
Log.i(tag, "handleGroupRequestUpdateMembers():")
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2023 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.thoughtcrime.securesms.service.webrtc
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Processor which is utilized when the network becomes unavailable during a call link call. In general,
|
|
||||||
* this is triggered whenever there is a call ended, and the ending was not the result of direct user
|
|
||||||
* action.
|
|
||||||
*
|
|
||||||
* This class will check the network status when handlePreJoinCall is invoked, and transition to
|
|
||||||
* [CallLinkPreJoinActionProcessor] as network becomes available again.
|
|
||||||
*/
|
|
||||||
class CallLinkNetworkUnavailableActionProcessor(
|
|
||||||
webRtcInteractor: WebRtcInteractor
|
|
||||||
) : GroupNetworkUnavailableActionProcessor(webRtcInteractor) {
|
|
||||||
override fun createGroupPreJoinActionProcessor(): GroupPreJoinActionProcessor {
|
|
||||||
return CallLinkPreJoinActionProcessor(webRtcInteractor)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -26,8 +26,9 @@ import java.io.IOException
|
|||||||
* Process actions while the user is in the pre-join lobby for the call link.
|
* Process actions while the user is in the pre-join lobby for the call link.
|
||||||
*/
|
*/
|
||||||
class CallLinkPreJoinActionProcessor(
|
class CallLinkPreJoinActionProcessor(
|
||||||
|
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||||
webRtcInteractor: WebRtcInteractor
|
webRtcInteractor: WebRtcInteractor
|
||||||
) : GroupPreJoinActionProcessor(webRtcInteractor) {
|
) : GroupPreJoinActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val TAG = Log.tag(CallLinkPreJoinActionProcessor::class.java)
|
private val TAG = Log.tag(CallLinkPreJoinActionProcessor::class.java)
|
||||||
@@ -98,8 +99,4 @@ class CallLinkPreJoinActionProcessor(
|
|||||||
|
|
||||||
return currentState
|
return currentState
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getGroupNetworkUnavailableActionProcessor(): GroupNetworkUnavailableActionProcessor {
|
|
||||||
return CallLinkNetworkUnavailableActionProcessor(webRtcInteractor)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,8 +38,15 @@ import java.util.Set;
|
|||||||
* and call specific setup information that is the same for any group call state.
|
* and call specific setup information that is the same for any group call state.
|
||||||
*/
|
*/
|
||||||
public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
||||||
public GroupActionProcessor(@NonNull WebRtcInteractor webRtcInteractor, @NonNull String tag) {
|
|
||||||
|
protected MultiPeerActionProcessorFactory actionProcessorFactory;
|
||||||
|
|
||||||
|
public GroupActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory,
|
||||||
|
@NonNull WebRtcInteractor webRtcInteractor,
|
||||||
|
@NonNull String tag)
|
||||||
|
{
|
||||||
super(webRtcInteractor, tag);
|
super(webRtcInteractor, tag);
|
||||||
|
this.actionProcessorFactory = actionProcessorFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected @NonNull WebRtcServiceState handleReceivedOffer(@NonNull WebRtcServiceState currentState,
|
protected @NonNull WebRtcServiceState handleReceivedOffer(@NonNull WebRtcServiceState currentState,
|
||||||
@@ -295,7 +302,7 @@ public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
|||||||
VideoState videoState = currentState.getVideoState();
|
VideoState videoState = currentState.getVideoState();
|
||||||
|
|
||||||
currentState = terminateGroupCall(currentState, false).builder()
|
currentState = terminateGroupCall(currentState, false).builder()
|
||||||
.actionProcessor(getGroupNetworkUnavailableActionProcessor())
|
.actionProcessor(actionProcessorFactory.createNetworkUnavailableActionProcessor(webRtcInteractor))
|
||||||
.changeVideoState()
|
.changeVideoState()
|
||||||
.eglBase(videoState.getLockableEglBase())
|
.eglBase(videoState.getLockableEglBase())
|
||||||
.camera(videoState.getCamera())
|
.camera(videoState.getCamera())
|
||||||
@@ -321,8 +328,4 @@ public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
|||||||
|
|
||||||
return terminateGroupCall(currentState);
|
return terminateGroupCall(currentState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NonNull GroupNetworkUnavailableActionProcessor getGroupNetworkUnavailableActionProcessor() {
|
|
||||||
return new GroupNetworkUnavailableActionProcessor(webRtcInteractor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ public class GroupConnectedActionProcessor extends GroupActionProcessor {
|
|||||||
|
|
||||||
private static final String TAG = Log.tag(GroupConnectedActionProcessor.class);
|
private static final String TAG = Log.tag(GroupConnectedActionProcessor.class);
|
||||||
|
|
||||||
public GroupConnectedActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
public GroupConnectedActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||||
super(webRtcInteractor, TAG);
|
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ public class GroupJoiningActionProcessor extends GroupActionProcessor {
|
|||||||
|
|
||||||
private static final String TAG = Log.tag(GroupJoiningActionProcessor.class);
|
private static final String TAG = Log.tag(GroupJoiningActionProcessor.class);
|
||||||
|
|
||||||
public GroupJoiningActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
public GroupJoiningActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||||
super(webRtcInteractor, TAG);
|
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -94,7 +94,7 @@ public class GroupJoiningActionProcessor extends GroupActionProcessor {
|
|||||||
.commit()
|
.commit()
|
||||||
.changeLocalDeviceState()
|
.changeLocalDeviceState()
|
||||||
.commit()
|
.commit()
|
||||||
.actionProcessor(new GroupConnectedActionProcessor(webRtcInteractor));
|
.actionProcessor(actionProcessorFactory.createConnectedActionProcessor(webRtcInteractor));
|
||||||
|
|
||||||
} else if (device.getJoinState() == GroupCall.JoinState.JOINING) {
|
} else if (device.getJoinState() == GroupCall.JoinState.JOINING) {
|
||||||
builder.changeCallInfoState()
|
builder.changeCallInfoState()
|
||||||
|
|||||||
@@ -26,8 +26,13 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||||||
|
|
||||||
private static final String TAG = Log.tag(GroupNetworkUnavailableActionProcessor.class);
|
private static final String TAG = Log.tag(GroupNetworkUnavailableActionProcessor.class);
|
||||||
|
|
||||||
public GroupNetworkUnavailableActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
private final MultiPeerActionProcessorFactory actionProcessorFactory;
|
||||||
|
|
||||||
|
public GroupNetworkUnavailableActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory,
|
||||||
|
@NonNull WebRtcInteractor webRtcInteractor)
|
||||||
|
{
|
||||||
super(webRtcInteractor, TAG);
|
super(webRtcInteractor, TAG);
|
||||||
|
this.actionProcessorFactory = actionProcessorFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -38,7 +43,7 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||||||
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
||||||
|
|
||||||
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
|
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
|
||||||
GroupPreJoinActionProcessor processor = createGroupPreJoinActionProcessor();
|
GroupPreJoinActionProcessor processor = actionProcessorFactory.createPreJoinActionProcessor(webRtcInteractor);
|
||||||
return processor.handlePreJoinCall(currentState.builder().actionProcessor(processor).build(), remotePeer);
|
return processor.handlePreJoinCall(currentState.builder().actionProcessor(processor).build(), remotePeer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -72,7 +77,7 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||||||
public @NonNull WebRtcServiceState handleNetworkChanged(@NonNull WebRtcServiceState currentState, boolean available) {
|
public @NonNull WebRtcServiceState handleNetworkChanged(@NonNull WebRtcServiceState currentState, boolean available) {
|
||||||
if (available) {
|
if (available) {
|
||||||
return currentState.builder()
|
return currentState.builder()
|
||||||
.actionProcessor(createGroupPreJoinActionProcessor())
|
.actionProcessor(actionProcessorFactory.createPreJoinActionProcessor(webRtcInteractor))
|
||||||
.changeCallInfoState()
|
.changeCallInfoState()
|
||||||
.callState(WebRtcViewModel.State.CALL_PRE_JOIN)
|
.callState(WebRtcViewModel.State.CALL_PRE_JOIN)
|
||||||
.build();
|
.build();
|
||||||
@@ -80,8 +85,4 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||||||
return currentState;
|
return currentState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected @NonNull GroupPreJoinActionProcessor createGroupPreJoinActionProcessor() {
|
|
||||||
return new GroupPreJoinActionProcessor(webRtcInteractor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
|||||||
|
|
||||||
private static final String TAG = Log.tag(GroupPreJoinActionProcessor.class);
|
private static final String TAG = Log.tag(GroupPreJoinActionProcessor.class);
|
||||||
|
|
||||||
public GroupPreJoinActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
public GroupPreJoinActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||||
super(webRtcInteractor, TAG);
|
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -170,7 +170,7 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return currentState.builder()
|
return currentState.builder()
|
||||||
.actionProcessor(new GroupJoiningActionProcessor(webRtcInteractor))
|
.actionProcessor(actionProcessorFactory.createJoiningActionProcessor(webRtcInteractor))
|
||||||
.changeCallInfoState()
|
.changeCallInfoState()
|
||||||
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
||||||
.groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING)
|
.groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING)
|
||||||
@@ -207,7 +207,7 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
|||||||
public @NonNull WebRtcServiceState handleNetworkChanged(@NonNull WebRtcServiceState currentState, boolean available) {
|
public @NonNull WebRtcServiceState handleNetworkChanged(@NonNull WebRtcServiceState currentState, boolean available) {
|
||||||
if (!available) {
|
if (!available) {
|
||||||
return currentState.builder()
|
return currentState.builder()
|
||||||
.actionProcessor(getGroupNetworkUnavailableActionProcessor())
|
.actionProcessor(actionProcessorFactory.createNetworkUnavailableActionProcessor(webRtcInteractor))
|
||||||
.changeCallInfoState()
|
.changeCallInfoState()
|
||||||
.callState(WebRtcViewModel.State.NETWORK_FAILURE)
|
.callState(WebRtcViewModel.State.NETWORK_FAILURE)
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import org.signal.ringrtc.CallException;
|
|||||||
import org.signal.ringrtc.CallManager;
|
import org.signal.ringrtc.CallManager;
|
||||||
import org.signal.ringrtc.PeekInfo;
|
import org.signal.ringrtc.PeekInfo;
|
||||||
import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper;
|
import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper;
|
||||||
import org.thoughtcrime.securesms.database.CallTable;
|
|
||||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||||
import org.thoughtcrime.securesms.events.WebRtcViewModel;
|
import org.thoughtcrime.securesms.events.WebRtcViewModel;
|
||||||
import org.thoughtcrime.securesms.groups.GroupId;
|
import org.thoughtcrime.securesms.groups.GroupId;
|
||||||
@@ -69,9 +68,9 @@ public class IdleActionProcessor extends WebRtcActionProcessor {
|
|||||||
|
|
||||||
final WebRtcActionProcessor processor;
|
final WebRtcActionProcessor processor;
|
||||||
if (remotePeer.getRecipient().isCallLink()) {
|
if (remotePeer.getRecipient().isCallLink()) {
|
||||||
processor = new CallLinkPreJoinActionProcessor(webRtcInteractor);
|
processor = MultiPeerActionProcessorFactory.CallLinkActionProcessorFactory.INSTANCE.createPreJoinActionProcessor(webRtcInteractor);
|
||||||
} else if (remotePeer.getRecipient().isPushV2Group()) {
|
} else if (remotePeer.getRecipient().isPushV2Group()) {
|
||||||
processor = new GroupPreJoinActionProcessor(webRtcInteractor);
|
processor = MultiPeerActionProcessorFactory.GroupActionProcessorFactory.INSTANCE.createPreJoinActionProcessor(webRtcInteractor);
|
||||||
} else {
|
} else {
|
||||||
processor = new PreJoinActionProcessor(webRtcInteractor);
|
processor = new PreJoinActionProcessor(webRtcInteractor);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ public final class IncomingGroupCallActionProcessor extends DeviceAwareActionPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
return currentState.builder()
|
return currentState.builder()
|
||||||
.actionProcessor(new GroupJoiningActionProcessor(webRtcInteractor))
|
.actionProcessor(MultiPeerActionProcessorFactory.GroupActionProcessorFactory.INSTANCE.createJoiningActionProcessor(webRtcInteractor))
|
||||||
.changeCallInfoState()
|
.changeCallInfoState()
|
||||||
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
||||||
.groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING)
|
.groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING)
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2023 Signal Messenger, LLC
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.thoughtcrime.securesms.service.webrtc
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory for generating action processors for call links and groups.
|
||||||
|
*/
|
||||||
|
sealed interface MultiPeerActionProcessorFactory {
|
||||||
|
|
||||||
|
fun createPreJoinActionProcessor(webRtcInteractor: WebRtcInteractor): GroupPreJoinActionProcessor
|
||||||
|
fun createJoiningActionProcessor(webRtcInteractor: WebRtcInteractor): GroupJoiningActionProcessor
|
||||||
|
fun createConnectedActionProcessor(webRtcInteractor: WebRtcInteractor): GroupConnectedActionProcessor
|
||||||
|
|
||||||
|
fun createNetworkUnavailableActionProcessor(webRtcInteractor: WebRtcInteractor): GroupNetworkUnavailableActionProcessor {
|
||||||
|
return GroupNetworkUnavailableActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
|
||||||
|
object GroupActionProcessorFactory : MultiPeerActionProcessorFactory {
|
||||||
|
override fun createPreJoinActionProcessor(webRtcInteractor: WebRtcInteractor): GroupPreJoinActionProcessor {
|
||||||
|
return GroupPreJoinActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJoiningActionProcessor(webRtcInteractor: WebRtcInteractor): GroupJoiningActionProcessor {
|
||||||
|
return GroupJoiningActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createConnectedActionProcessor(webRtcInteractor: WebRtcInteractor): GroupConnectedActionProcessor {
|
||||||
|
return GroupConnectedActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object CallLinkActionProcessorFactory : MultiPeerActionProcessorFactory {
|
||||||
|
override fun createPreJoinActionProcessor(webRtcInteractor: WebRtcInteractor): GroupPreJoinActionProcessor {
|
||||||
|
return CallLinkPreJoinActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createJoiningActionProcessor(webRtcInteractor: WebRtcInteractor): GroupJoiningActionProcessor {
|
||||||
|
return CallLinkJoiningActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun createConnectedActionProcessor(webRtcInteractor: WebRtcInteractor): GroupConnectedActionProcessor {
|
||||||
|
return CallLinkConnectedActionProcessor(this, webRtcInteractor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user