From 4a84fae5657baa50ed1ed6f262079df7d637aa70 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 1 Dec 2020 11:42:33 +0400 Subject: [PATCH 1/3] Fix push to talk --- .../TelegramCallsUI/Sources/PresentationGroupCall.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift index 356b1b4f04..dc4200ed01 100644 --- a/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift +++ b/submodules/TelegramCallsUI/Sources/PresentationGroupCall.swift @@ -757,17 +757,20 @@ public final class PresentationGroupCallImpl: PresentationGroupCall { self.isMutedValue = action self.isMutedPromise.set(self.isMutedValue) let isEffectivelyMuted: Bool + let isVisuallyMuted: Bool switch self.isMutedValue { case let .muted(isPushToTalkActive): - isEffectivelyMuted = true + isEffectivelyMuted = !isPushToTalkActive + isVisuallyMuted = true self.updateMuteState(peerId: self.accountContext.account.peerId, isMuted: true) case .unmuted: isEffectivelyMuted = false + isVisuallyMuted = false self.updateMuteState(peerId: self.accountContext.account.peerId, isMuted: false) } self.callContext?.setIsMuted(isEffectivelyMuted) - if isEffectivelyMuted { + if isVisuallyMuted { self.stateValue.muteState = GroupCallParticipantsContext.Participant.MuteState(canUnmute: true) } else { self.stateValue.muteState = nil From fd53684e29cc59312c63969698d1ab770c8775fe Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 1 Dec 2020 11:42:43 +0400 Subject: [PATCH 2/3] Fix localization --- Telegram/Telegram-iOS/en.lproj/Localizable.strings | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index f381401d7b..b237943877 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -5935,8 +5935,8 @@ Sorry for the inconvenience."; "VoiceChat.Audio" = "audio"; "VoiceChat.Leave" = "leave"; -"VoiceChat.SpeakPermissionEveryone" = "All Members Can Speak"; -"VoiceChat.SpeakPermissionAdmin" = "Only Admins Can Speak"; +"VoiceChat.SpeakPermissionEveryone" = "New participants can speak"; +"VoiceChat.SpeakPermissionAdmin" = "New paricipants are muted"; "VoiceChat.Share" = "Share Invite Link"; "VoiceChat.EndVoiceChat" = "End Voice Chat"; @@ -5974,7 +5974,7 @@ Sorry for the inconvenience."; "VoiceChat.Panel.MembersSpeaking_many" = "%@ members speaking"; "VoiceChat.Panel.MembersSpeaking_any" = "%@ members speaking"; -"ChannelInfo.CreateVoiceChat" = "Create Voice Chat"; +"ChannelInfo.CreateVoiceChat" = "Start Voice Chat"; "VoiceChat.AnonymousDisabledAlertText" = "Sorry, you can't join voice chat as an anonymous admin."; From 9d4482ac1aaccc27f731a434bf4f7e6db9a86d2b Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 1 Dec 2020 13:38:45 +0400 Subject: [PATCH 3/3] Fix push to talk --- .../Sources/VoiceChatController.swift | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift index a22d6d30ee..4631ce10d6 100644 --- a/submodules/TelegramCallsUI/Sources/VoiceChatController.swift +++ b/submodules/TelegramCallsUI/Sources/VoiceChatController.swift @@ -293,6 +293,14 @@ public final class VoiceChatController: ViewController { private var callState: PresentationGroupCallState? + private var effectiveMuteState: GroupCallParticipantsContext.Participant.MuteState? { + if self.pushingToTalk { + return nil + } else { + return self.callState?.muteState + } + } + private var audioOutputStateDisposable: Disposable? private var audioOutputState: ([AudioSessionOutput], AudioSessionOutput?)? @@ -475,7 +483,7 @@ public final class VoiceChatController: ViewController { guard let strongSelf = self else { return } - strongSelf.updateMembers(muteState: strongSelf.callState?.muteState, groupMembers: state.list, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: strongSelf.currentInvitedPeers ?? Set()) + strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: state.list, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: strongSelf.currentInvitedPeers ?? Set()) } }) @@ -485,7 +493,7 @@ public final class VoiceChatController: ViewController { return } if let groupMembers = strongSelf.currentGroupMembers { - strongSelf.updateMembers(muteState: strongSelf.callState?.muteState, groupMembers: groupMembers, callMembers: callMembers.participants, speakingPeers: callMembers.speakingParticipants, invitedPeers: strongSelf.currentInvitedPeers ?? Set()) + strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: groupMembers, callMembers: callMembers.participants, speakingPeers: callMembers.speakingParticipants, invitedPeers: strongSelf.currentInvitedPeers ?? Set()) } else { strongSelf.currentCallMembers = callMembers.participants } @@ -502,7 +510,7 @@ public final class VoiceChatController: ViewController { return } if let groupMembers = strongSelf.currentGroupMembers { - strongSelf.updateMembers(muteState: strongSelf.callState?.muteState, groupMembers: groupMembers, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: invitedPeers) + strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: groupMembers, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: invitedPeers) } else { strongSelf.currentInvitedPeers = invitedPeers } @@ -562,7 +570,7 @@ public final class VoiceChatController: ViewController { } if wasMuted != (state.muteState != nil), let groupMembers = strongSelf.currentGroupMembers { - strongSelf.updateMembers(muteState: state.muteState, groupMembers: groupMembers, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: strongSelf.currentInvitedPeers ?? Set()) + strongSelf.updateMembers(muteState: strongSelf.effectiveMuteState, groupMembers: groupMembers, callMembers: strongSelf.currentCallMembers ?? [], speakingPeers: strongSelf.currentSpeakingPeers ?? Set(), invitedPeers: strongSelf.currentInvitedPeers ?? Set()) } if let (layout, navigationHeight) = strongSelf.validLayout { @@ -802,6 +810,7 @@ public final class VoiceChatController: ViewController { if let (layout, navigationHeight) = self.validLayout { self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring)) } + self.updateMembers(muteState: self.effectiveMuteState, groupMembers: self.currentGroupMembers ?? [], callMembers: self.currentCallMembers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set(), invitedPeers: self.currentInvitedPeers ?? Set()) case .ended, .cancelled: self.hapticFeedback.impact(.veryLight) @@ -816,6 +825,7 @@ public final class VoiceChatController: ViewController { if let (layout, navigationHeight) = self.validLayout { self.containerLayoutUpdated(layout, navigationHeight: navigationHeight, transition: .animated(duration: 0.3, curve: .spring)) } + self.updateMembers(muteState: self.effectiveMuteState, groupMembers: self.currentGroupMembers ?? [], callMembers: self.currentCallMembers ?? [], speakingPeers: self.currentSpeakingPeers ?? Set(), invitedPeers: self.currentInvitedPeers ?? Set()) default: break }