diff --git a/submodules/TelegramAudio/Sources/ManagedAudioSession.swift b/submodules/TelegramAudio/Sources/ManagedAudioSession.swift index 4b9831dcd3..cc431709c8 100644 --- a/submodules/TelegramAudio/Sources/ManagedAudioSession.swift +++ b/submodules/TelegramAudio/Sources/ManagedAudioSession.swift @@ -413,7 +413,7 @@ public final class ManagedAudioSession { }, deactivate: deactivate) } - public func push(audioSessionType: ManagedAudioSessionType, outputMode: AudioSessionOutputMode = .system, once: Bool = false, manualActivate: @escaping (ManagedAudioSessionControl) -> Void, deactivate: @escaping () -> Signal, headsetConnectionStatusChanged: @escaping (Bool) -> Void = { _ in }, availableOutputsChanged: @escaping ([AudioSessionOutput], AudioSessionOutput?) -> Void = { _, _ in }) -> Disposable { + public func push(audioSessionType: ManagedAudioSessionType, outputMode: AudioSessionOutputMode = .system, once: Bool = false, activateImmediately: Bool = false, manualActivate: @escaping (ManagedAudioSessionControl) -> Void, deactivate: @escaping () -> Signal, headsetConnectionStatusChanged: @escaping (Bool) -> Void = { _ in }, availableOutputsChanged: @escaping ([AudioSessionOutput], AudioSessionOutput?) -> Void = { _, _ in }) -> Disposable { let id = OSAtomicIncrement32(&self.nextId) let queue = self.queue queue.async { @@ -422,7 +422,7 @@ public final class ManagedAudioSession { if let strongSelf = self { for holder in strongSelf.holders { if holder.id == id && holder.active { - strongSelf.setup(type: audioSessionType, outputMode: holder.outputMode, activateNow: false) + strongSelf.setup(type: audioSessionType, outputMode: holder.outputMode, activateNow: activateImmediately) break } } diff --git a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift index 6b0bcba7e5..587eed8c7d 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift @@ -582,7 +582,7 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { self.audioOutputStatePromise.set(.single(([], .speaker))) } - self.audioSessionDisposable = audioSession.push(audioSessionType: .voiceCall, manualActivate: { [weak self] control in + self.audioSessionDisposable = audioSession.push(audioSessionType: .voiceCall, activateImmediately: true, manualActivate: { [weak self] control in Queue.mainQueue().async { if let strongSelf = self { strongSelf.updateSessionState(internalState: strongSelf.internalState, audioSessionControl: control) @@ -1486,14 +1486,14 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { if let ssrc = participant.ssrc { strongSelf.ssrcMapping[ssrc] = participant.peer.id } - - var filteredMuteState = participant.muteState - if isReconnectingAsSpeaker || strongSelf.currentConnectionMode != .rtc { - filteredMuteState = GroupCallParticipantsContext.Participant.MuteState(canUnmute: false, mutedByYou: false) - participant.muteState = filteredMuteState - } if participant.peer.id == strongSelf.joinAsPeerId { + var filteredMuteState = participant.muteState + if isReconnectingAsSpeaker || strongSelf.currentConnectionMode != .rtc { + filteredMuteState = GroupCallParticipantsContext.Participant.MuteState(canUnmute: false, mutedByYou: false) + participant.muteState = filteredMuteState + } + let previousRaisedHand = strongSelf.stateValue.raisedHand if !(strongSelf.stateValue.muteState?.canUnmute ?? false) { strongSelf.stateValue.raisedHand = participant.raiseHandRating != nil diff --git a/submodules/TelegramCore/Sources/GroupCalls.swift b/submodules/TelegramCore/Sources/GroupCalls.swift index a57cded5ed..d098dce1a7 100644 --- a/submodules/TelegramCore/Sources/GroupCalls.swift +++ b/submodules/TelegramCore/Sources/GroupCalls.swift @@ -960,9 +960,6 @@ public final class GroupCallParticipantsContext { let accountPeerId = self.account.peerId return self.statePromise.get() |> map { state -> State in - if state.overlayState.isEmpty { - return state.state - } var publicState = state.state var sortAgain = false let canSeeHands = state.state.isCreator || state.state.adminIds.contains(accountPeerId)