Hook in Call Links integration via factory.
This commit is contained in:
parent
59435e49c8
commit
bf7aaddbf9
12 changed files with 83 additions and 61 deletions
|
@ -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.
|
||||
*/
|
||||
class CallLinkConnectedActionProcessor(
|
||||
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||
webRtcInteractor: WebRtcInteractor
|
||||
) : GroupConnectedActionProcessor(webRtcInteractor) {
|
||||
override fun getGroupNetworkUnavailableActionProcessor(): GroupNetworkUnavailableActionProcessor {
|
||||
return CallLinkNetworkUnavailableActionProcessor(webRtcInteractor)
|
||||
}
|
||||
) : GroupConnectedActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||
|
||||
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
||||
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.
|
||||
*/
|
||||
class CallLinkJoiningActionProcessor(
|
||||
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||
webRtcInteractor: WebRtcInteractor
|
||||
) : GroupJoiningActionProcessor(webRtcInteractor) {
|
||||
override fun getGroupNetworkUnavailableActionProcessor(): GroupNetworkUnavailableActionProcessor {
|
||||
return CallLinkNetworkUnavailableActionProcessor(webRtcInteractor)
|
||||
}
|
||||
) : GroupJoiningActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||
|
||||
override fun handleGroupRequestUpdateMembers(currentState: WebRtcServiceState): WebRtcServiceState {
|
||||
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.
|
||||
*/
|
||||
class CallLinkPreJoinActionProcessor(
|
||||
actionProcessorFactory: MultiPeerActionProcessorFactory,
|
||||
webRtcInteractor: WebRtcInteractor
|
||||
) : GroupPreJoinActionProcessor(webRtcInteractor) {
|
||||
) : GroupPreJoinActionProcessor(actionProcessorFactory, webRtcInteractor) {
|
||||
|
||||
companion object {
|
||||
private val TAG = Log.tag(CallLinkPreJoinActionProcessor::class.java)
|
||||
|
@ -98,8 +99,4 @@ class CallLinkPreJoinActionProcessor(
|
|||
|
||||
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.
|
||||
*/
|
||||
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);
|
||||
this.actionProcessorFactory = actionProcessorFactory;
|
||||
}
|
||||
|
||||
protected @NonNull WebRtcServiceState handleReceivedOffer(@NonNull WebRtcServiceState currentState,
|
||||
|
@ -295,7 +302,7 @@ public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
|||
VideoState videoState = currentState.getVideoState();
|
||||
|
||||
currentState = terminateGroupCall(currentState, false).builder()
|
||||
.actionProcessor(getGroupNetworkUnavailableActionProcessor())
|
||||
.actionProcessor(actionProcessorFactory.createNetworkUnavailableActionProcessor(webRtcInteractor))
|
||||
.changeVideoState()
|
||||
.eglBase(videoState.getLockableEglBase())
|
||||
.camera(videoState.getCamera())
|
||||
|
@ -321,8 +328,4 @@ public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
|||
|
||||
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);
|
||||
|
||||
public GroupConnectedActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(webRtcInteractor, TAG);
|
||||
public GroupConnectedActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -25,8 +25,8 @@ public class GroupJoiningActionProcessor extends GroupActionProcessor {
|
|||
|
||||
private static final String TAG = Log.tag(GroupJoiningActionProcessor.class);
|
||||
|
||||
public GroupJoiningActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(webRtcInteractor, TAG);
|
||||
public GroupJoiningActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -94,7 +94,7 @@ public class GroupJoiningActionProcessor extends GroupActionProcessor {
|
|||
.commit()
|
||||
.changeLocalDeviceState()
|
||||
.commit()
|
||||
.actionProcessor(new GroupConnectedActionProcessor(webRtcInteractor));
|
||||
.actionProcessor(actionProcessorFactory.createConnectedActionProcessor(webRtcInteractor));
|
||||
|
||||
} else if (device.getJoinState() == GroupCall.JoinState.JOINING) {
|
||||
builder.changeCallInfoState()
|
||||
|
|
|
@ -26,8 +26,13 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||
|
||||
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);
|
||||
this.actionProcessorFactory = actionProcessorFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,7 +43,7 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
|
||||
|
||||
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
|
||||
GroupPreJoinActionProcessor processor = createGroupPreJoinActionProcessor();
|
||||
GroupPreJoinActionProcessor processor = actionProcessorFactory.createPreJoinActionProcessor(webRtcInteractor);
|
||||
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) {
|
||||
if (available) {
|
||||
return currentState.builder()
|
||||
.actionProcessor(createGroupPreJoinActionProcessor())
|
||||
.actionProcessor(actionProcessorFactory.createPreJoinActionProcessor(webRtcInteractor))
|
||||
.changeCallInfoState()
|
||||
.callState(WebRtcViewModel.State.CALL_PRE_JOIN)
|
||||
.build();
|
||||
|
@ -80,8 +85,4 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
|||
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);
|
||||
|
||||
public GroupPreJoinActionProcessor(@NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(webRtcInteractor, TAG);
|
||||
public GroupPreJoinActionProcessor(@NonNull MultiPeerActionProcessorFactory actionProcessorFactory, @NonNull WebRtcInteractor webRtcInteractor) {
|
||||
super(actionProcessorFactory, webRtcInteractor, TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -170,7 +170,7 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
|||
}
|
||||
|
||||
return currentState.builder()
|
||||
.actionProcessor(new GroupJoiningActionProcessor(webRtcInteractor))
|
||||
.actionProcessor(actionProcessorFactory.createJoiningActionProcessor(webRtcInteractor))
|
||||
.changeCallInfoState()
|
||||
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
||||
.groupCallState(WebRtcViewModel.GroupCallState.CONNECTED_AND_JOINING)
|
||||
|
@ -207,7 +207,7 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
|||
public @NonNull WebRtcServiceState handleNetworkChanged(@NonNull WebRtcServiceState currentState, boolean available) {
|
||||
if (!available) {
|
||||
return currentState.builder()
|
||||
.actionProcessor(getGroupNetworkUnavailableActionProcessor())
|
||||
.actionProcessor(actionProcessorFactory.createNetworkUnavailableActionProcessor(webRtcInteractor))
|
||||
.changeCallInfoState()
|
||||
.callState(WebRtcViewModel.State.NETWORK_FAILURE)
|
||||
.build();
|
||||
|
|
|
@ -7,7 +7,6 @@ import org.signal.ringrtc.CallException;
|
|||
import org.signal.ringrtc.CallManager;
|
||||
import org.signal.ringrtc.PeekInfo;
|
||||
import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper;
|
||||
import org.thoughtcrime.securesms.database.CallTable;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.events.WebRtcViewModel;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
|
@ -69,9 +68,9 @@ public class IdleActionProcessor extends WebRtcActionProcessor {
|
|||
|
||||
final WebRtcActionProcessor processor;
|
||||
if (remotePeer.getRecipient().isCallLink()) {
|
||||
processor = new CallLinkPreJoinActionProcessor(webRtcInteractor);
|
||||
processor = MultiPeerActionProcessorFactory.CallLinkActionProcessorFactory.INSTANCE.createPreJoinActionProcessor(webRtcInteractor);
|
||||
} else if (remotePeer.getRecipient().isPushV2Group()) {
|
||||
processor = new GroupPreJoinActionProcessor(webRtcInteractor);
|
||||
processor = MultiPeerActionProcessorFactory.GroupActionProcessorFactory.INSTANCE.createPreJoinActionProcessor(webRtcInteractor);
|
||||
} else {
|
||||
processor = new PreJoinActionProcessor(webRtcInteractor);
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ public final class IncomingGroupCallActionProcessor extends DeviceAwareActionPro
|
|||
}
|
||||
|
||||
return currentState.builder()
|
||||
.actionProcessor(new GroupJoiningActionProcessor(webRtcInteractor))
|
||||
.actionProcessor(MultiPeerActionProcessorFactory.GroupActionProcessorFactory.INSTANCE.createJoiningActionProcessor(webRtcInteractor))
|
||||
.changeCallInfoState()
|
||||
.callState(WebRtcViewModel.State.CALL_OUTGOING)
|
||||
.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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue