Fix voice chat presentation

This commit is contained in:
Ali 2020-12-04 10:57:42 +00:00
parent 82e1797b78
commit ed7c6e8732
6 changed files with 3749 additions and 3697 deletions

View File

@ -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 (%@)";

View File

@ -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
} }

View File

@ -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)

View File

@ -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 {