Ignore group ring requests if we are already in the call.

main
Cody Henthorne 2022-11-16 11:29:46 -05:00 zatwierdzone przez Alex Hart
rodzic a11c40e4fe
commit fd1d2ec8fc
3 zmienionych plików z 17 dodań i 9 usunięć

Wyświetl plik

@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.signal.ringrtc.CallException; import org.signal.ringrtc.CallException;
import org.signal.ringrtc.CallManager; import org.signal.ringrtc.CallManager;
import org.signal.ringrtc.PeekInfo;
import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper; import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper;
import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.SignalDatabase;
import org.thoughtcrime.securesms.events.WebRtcViewModel; import org.thoughtcrime.securesms.events.WebRtcViewModel;
@ -124,8 +125,8 @@ public class IdleActionProcessor extends WebRtcActionProcessor {
} }
@Override @Override
protected @NonNull WebRtcServiceState handleReceivedGroupCallPeekForRingingCheck(@NonNull WebRtcServiceState currentState, @NonNull GroupCallRingCheckInfo info, long deviceCount) { protected @NonNull WebRtcServiceState handleReceivedGroupCallPeekForRingingCheck(@NonNull WebRtcServiceState currentState, @NonNull GroupCallRingCheckInfo info, @NonNull PeekInfo peekInfo) {
Log.i(tag, "handleReceivedGroupCallPeekForRingingCheck(): recipient: " + info.getRecipientId() + " ring: " + info.getRingId() + " deviceCount: " + deviceCount); Log.i(tag, "handleReceivedGroupCallPeekForRingingCheck(): recipient: " + info.getRecipientId() + " ring: " + info.getRingId());
if (SignalDatabase.groupCallRings().isCancelled(info.getRingId())) { if (SignalDatabase.groupCallRings().isCancelled(info.getRingId())) {
try { try {
@ -137,10 +138,14 @@ public class IdleActionProcessor extends WebRtcActionProcessor {
return currentState; return currentState;
} }
if (deviceCount == 0) { if (peekInfo.getDeviceCount() == 0) {
Log.i(TAG, "No one in the group call, mark as expired and do not ring"); Log.i(TAG, "No one in the group call, mark as expired and do not ring");
SignalDatabase.groupCallRings().insertOrUpdateGroupRing(info.getRingId(), System.currentTimeMillis(), CallManager.RingUpdate.EXPIRED_REQUEST); SignalDatabase.groupCallRings().insertOrUpdateGroupRing(info.getRingId(), System.currentTimeMillis(), CallManager.RingUpdate.EXPIRED_REQUEST);
return currentState; return currentState;
} else if (peekInfo.getJoinedMembers().contains(Recipient.self().requireServiceId().uuid())) {
Log.i(TAG, "We are already in the call, mark accepted on another device and do not ring");
SignalDatabase.groupCallRings().insertOrUpdateGroupRing(info.getRingId(), System.currentTimeMillis(), CallManager.RingUpdate.ACCEPTED_ON_ANOTHER_DEVICE);
return currentState;
} }
currentState = currentState.builder() currentState = currentState.builder()

Wyświetl plik

@ -25,6 +25,7 @@ import org.signal.ringrtc.CallManager;
import org.signal.ringrtc.GroupCall; import org.signal.ringrtc.GroupCall;
import org.signal.ringrtc.HttpHeader; import org.signal.ringrtc.HttpHeader;
import org.signal.ringrtc.NetworkRoute; import org.signal.ringrtc.NetworkRoute;
import org.signal.ringrtc.PeekInfo;
import org.signal.ringrtc.Remote; import org.signal.ringrtc.Remote;
import org.signal.storageservice.protos.groups.GroupExternalCredential; import org.signal.storageservice.protos.groups.GroupExternalCredential;
import org.thoughtcrime.securesms.WebRtcCallActivity; import org.thoughtcrime.securesms.WebRtcCallActivity;
@ -300,8 +301,8 @@ private void processStateless(@NonNull Function1<WebRtcEphemeralState, WebRtcEph
process((s, p) -> p.handleSetRingGroup(s, ringGroup)); process((s, p) -> p.handleSetRingGroup(s, ringGroup));
} }
private void receivedGroupCallPeekForRingingCheck(@NonNull GroupCallRingCheckInfo groupCallRingCheckInfo, long deviceCount) { private void receivedGroupCallPeekForRingingCheck(@NonNull GroupCallRingCheckInfo groupCallRingCheckInfo, @NonNull PeekInfo peekInfo) {
process((s, p) -> p.handleReceivedGroupCallPeekForRingingCheck(s, groupCallRingCheckInfo, deviceCount)); process((s, p) -> p.handleReceivedGroupCallPeekForRingingCheck(s, groupCallRingCheckInfo, peekInfo));
} }
public void onAudioDeviceChanged(@NonNull SignalAudioManager.AudioDevice activeDevice, @NonNull Set<SignalAudioManager.AudioDevice> availableDevices) { public void onAudioDeviceChanged(@NonNull SignalAudioManager.AudioDevice activeDevice, @NonNull Set<SignalAudioManager.AudioDevice> availableDevices) {
@ -379,9 +380,10 @@ private void processStateless(@NonNull Function1<WebRtcEphemeralState, WebRtcEph
.map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())) .map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize()))
.collect(Collectors.toList()); .collect(Collectors.toList());
callManager.peekGroupCall(SignalStore.internalValues().groupCallingServer(), credential.getTokenBytes().toByteArray(), members, peekInfo -> { callManager.peekGroupCall(SignalStore.internalValues().groupCallingServer(),
receivedGroupCallPeekForRingingCheck(info, peekInfo.getDeviceCount()); credential.getTokenBytes().toByteArray(),
}); members,
peekInfo -> receivedGroupCallPeekForRingingCheck(info, peekInfo));
} catch (IOException | VerificationFailedException | CallException e) { } catch (IOException | VerificationFailedException | CallException e) {
Log.e(TAG, "error peeking for ringing check", e); Log.e(TAG, "error peeking for ringing check", e);
} }

Wyświetl plik

@ -17,6 +17,7 @@ import org.signal.ringrtc.CallManager;
import org.signal.ringrtc.CallManager.RingUpdate; import org.signal.ringrtc.CallManager.RingUpdate;
import org.signal.ringrtc.GroupCall; import org.signal.ringrtc.GroupCall;
import org.signal.ringrtc.NetworkRoute; import org.signal.ringrtc.NetworkRoute;
import org.signal.ringrtc.PeekInfo;
import org.thoughtcrime.securesms.components.sensors.Orientation; import org.thoughtcrime.securesms.components.sensors.Orientation;
import org.thoughtcrime.securesms.components.webrtc.BroadcastVideoSink; import org.thoughtcrime.securesms.components.webrtc.BroadcastVideoSink;
import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper; import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper;
@ -810,7 +811,7 @@ public abstract class WebRtcActionProcessor {
return currentState; return currentState;
} }
protected @NonNull WebRtcServiceState handleReceivedGroupCallPeekForRingingCheck(@NonNull WebRtcServiceState currentState, @NonNull GroupCallRingCheckInfo info, long deviceCount) { protected @NonNull WebRtcServiceState handleReceivedGroupCallPeekForRingingCheck(@NonNull WebRtcServiceState currentState, @NonNull GroupCallRingCheckInfo info, @NonNull PeekInfo peekInfo) {
Log.i(tag, "handleReceivedGroupCallPeekForRingingCheck not processed"); Log.i(tag, "handleReceivedGroupCallPeekForRingingCheck not processed");
return currentState; return currentState;