diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java index 40bce9636..e3ec3db8d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java @@ -7,6 +7,7 @@ import androidx.annotation.WorkerThread; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.messages.GroupSendUtil; @@ -25,6 +26,7 @@ import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedExcept import java.io.IOException; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * Send a group call update message to every one in a V2 group. Used to indicate you @@ -146,18 +148,25 @@ public class GroupCallUpdateSendJob extends BaseJob { private @NonNull List deliver(@NonNull Recipient conversationRecipient, @NonNull List destinations) throws IOException, UntrustedIdentityException { - SignalServiceDataMessage.Builder dataMessage = SignalServiceDataMessage.newBuilder() - .withTimestamp(System.currentTimeMillis()) - .withGroupCallUpdate(new SignalServiceDataMessage.GroupCallUpdate(eraId)); + SignalServiceDataMessage.Builder dataMessageBuilder = SignalServiceDataMessage.newBuilder() + .withTimestamp(System.currentTimeMillis()) + .withGroupCallUpdate(new SignalServiceDataMessage.GroupCallUpdate(eraId)); - GroupUtil.setDataMessageGroupContext(context, dataMessage, conversationRecipient.requireGroupId().requirePush()); + GroupUtil.setDataMessageGroupContext(context, dataMessageBuilder, conversationRecipient.requireGroupId().requirePush()); - List results = GroupSendUtil.sendUnresendableDataMessage(context, - conversationRecipient.requireGroupId().requireV2(), - destinations, - false, - ContentHint.DEFAULT, - dataMessage.build()); + SignalServiceDataMessage dataMessage = dataMessageBuilder.build(); + List nonSelfDestinations = destinations.stream().filter(r -> !r.isSelf()).collect(Collectors.toList()); + boolean includesSelf = nonSelfDestinations.size() != destinations.size(); + List results = GroupSendUtil.sendUnresendableDataMessage(context, + conversationRecipient.requireGroupId().requireV2(), + nonSelfDestinations, + false, + ContentHint.DEFAULT, + dataMessage); + + if (includesSelf) { + results.add(ApplicationDependencies.getSignalServiceMessageSender().sendSyncMessage(dataMessage)); + } return GroupSendJobHelper.getCompletedSends(destinations, results); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index 34dacfd88..793957796 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -616,7 +616,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall. } try { messageSender.sendCallMessage(RecipientUtil.toSignalServiceAddress(context, recipient), - UnidentifiedAccessUtil.getAccessFor(context, recipient), + recipient.isSelf() ? Optional.absent() : UnidentifiedAccessUtil.getAccessFor(context, recipient), callMessage); } catch (UntrustedIdentityException e) { Log.i(TAG, "sendOpaqueCallMessage onFailure: ", e); @@ -857,11 +857,11 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall. public void updateGroupCallUpdateMessage(@NonNull RecipientId groupId, @Nullable String groupCallEraId, @NonNull Collection joinedMembers, boolean isCallFull) { SignalExecutors.BOUNDED.execute(() -> SignalDatabase.sms().insertOrUpdateGroupCall(groupId, - Recipient.self().getId(), - System.currentTimeMillis(), - groupCallEraId, - joinedMembers, - isCallFull)); + Recipient.self().getId(), + System.currentTimeMillis(), + groupCallEraId, + joinedMembers, + isCallFull)); } public void sendCallMessage(@NonNull final RemotePeer remotePeer,