Various fixes

This commit is contained in:
Ilya Laktyushin 2024-06-27 01:36:15 +04:00
parent e163bc76a7
commit 331cb1edc6
3 changed files with 48 additions and 19 deletions

View File

@ -232,7 +232,6 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
private var highlightedItemId: AnyHashable?
private var dismissGestureRecognizer: UIPanGestureRecognizer?
private var dismissingItemId: AnyHashable?
private var dismissingItemOffset: CGFloat?
@ -297,11 +296,10 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
self.scrollView.showsVerticalScrollIndicator = false
self.scrollView.showsHorizontalScrollIndicator = false
let dismissGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.dismissPan(_:)))
dismissGestureRecognizer.delegate = self.wrappedGestureRecognizerDelegate
dismissGestureRecognizer.delaysTouchesBegan = true
self.scrollView.addGestureRecognizer(dismissGestureRecognizer)
self.dismissGestureRecognizer = dismissGestureRecognizer
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.panGesture(_:)))
panGestureRecognizer.delegate = self.wrappedGestureRecognizerDelegate
panGestureRecognizer.delaysTouchesBegan = true
self.scrollView.addGestureRecognizer(panGestureRecognizer)
}
func item(at y: CGFloat) -> Int? {
@ -323,13 +321,35 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
let location = panGesture.location(in: gestureRecognizer.view)
let velocity = panGesture.velocity(in: gestureRecognizer.view)
if abs(velocity.x) > abs(velocity.y), let _ = self.item(at: location.y) {
return true
if let _ = self.item(at: location.y) {
if self.isExpanded {
return abs(velocity.x) > abs(velocity.y)
} else {
return abs(velocity.y) > abs(velocity.x)
}
}
return false
}
@objc func dismissPan(_ gestureRecognizer: UIPanGestureRecognizer) {
@objc func panGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
if self.isExpanded {
self.dismissPanGesture(gestureRecognizer)
} else {
self.expandPanGesture(gestureRecognizer)
}
}
@objc func expandPanGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
let translation = gestureRecognizer.translation(in: self.view)
if translation.y < -10.0 {
gestureRecognizer.isEnabled = false
gestureRecognizer.isEnabled = true
self.expand()
}
}
@objc func dismissPanGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
let scrollView = self.scrollView
switch gestureRecognizer.state {
@ -357,7 +377,8 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
var needsLayout = true
if let itemId = self.dismissingItemId {
if let offset = self.dismissingItemOffset {
if offset < -self.frame.width / 4.0 {
let velocity = gestureRecognizer.velocity(in: self.view)
if offset < -self.frame.width / 3.0 || velocity.x < -300.0 {
self.currentTransition = .dismiss(itemId: itemId)
self.items.removeAll(where: { $0.id == itemId })
@ -449,6 +470,18 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
completion()
})
}
public func expand() {
guard !self.items.isEmpty && !self.isExpanded else {
return
}
if self.items.count == 1, let item = self.items.first {
self.navigationController?.maximizeViewController(item.controller, animated: true)
} else {
self.isExpanded = true
self.requestUpdate(transition: .animated(duration: 0.4, curve: .spring))
}
}
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
guard self.isExpanded else {
@ -569,12 +602,7 @@ public class MinimizedContainerImpl: ASDisplayNode, MinimizedContainer, ASScroll
if self.isExpanded {
self.navigationController?.maximizeViewController(item.controller, animated: true)
} else {
if self.items.count == 1 {
self.navigationController?.maximizeViewController(item.controller, animated: true)
} else {
self.isExpanded = true
self.requestUpdate(transition: .animated(duration: 0.4, curve: .spring))
}
self.expand()
}
}

View File

@ -3754,7 +3754,8 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
let openWebView = {
if source == .menu {
strongSelf.updateChatPresentationInterfaceState(interactive: false) { state in
return state.updatedShowWebView(true).updatedForceInputCommandsHidden(true)
return state.updatedForceInputCommandsHidden(true)
// return state.updatedShowWebView(true).updatedForceInputCommandsHidden(true)
}
let context = strongSelf.context

View File

@ -1743,7 +1743,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate, Ch
self.menuButtonIconNode.enqueueState(.close, animated: false)
} else if case .webView = interfaceState.botMenuButton, let previousShowWebView = previousState?.showWebView, previousShowWebView != interfaceState.showWebView {
if interfaceState.showWebView {
self.menuButtonIconNode.enqueueState(.close, animated: true)
// self.menuButtonIconNode.enqueueState(.close, animated: true)
} else {
self.menuButtonIconNode.enqueueState(.app, animated: true)
}
@ -4536,7 +4536,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate, Ch
}
} else if case let .webView(title, url) = presentationInterfaceState.botMenuButton {
let willShow = !(self.presentationInterfaceState?.showWebView ?? false)
if willShow {
if willShow || "".isEmpty {
self.interfaceInteraction?.openWebView(title, url, false, .menu)
} else {
self.interfaceInteraction?.updateShowWebView { _ in