mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
8e8f997021
commit
ed8f1b35e9
@ -567,7 +567,7 @@ public class AttachmentController: ViewController {
|
||||
}
|
||||
}
|
||||
|
||||
private func minimize(damping: CGFloat? = nil, initialVelocity: CGFloat? = nil) {
|
||||
fileprivate func minimize(damping: CGFloat? = nil, initialVelocity: CGFloat? = nil) {
|
||||
guard let controller = self.controller, let navigationController = controller.navigationController as? NavigationController else {
|
||||
return
|
||||
}
|
||||
@ -1104,6 +1104,12 @@ public class AttachmentController: ViewController {
|
||||
self.hasTextInput = false
|
||||
self.requestLayout(transition: .immediate)
|
||||
}
|
||||
|
||||
public func minimizeIfNeeded() {
|
||||
if self.shouldMinimizeOnSwipe?(self.node.currentType) == true {
|
||||
self.node.minimize()
|
||||
}
|
||||
}
|
||||
|
||||
public func updateSelectionCount(_ count: Int) {
|
||||
self.node.updateSelectionCount(count, animated: false)
|
||||
|
@ -6,7 +6,12 @@ import SwiftSignalKit
|
||||
import TelegramPresentationData
|
||||
|
||||
final class MinimizedHeaderNode: ASDisplayNode {
|
||||
var theme: NavigationControllerTheme
|
||||
var theme: NavigationControllerTheme {
|
||||
didSet {
|
||||
self.minimizedBackgroundNode.backgroundColor = self.theme.navigationBar.opaqueBackgroundColor
|
||||
self.minimizedCloseButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Close"), color: self.theme.navigationBar.primaryTextColor), for: .normal)
|
||||
}
|
||||
}
|
||||
let strings: PresentationStrings
|
||||
|
||||
private let minimizedBackgroundNode: ASDisplayNode
|
||||
@ -83,7 +88,7 @@ final class MinimizedHeaderNode: ASDisplayNode {
|
||||
self.minimizedTitleNode = ImmediateTextNode()
|
||||
|
||||
self.minimizedCloseButton = HighlightableButtonNode()
|
||||
self.minimizedCloseButton.setImage(UIImage(bundleImageName: "Instant View/Close"), for: .normal)
|
||||
self.minimizedCloseButton.setImage(generateTintedImage(image: UIImage(bundleImageName: "Instant View/Close"), color: self.theme.navigationBar.primaryTextColor), for: .normal)
|
||||
|
||||
super.init()
|
||||
|
||||
|
@ -0,0 +1,45 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
import Display
|
||||
import TelegramCore
|
||||
|
||||
final class MediaAreaMaskLayer: CALayer {
|
||||
private var params: (referenceSize: CGSize, mediaAreas: [MediaArea])?
|
||||
|
||||
func update(referenceSize: CGSize, mediaAreas: [MediaArea], borderMaskLayer: CALayer?) {
|
||||
guard referenceSize != self.params?.referenceSize && mediaAreas != self.params?.mediaAreas else {
|
||||
return
|
||||
}
|
||||
|
||||
for mediaArea in mediaAreas {
|
||||
let size = CGSize(width: mediaArea.coordinates.width / 100.0 * referenceSize.width, height: mediaArea.coordinates.height / 100.0 * referenceSize.height)
|
||||
let position = CGPoint(x: mediaArea.coordinates.x / 100.0 * referenceSize.width, y: mediaArea.coordinates.y / 100.0 * referenceSize.height)
|
||||
let cornerRadius: CGFloat
|
||||
if let radius = mediaArea.coordinates.cornerRadius {
|
||||
cornerRadius = radius / 100.0 * size.width
|
||||
} else {
|
||||
cornerRadius = size.height * 0.18
|
||||
}
|
||||
|
||||
let layer = CALayer()
|
||||
layer.backgroundColor = UIColor.white.cgColor
|
||||
layer.bounds = CGRect(origin: .zero, size: size)
|
||||
layer.position = position
|
||||
layer.cornerRadius = cornerRadius
|
||||
layer.transform = CATransform3DMakeRotation(mediaArea.coordinates.rotation * Double.pi / 180.0, 0.0, 0.0, 1.0)
|
||||
self.addSublayer(layer)
|
||||
|
||||
if let borderMaskLayer {
|
||||
let borderLayer = CAShapeLayer()
|
||||
borderLayer.strokeColor = UIColor.white.cgColor
|
||||
borderLayer.fillColor = UIColor.clear.cgColor
|
||||
borderLayer.lineWidth = 2.0
|
||||
borderLayer.path = CGPath(roundedRect: CGRect(origin: .zero, size: size), cornerWidth: cornerRadius, cornerHeight: cornerRadius, transform: nil)
|
||||
borderLayer.bounds = CGRect(origin: .zero, size: size)
|
||||
borderLayer.position = position
|
||||
borderLayer.transform = layer.transform
|
||||
borderMaskLayer.addSublayer(borderLayer)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -917,7 +917,18 @@ final class StoryItemContentComponent: Component {
|
||||
mediaAreasEffectView.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
if !component.item.mediaAreas.isEmpty {
|
||||
|
||||
let shimmeringMediaAreas: [MediaArea] = component.item.mediaAreas.filter { mediaArea in
|
||||
if case .link = mediaArea {
|
||||
return true
|
||||
} else if case .venue = mediaArea {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if !shimmeringMediaAreas.isEmpty {
|
||||
let mediaAreasEffectView: StoryItemLoadingEffectView
|
||||
if let current = self.mediaAreasEffectView {
|
||||
mediaAreasEffectView = current
|
||||
@ -928,44 +939,14 @@ final class StoryItemContentComponent: Component {
|
||||
}
|
||||
mediaAreasEffectView.update(size: availableSize, transition: transition)
|
||||
|
||||
let maskLayer: CALayer
|
||||
if let current = mediaAreasEffectView.layer.mask {
|
||||
let maskLayer: MediaAreaMaskLayer
|
||||
if let current = mediaAreasEffectView.layer.mask as? MediaAreaMaskLayer {
|
||||
maskLayer = current
|
||||
} else {
|
||||
maskLayer = CALayer()
|
||||
maskLayer = MediaAreaMaskLayer()
|
||||
mediaAreasEffectView.layer.mask = maskLayer
|
||||
}
|
||||
|
||||
if (maskLayer.sublayers ?? []).isEmpty {
|
||||
let referenceSize = availableSize
|
||||
for mediaArea in component.item.mediaAreas {
|
||||
guard case .venue = mediaArea else {
|
||||
continue
|
||||
}
|
||||
let size = CGSize(width: mediaArea.coordinates.width / 100.0 * referenceSize.width, height: mediaArea.coordinates.height / 100.0 * referenceSize.height)
|
||||
let position = CGPoint(x: mediaArea.coordinates.x / 100.0 * referenceSize.width, y: mediaArea.coordinates.y / 100.0 * referenceSize.height)
|
||||
let cornerRadius = size.height * 0.18
|
||||
|
||||
let layer = CALayer()
|
||||
layer.backgroundColor = UIColor.white.cgColor
|
||||
layer.bounds = CGRect(origin: .zero, size: size)
|
||||
layer.position = position
|
||||
layer.cornerRadius = cornerRadius
|
||||
maskLayer.addSublayer(layer)
|
||||
|
||||
let borderLayer = CAShapeLayer()
|
||||
borderLayer.strokeColor = UIColor.white.cgColor
|
||||
borderLayer.fillColor = UIColor.clear.cgColor
|
||||
borderLayer.lineWidth = 2.0
|
||||
borderLayer.path = CGPath(roundedRect: CGRect(origin: .zero, size: size), cornerWidth: cornerRadius, cornerHeight: cornerRadius, transform: nil)
|
||||
borderLayer.bounds = CGRect(origin: .zero, size: size)
|
||||
borderLayer.position = position
|
||||
mediaAreasEffectView.borderMaskLayer.addSublayer(borderLayer)
|
||||
|
||||
layer.transform = CATransform3DMakeRotation(mediaArea.coordinates.rotation * Double.pi / 180.0, 0.0, 0.0, 1.0)
|
||||
borderLayer.transform = layer.transform
|
||||
}
|
||||
}
|
||||
maskLayer.update(referenceSize: availableSize, mediaAreas: shimmeringMediaAreas, borderMaskLayer: mediaAreasEffectView.borderMaskLayer)
|
||||
} else if let mediaAreasEffectView = self.mediaAreasEffectView {
|
||||
self.mediaAreasEffectView = nil
|
||||
mediaAreasEffectView.removeFromSuperview()
|
||||
|
@ -913,9 +913,6 @@ public final class StoryItemSetContainerComponent: Component {
|
||||
@objc private func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
||||
if case .ended = recognizer.state, let component = self.component, let itemLayout = self.itemLayout {
|
||||
|
||||
if let _ = self.sendMessageContext.menuController {
|
||||
return
|
||||
}
|
||||
if self.displayLikeReactions {
|
||||
self.displayLikeReactions = false
|
||||
self.sendMessageContext.currentInputMode = .text
|
||||
|
@ -3347,32 +3347,7 @@ final class StoryItemSetContainerSendMessage {
|
||||
var actions: [ContextMenuAction] = []
|
||||
switch mediaArea {
|
||||
case let .venue(coordinates, venue):
|
||||
let action = { [weak controller, weak view] in
|
||||
let _ = view
|
||||
/*let subject = EngineMessage(stableId: 0, stableVersion: 0, id: EngineMessage.Id(peerId: PeerId(0), namespace: 0, id: 0), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, threadId: nil, timestamp: 0, flags: [], tags: [], globalTags: [], localTags: [], customTags: [], forwardInfo: nil, author: nil, text: "", attributes: [], media: [.geo(TelegramMediaMap(latitude: venue.latitude, longitude: venue.longitude, heading: nil, accuracyRadius: nil, geoPlace: nil, venue: venue.venue, liveBroadcastingTimeout: nil, liveProximityNotificationRadius: nil))], peers: [:], associatedMessages: [:], associatedMessageIds: [], associatedMedia: [:], associatedThreadInfo: nil, associatedStories: [:])
|
||||
let locationController = LocationViewController(
|
||||
context: context,
|
||||
updatedPresentationData: updatedPresentationData,
|
||||
subject: subject,
|
||||
isStoryLocation: true,
|
||||
params: LocationViewParams(
|
||||
sendLiveLocation: { _ in },
|
||||
stopLiveLocation: { _ in },
|
||||
openUrl: { url in
|
||||
context.sharedContext.applicationBindings.openUrl(url)
|
||||
},
|
||||
openPeer: { _ in }
|
||||
)
|
||||
)
|
||||
view?.updateModalTransitionFactor(1.0, transition: .animated(duration: 0.5, curve: .spring))
|
||||
locationController.dismissed = { [weak view] in
|
||||
view?.updateModalTransitionFactor(0.0, transition: .animated(duration: 0.5, curve: .spring))
|
||||
Queue.mainQueue().after(0.5, {
|
||||
view?.updateIsProgressPaused()
|
||||
})
|
||||
}
|
||||
controller?.push(locationController)*/
|
||||
|
||||
let action = { [weak controller] in
|
||||
let searchController = context.sharedContext.makeStorySearchController(context: context, scope: .location(coordinates: coordinates, venue: venue), listContext: nil)
|
||||
controller?.push(searchController)
|
||||
}
|
||||
@ -3475,12 +3450,16 @@ final class StoryItemSetContainerSendMessage {
|
||||
let node = controller.displayNode
|
||||
let menuController = makeContextMenuController(actions: actions, blurred: true)
|
||||
menuController.centerHorizontally = true
|
||||
menuController.dismissed = { [weak self, weak view] in
|
||||
menuController.dismissed = { [weak self, weak view, weak menuController] in
|
||||
if let self, let view {
|
||||
self.selectedMediaArea = nil
|
||||
Queue.mainQueue().after(0.1) {
|
||||
self.menuController = nil
|
||||
view.updateIsProgressPaused()
|
||||
if self.menuController === menuController {
|
||||
self.selectedMediaArea = nil
|
||||
Queue.mainQueue().after(0.1) {
|
||||
if self.menuController === menuController {
|
||||
self.menuController = nil
|
||||
view.updateIsProgressPaused()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import ChatListUI
|
||||
import StoryContainerScreen
|
||||
import ChatMessageNotificationItem
|
||||
import PhoneNumberFormat
|
||||
import AttachmentUI
|
||||
|
||||
final class UnauthorizedApplicationContext {
|
||||
let sharedContext: SharedAccountContextImpl
|
||||
@ -436,6 +437,10 @@ final class AuthorizedApplicationContext {
|
||||
return false
|
||||
}
|
||||
|
||||
if let topContoller = strongSelf.rootController.topViewController as? AttachmentController {
|
||||
topContoller.minimizeIfNeeded()
|
||||
}
|
||||
|
||||
for controller in strongSelf.rootController.viewControllers {
|
||||
if let controller = controller as? ChatControllerImpl, controller.chatLocation.peerId == chatLocation.peerId, (controller.chatLocation.threadId == nil || controller.chatLocation.threadId == chatLocation.threadId) {
|
||||
return true
|
||||
|
@ -43,6 +43,10 @@ extension ChatControllerImpl {
|
||||
}
|
||||
|
||||
func presentAttachmentMenu(subject: AttachMenuSubject) {
|
||||
guard self.audioRecorderValue == nil && self.videoRecorderValue == nil else {
|
||||
return
|
||||
}
|
||||
|
||||
let context = self.context
|
||||
let inputIsActive = self.presentationInterfaceState.inputMode == .text
|
||||
|
||||
|
@ -1935,16 +1935,6 @@ public final class WebAppController: ViewController, AttachmentContainable {
|
||||
|
||||
let attachMenuBot = attachMenuBots.first(where: { $0.peer.id == botId && !$0.flags.contains(.notActivated) })
|
||||
|
||||
// items.append(.action(ContextMenuActionItem(text: "Minimize", icon: { theme in
|
||||
// return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/HideArchive"), color: theme.contextMenu.primaryColor)
|
||||
// }, action: { [weak self] c, _ in
|
||||
// c?.dismiss(completion: nil)
|
||||
//
|
||||
// if let self, let parentController = self.parentController(), let navigationController = self.getNavigationController() {
|
||||
// navigationController.minimizeViewController(parentController, animated: true)
|
||||
// }
|
||||
// })))
|
||||
|
||||
if hasSettings {
|
||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.WebApp_Settings, icon: { theme in
|
||||
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Settings"), color: theme.contextMenu.primaryColor)
|
||||
|
Loading…
x
Reference in New Issue
Block a user