Fix telecom system freeze in poor network.

fork-5.53.8
Cody Henthorne 2022-07-22 13:13:42 -04:00
rodzic 1d6b62d8ca
commit 9bade7ed4b
6 zmienionych plików z 19 dodań i 10 usunięć

Wyświetl plik

@ -47,7 +47,7 @@ class AndroidCallConnectionService : ConnectionService() {
setRinging()
}
AndroidTelecomUtil.connections[recipientId] = connection
ApplicationDependencies.getSignalCallManager().setTelecomApproved(callId)
ApplicationDependencies.getSignalCallManager().setTelecomApproved(callId, recipientId)
return connection
}
@ -80,7 +80,7 @@ class AndroidCallConnectionService : ConnectionService() {
setDialing()
}
AndroidTelecomUtil.connections[recipientId] = connection
ApplicationDependencies.getSignalCallManager().setTelecomApproved(callId)
ApplicationDependencies.getSignalCallManager().setTelecomApproved(callId, recipientId)
return connection
}

Wyświetl plik

@ -141,7 +141,7 @@ object AndroidTelecomUtil {
if (telecomSupported) {
val telecomBundle = bundleOf(
TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE to getPhoneAccountHandle(),
TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE to VideoProfile.STATE_BIDIRECTIONAL,
TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE to if (isVideoCall) VideoProfile.STATE_BIDIRECTIONAL else VideoProfile.STATE_AUDIO_ONLY,
TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS to bundleOf(
AndroidCallConnectionService.KEY_RECIPIENT_ID to recipientId.serialize(),
AndroidCallConnectionService.KEY_CALL_ID to callId,

Wyświetl plik

@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.notifications.DoNotDisturbUtil;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.ringrtc.CallState;
import org.thoughtcrime.securesms.ringrtc.RemotePeer;
import org.thoughtcrime.securesms.service.webrtc.state.CallSetupState;
@ -75,8 +76,8 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor {
}
@Override
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId) {
return proceed(super.handleSetTelecomApproved(currentState, callId));
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId, RecipientId recipientId) {
return proceed(super.handleSetTelecomApproved(currentState, callId, recipientId));
}
private @NonNull WebRtcServiceState proceed(@NonNull WebRtcServiceState currentState) {

Wyświetl plik

@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.events.CallParticipant;
import org.thoughtcrime.securesms.events.WebRtcViewModel;
import org.thoughtcrime.securesms.keyvalue.SignalStore;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
import org.thoughtcrime.securesms.ringrtc.RemotePeer;
import org.thoughtcrime.securesms.service.webrtc.WebRtcData.CallMetadata;
@ -120,8 +121,8 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor {
}
@Override
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId) {
return proceed(super.handleSetTelecomApproved(currentState, callId));
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId, RecipientId recipientId) {
return proceed(super.handleSetTelecomApproved(currentState, callId, recipientId));
}
private @NonNull WebRtcServiceState proceed(@NonNull WebRtcServiceState currentState) {

Wyświetl plik

@ -316,8 +316,8 @@ private void processStateless(@NonNull Function1<WebRtcEphemeralState, WebRtcEph
process((s, p) -> p.handleSetUserAudioDevice(s, desiredDevice));
}
public void setTelecomApproved(long callId) {
process((s, p) -> p.handleSetTelecomApproved(s, callId));
public void setTelecomApproved(long callId, @NonNull RecipientId recipientId) {
process((s, p) -> p.handleSetTelecomApproved(s, callId, recipientId));
}
public void dropCall(long callId) {

Wyświetl plik

@ -256,9 +256,16 @@ public abstract class WebRtcActionProcessor {
return currentState;
}
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId) {
protected @NonNull WebRtcServiceState handleSetTelecomApproved(@NonNull WebRtcServiceState currentState, long callId, RecipientId recipientId) {
Log.i(tag, "handleSetTelecomApproved(): call_id: " + callId);
RemotePeer peer = currentState.getCallInfoState().getPeerByCallId(new CallId(callId));
if (peer == null || !peer.callIdEquals(currentState.getCallInfoState().getActivePeer())) {
Log.w(tag, "Received telecom approval after call terminated. callId: " + callId + " recipient: " + recipientId);
webRtcInteractor.terminateCall(recipientId);
return currentState;
}
currentState = currentState.builder()
.changeCallSetupState(new CallId(callId))
.telecomApproved(true)