kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fix telecom system freeze in poor network.
rodzic
1d6b62d8ca
commit
9bade7ed4b
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
|
|
Ładowanie…
Reference in New Issue