mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Merge branch 'master' into bazel
This commit is contained in:
@@ -125,8 +125,6 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
private let mode: NavigationControllerMode
|
||||
private var theme: NavigationControllerTheme
|
||||
|
||||
public private(set) weak var overlayPresentingController: ViewController?
|
||||
|
||||
var inCallNavigate: (() -> Void)?
|
||||
private var inCallStatusBar: StatusBar?
|
||||
private var globalScrollToTopNode: ScrollToTopNode?
|
||||
@@ -134,8 +132,11 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
private var rootModalFrame: NavigationModalFrame?
|
||||
private var modalContainers: [NavigationModalContainer] = []
|
||||
private var overlayContainers: [NavigationOverlayContainer] = []
|
||||
|
||||
private var globalOverlayContainers: [NavigationOverlayContainer] = []
|
||||
private var globalOverlayContainerParent: GlobalOverlayContainerParent?
|
||||
public var globalOverlayControllersUpdated: (() -> Void)?
|
||||
|
||||
private var validLayout: ContainerViewLayout?
|
||||
private var validStatusBarStyle: NavigationStatusBarStyle?
|
||||
private var validStatusBarHidden: Bool = false
|
||||
@@ -190,6 +191,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
var keyboardViewManager: KeyboardViewManager?
|
||||
|
||||
var updateSupportedOrientations: (() -> Void)?
|
||||
|
||||
public func updateMasterDetailsBlackout(_ blackout: MasterDetailLayoutBlackout?, transition: ContainedViewLayoutTransition) {
|
||||
self.masterDetailsBlackout = blackout
|
||||
if isViewLoaded {
|
||||
@@ -268,6 +271,18 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
return true
|
||||
}
|
||||
}
|
||||
if let rootContainer = self.rootContainer {
|
||||
switch rootContainer {
|
||||
case let .flat(container):
|
||||
if container.hasNonReadyControllers() {
|
||||
return true
|
||||
}
|
||||
case let .split(splitContainer):
|
||||
if splitContainer.hasNonReadyControllers() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -448,6 +463,9 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
|
||||
var topVisibleOverlayContainerWithStatusBar: NavigationOverlayContainer?
|
||||
|
||||
var notifyGlobalOverlayControllersUpdated = false
|
||||
|
||||
var modalStyleOverlayTransitionFactor: CGFloat = 0.0
|
||||
var previousGlobalOverlayContainer: NavigationOverlayContainer?
|
||||
for i in (0 ..< self.globalOverlayContainers.count).reversed() {
|
||||
let overlayContainer = self.globalOverlayContainers[i]
|
||||
@@ -462,6 +480,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
containerTransition.updateFrame(node: overlayContainer, frame: CGRect(origin: CGPoint(), size: overlayLayout.size))
|
||||
overlayContainer.update(layout: overlayLayout, transition: containerTransition)
|
||||
|
||||
modalStyleOverlayTransitionFactor = max(modalStyleOverlayTransitionFactor, overlayContainer.controller.modalStyleOverlayTransitionFactor)
|
||||
|
||||
if overlayContainer.supernode == nil && overlayContainer.isReady {
|
||||
if let previousGlobalOverlayContainer = previousGlobalOverlayContainer {
|
||||
self.globalOverlayContainerParent?.insertSubnode(overlayContainer, belowSubnode: previousGlobalOverlayContainer)
|
||||
@@ -469,6 +489,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self.globalOverlayContainerParent?.addSubnode(overlayContainer)
|
||||
}
|
||||
overlayContainer.transitionIn()
|
||||
notifyGlobalOverlayControllersUpdated = true
|
||||
}
|
||||
|
||||
if overlayContainer.supernode != nil {
|
||||
@@ -504,6 +525,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
containerTransition.updateFrame(node: overlayContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
overlayContainer.update(layout: layout, transition: containerTransition)
|
||||
|
||||
modalStyleOverlayTransitionFactor = max(modalStyleOverlayTransitionFactor, overlayContainer.controller.modalStyleOverlayTransitionFactor)
|
||||
|
||||
if overlayContainer.supernode == nil && overlayContainer.isReady {
|
||||
if let previousOverlayContainer = previousOverlayContainer {
|
||||
self.displayNode.insertSubnode(overlayContainer, belowSubnode: previousOverlayContainer)
|
||||
@@ -740,12 +763,14 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
}
|
||||
|
||||
topModalDismissProgress = max(topModalDismissProgress, modalStyleOverlayTransitionFactor)
|
||||
|
||||
switch layout.metrics.widthClass {
|
||||
case .compact:
|
||||
if visibleModalCount != 0 {
|
||||
if visibleModalCount != 0 || !modalStyleOverlayTransitionFactor.isZero {
|
||||
let effectiveRootModalDismissProgress: CGFloat
|
||||
let visibleRootModalDismissProgress: CGFloat
|
||||
let additionalModalFrameProgress: CGFloat
|
||||
var additionalModalFrameProgress: CGFloat
|
||||
if visibleModalCount == 1 {
|
||||
effectiveRootModalDismissProgress = topModalIsFlat ? 1.0 : topModalDismissProgress
|
||||
visibleRootModalDismissProgress = effectiveRootModalDismissProgress
|
||||
@@ -755,9 +780,13 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
visibleRootModalDismissProgress = topModalDismissProgress
|
||||
additionalModalFrameProgress = 1.0 - topModalDismissProgress
|
||||
} else {
|
||||
effectiveRootModalDismissProgress = 0.0
|
||||
effectiveRootModalDismissProgress = 1.0 - modalStyleOverlayTransitionFactor
|
||||
visibleRootModalDismissProgress = effectiveRootModalDismissProgress
|
||||
additionalModalFrameProgress = 1.0
|
||||
if visibleModalCount == 0 {
|
||||
additionalModalFrameProgress = 0.0
|
||||
} else {
|
||||
additionalModalFrameProgress = 1.0
|
||||
}
|
||||
}
|
||||
|
||||
let rootModalFrame: NavigationModalFrame
|
||||
@@ -813,7 +842,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
if topModalIsFlat {
|
||||
maxScale = 1.0
|
||||
maxOffset = 0.0
|
||||
} else if visibleModalCount == 1 {
|
||||
} else if visibleModalCount <= 1 {
|
||||
maxScale = (layout.size.width - 16.0 * 2.0) / layout.size.width
|
||||
maxOffset = (topInset - (layout.size.height - layout.size.height * maxScale) / 2.0)
|
||||
} else {
|
||||
@@ -823,7 +852,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
|
||||
let scale = 1.0 * visibleRootModalDismissProgress + (1.0 - visibleRootModalDismissProgress) * maxScale
|
||||
let offset = (1.0 - visibleRootModalDismissProgress) * maxOffset
|
||||
transition.updateSublayerTransformScaleAndOffset(node: rootContainerNode, scale: scale, offset: CGPoint(x: 0.0, y: offset))
|
||||
transition.updateSublayerTransformScaleAndOffset(node: rootContainerNode, scale: scale, offset: CGPoint(x: 0.0, y: offset), beginWithCurrentState: true)
|
||||
}
|
||||
} else {
|
||||
if let rootModalFrame = self.rootModalFrame {
|
||||
@@ -906,6 +935,12 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
|
||||
self.isUpdatingContainers = false
|
||||
|
||||
if notifyGlobalOverlayControllersUpdated {
|
||||
self.globalOverlayControllersUpdated?()
|
||||
}
|
||||
|
||||
self.updateSupportedOrientations?()
|
||||
}
|
||||
|
||||
private func controllerRemoved(_ controller: ViewController) {
|
||||
@@ -975,27 +1010,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
|
||||
public func pushViewController(_ controller: ViewController, animated: Bool = true, completion: @escaping () -> Void) {
|
||||
let navigateAction: () -> Void = { [weak self] in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
|
||||
if !controller.hasActiveInput {
|
||||
//strongSelf.view.endEditing(true)
|
||||
}
|
||||
/*strongSelf.scheduleAfterLayout({
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}*/
|
||||
strongSelf.pushViewController(controller, animated: animated)
|
||||
completion()
|
||||
//})
|
||||
}
|
||||
|
||||
/*if let lastController = self.viewControllers.last as? ViewController, !lastController.attemptNavigation(navigateAction) {
|
||||
} else {*/
|
||||
navigateAction()
|
||||
//}
|
||||
self.pushViewController(controller, animated: animated)
|
||||
completion()
|
||||
}
|
||||
|
||||
open override func pushViewController(_ viewController: UIViewController, animated: Bool) {
|
||||
@@ -1117,6 +1133,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
if overlayContainer.controller === controller {
|
||||
overlayContainer.removeFromSupernode()
|
||||
strongSelf.globalOverlayContainers.remove(at: i)
|
||||
strongSelf.globalOverlayControllersUpdated?()
|
||||
break
|
||||
}
|
||||
}
|
||||
@@ -1136,6 +1153,11 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
return
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
}, modalStyleOverlayTransitionFactorUpdated: { [weak self] transition in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
})
|
||||
if inGlobal {
|
||||
self.globalOverlayContainers.append(container)
|
||||
@@ -1273,4 +1295,24 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public var overlayControllers: [ViewController] {
|
||||
return self.overlayContainers.compactMap { container in
|
||||
if container.isReady {
|
||||
return container.controller
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public var globalOverlayControllers: [ViewController] {
|
||||
return self.globalOverlayContainers.compactMap { container in
|
||||
if container.isReady {
|
||||
return container.controller
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user