mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-19 21:00:10 +00:00
Fix voice chat presentation
This commit is contained in:
parent
82e1797b78
commit
ed7c6e8732
@ -5956,6 +5956,8 @@ Sorry for the inconvenience.";
|
|||||||
"Notification.VoiceChatInvitation" = "%1$@ invited %2$@ to the voice chat";
|
"Notification.VoiceChatInvitation" = "%1$@ invited %2$@ to the voice chat";
|
||||||
"Notification.VoiceChatInvitationForYou" = "%1$@ invited you to the voice chat";
|
"Notification.VoiceChatInvitationForYou" = "%1$@ invited you to the voice chat";
|
||||||
|
|
||||||
|
"VoiceChat.InvitedPeerText" = "You have invited %@ to the voice chat";
|
||||||
|
|
||||||
"Notification.VoiceChatStarted" = "Voice chat started";
|
"Notification.VoiceChatStarted" = "Voice chat started";
|
||||||
"Notification.VoiceChatEnded" = "Voice chat ended (%@)";
|
"Notification.VoiceChatEnded" = "Voice chat ended (%@)";
|
||||||
|
|
||||||
|
|||||||
@ -438,6 +438,12 @@ open class NavigationController: UINavigationController, ContainableController,
|
|||||||
modalContainer = NavigationModalContainer(theme: self.theme, isFlat: navigationLayout.modal[i].isFlat, controllerRemoved: { [weak self] controller in
|
modalContainer = NavigationModalContainer(theme: self.theme, isFlat: navigationLayout.modal[i].isFlat, controllerRemoved: { [weak self] controller in
|
||||||
self?.controllerRemoved(controller)
|
self?.controllerRemoved(controller)
|
||||||
})
|
})
|
||||||
|
modalContainer.container.statusBarStyleUpdated = { [weak self] transition in
|
||||||
|
guard let strongSelf = self else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||||
|
}
|
||||||
self.modalContainers.append(modalContainer)
|
self.modalContainers.append(modalContainer)
|
||||||
if !modalContainer.isReady {
|
if !modalContainer.isReady {
|
||||||
modalContainer.isReadyUpdated = { [weak self, weak modalContainer] in
|
modalContainer.isReadyUpdated = { [weak self, weak modalContainer] in
|
||||||
@ -586,6 +592,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
|||||||
}
|
}
|
||||||
|
|
||||||
var previousModalContainer: NavigationModalContainer?
|
var previousModalContainer: NavigationModalContainer?
|
||||||
|
var topVisibleModalContainerWithStatusBar: NavigationModalContainer?
|
||||||
var visibleModalCount = 0
|
var visibleModalCount = 0
|
||||||
var topModalIsFlat = false
|
var topModalIsFlat = false
|
||||||
let isLandscape = layout.orientation == .landscape
|
let isLandscape = layout.orientation == .landscape
|
||||||
@ -617,7 +624,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
|||||||
}
|
}
|
||||||
|
|
||||||
containerTransition.updateFrame(node: modalContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
|
containerTransition.updateFrame(node: modalContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||||
modalContainer.update(layout: layout, controllers: navigationLayout.modal[i].controllers, coveredByModalTransition: effectiveModalTransition, transition: containerTransition)
|
modalContainer.update(layout: modalContainer.isFlat ? overlayLayout : layout, controllers: navigationLayout.modal[i].controllers, coveredByModalTransition: effectiveModalTransition, transition: containerTransition)
|
||||||
|
|
||||||
if modalContainer.supernode == nil && modalContainer.isReady {
|
if modalContainer.supernode == nil && modalContainer.isReady {
|
||||||
if let previousModalContainer = previousModalContainer {
|
if let previousModalContainer = previousModalContainer {
|
||||||
@ -653,6 +660,23 @@ open class NavigationController: UINavigationController, ContainableController,
|
|||||||
modalContainer.keyboardViewManager = nil
|
modalContainer.keyboardViewManager = nil
|
||||||
modalContainer.canHaveKeyboardFocus = true
|
modalContainer.canHaveKeyboardFocus = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if modalContainer.isFlat {
|
||||||
|
let controllerStatusBarStyle = modalContainer.container.statusBarStyle
|
||||||
|
switch controllerStatusBarStyle {
|
||||||
|
case .Black, .White, .Hide:
|
||||||
|
if topVisibleModalContainerWithStatusBar == nil {
|
||||||
|
topVisibleModalContainerWithStatusBar = modalContainer
|
||||||
|
}
|
||||||
|
if case .Hide = controllerStatusBarStyle {
|
||||||
|
statusBarHidden = true
|
||||||
|
} else {
|
||||||
|
statusBarHidden = false
|
||||||
|
}
|
||||||
|
case .Ignore:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
modalContainer.keyboardViewManager = nil
|
modalContainer.keyboardViewManager = nil
|
||||||
modalContainer.canHaveKeyboardFocus = false
|
modalContainer.canHaveKeyboardFocus = false
|
||||||
@ -921,6 +945,10 @@ open class NavigationController: UINavigationController, ContainableController,
|
|||||||
statusBarStyle = topVisibleOverlayContainerWithStatusBar.controller.statusBar.statusBarStyle
|
statusBarStyle = topVisibleOverlayContainerWithStatusBar.controller.statusBar.statusBarStyle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let topVisibleModalContainerWithStatusBar = topVisibleModalContainerWithStatusBar {
|
||||||
|
statusBarStyle = topVisibleModalContainerWithStatusBar.container.statusBarStyle
|
||||||
|
}
|
||||||
|
|
||||||
if self.currentStatusBarExternalHidden {
|
if self.currentStatusBarExternalHidden {
|
||||||
statusBarHidden = true
|
statusBarHidden = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -372,7 +372,14 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
|
|||||||
topInset += statusBarHeight
|
topInset += statusBarHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
containerLayout = ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(top: 0.0, left: layout.intrinsicInsets.left, bottom: layout.intrinsicInsets.bottom, right: layout.intrinsicInsets.right), safeInsets: UIEdgeInsets(top: 0.0, left: layout.safeInsets.left, bottom: layout.safeInsets.bottom, right: layout.safeInsets.right), statusBarHeight: nil, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)
|
let effectiveStatusBarHeight: CGFloat?
|
||||||
|
if self.isFlat {
|
||||||
|
effectiveStatusBarHeight = layout.statusBarHeight
|
||||||
|
} else {
|
||||||
|
effectiveStatusBarHeight = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
containerLayout = ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(top: 0.0, left: layout.intrinsicInsets.left, bottom: layout.intrinsicInsets.bottom, right: layout.intrinsicInsets.right), safeInsets: UIEdgeInsets(top: 0.0, left: layout.safeInsets.left, bottom: layout.safeInsets.bottom, right: layout.safeInsets.right), statusBarHeight: effectiveStatusBarHeight, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)
|
||||||
let unscaledFrame = CGRect(origin: CGPoint(x: 0.0, y: topInset - coveredByModalTransition * 10.0), size: containerLayout.size)
|
let unscaledFrame = CGRect(origin: CGPoint(x: 0.0, y: topInset - coveredByModalTransition * 10.0), size: containerLayout.size)
|
||||||
let maxScale: CGFloat = (containerLayout.size.width - 16.0 * 2.0) / containerLayout.size.width
|
let maxScale: CGFloat = (containerLayout.size.width - 16.0 * 2.0) / containerLayout.size.width
|
||||||
containerScale = 1.0 * (1.0 - coveredByModalTransition) + maxScale * coveredByModalTransition
|
containerScale = 1.0 * (1.0 - coveredByModalTransition) + maxScale * coveredByModalTransition
|
||||||
@ -410,7 +417,15 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes
|
|||||||
if let inputHeightValue = layout.inputHeight {
|
if let inputHeightValue = layout.inputHeight {
|
||||||
inputHeight = max(0.0, inputHeightValue - (layout.size.height - containerFrame.maxY))
|
inputHeight = max(0.0, inputHeightValue - (layout.size.height - containerFrame.maxY))
|
||||||
}
|
}
|
||||||
containerLayout = ContainerViewLayout(size: containerSize, metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)
|
|
||||||
|
let effectiveStatusBarHeight: CGFloat?
|
||||||
|
if self.isFlat {
|
||||||
|
effectiveStatusBarHeight = layout.statusBarHeight
|
||||||
|
} else {
|
||||||
|
effectiveStatusBarHeight = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
containerLayout = ContainerViewLayout(size: containerSize, metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: effectiveStatusBarHeight, inputHeight: inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)
|
||||||
}
|
}
|
||||||
transition.updateFrameAsPositionAndBounds(node: self.container, frame: containerFrame.offsetBy(dx: 0.0, dy: layout.size.height))
|
transition.updateFrameAsPositionAndBounds(node: self.container, frame: containerFrame.offsetBy(dx: 0.0, dy: layout.size.height))
|
||||||
transition.updateTransformScale(node: self.container, scale: containerScale)
|
transition.updateTransformScale(node: self.container, scale: containerScale)
|
||||||
|
|||||||
@ -556,6 +556,8 @@ public final class VoiceChatController: ViewController {
|
|||||||
if let participant = participant {
|
if let participant = participant {
|
||||||
strongSelf.call.invitePeer(participant.peer.id)
|
strongSelf.call.invitePeer(participant.peer.id)
|
||||||
dismissController?()
|
dismissController?()
|
||||||
|
|
||||||
|
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: participant.peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
} else {
|
} else {
|
||||||
let selfController = strongSelf.controller
|
let selfController = strongSelf.controller
|
||||||
let inviteDisposable = strongSelf.inviteDisposable
|
let inviteDisposable = strongSelf.inviteDisposable
|
||||||
@ -593,6 +595,8 @@ public final class VoiceChatController: ViewController {
|
|||||||
}
|
}
|
||||||
strongSelf.call.invitePeer(peer.id)
|
strongSelf.call.invitePeer(peer.id)
|
||||||
dismissController?()
|
dismissController?()
|
||||||
|
|
||||||
|
strongSelf.controller?.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .invitedToVoiceChat(context: strongSelf.context, peer: peer, text: strongSelf.presentationData.strings.VoiceChat_InvitedPeerText(peer.displayTitle(strings: strongSelf.presentationData.strings, displayOrder: strongSelf.presentationData.nameDisplayOrder)).0), elevatedLayout: false, action: { _ in return false }), in: .current)
|
||||||
}, error: { error in
|
}, error: { error in
|
||||||
dismissController?()
|
dismissController?()
|
||||||
guard let strongSelf = self else {
|
guard let strongSelf = self else {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user