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 {
|
guard let controller = self.controller, let navigationController = controller.navigationController as? NavigationController else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1104,6 +1104,12 @@ public class AttachmentController: ViewController {
|
|||||||
self.hasTextInput = false
|
self.hasTextInput = false
|
||||||
self.requestLayout(transition: .immediate)
|
self.requestLayout(transition: .immediate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func minimizeIfNeeded() {
|
||||||
|
if self.shouldMinimizeOnSwipe?(self.node.currentType) == true {
|
||||||
|
self.node.minimize()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func updateSelectionCount(_ count: Int) {
|
public func updateSelectionCount(_ count: Int) {
|
||||||
self.node.updateSelectionCount(count, animated: false)
|
self.node.updateSelectionCount(count, animated: false)
|
||||||
|
@ -6,7 +6,12 @@ import SwiftSignalKit
|
|||||||
import TelegramPresentationData
|
import TelegramPresentationData
|
||||||
|
|
||||||
final class MinimizedHeaderNode: ASDisplayNode {
|
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
|
let strings: PresentationStrings
|
||||||
|
|
||||||
private let minimizedBackgroundNode: ASDisplayNode
|
private let minimizedBackgroundNode: ASDisplayNode
|
||||||
@ -83,7 +88,7 @@ final class MinimizedHeaderNode: ASDisplayNode {
|
|||||||
self.minimizedTitleNode = ImmediateTextNode()
|
self.minimizedTitleNode = ImmediateTextNode()
|
||||||
|
|
||||||
self.minimizedCloseButton = HighlightableButtonNode()
|
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()
|
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()
|
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
|
let mediaAreasEffectView: StoryItemLoadingEffectView
|
||||||
if let current = self.mediaAreasEffectView {
|
if let current = self.mediaAreasEffectView {
|
||||||
mediaAreasEffectView = current
|
mediaAreasEffectView = current
|
||||||
@ -928,44 +939,14 @@ final class StoryItemContentComponent: Component {
|
|||||||
}
|
}
|
||||||
mediaAreasEffectView.update(size: availableSize, transition: transition)
|
mediaAreasEffectView.update(size: availableSize, transition: transition)
|
||||||
|
|
||||||
let maskLayer: CALayer
|
let maskLayer: MediaAreaMaskLayer
|
||||||
if let current = mediaAreasEffectView.layer.mask {
|
if let current = mediaAreasEffectView.layer.mask as? MediaAreaMaskLayer {
|
||||||
maskLayer = current
|
maskLayer = current
|
||||||
} else {
|
} else {
|
||||||
maskLayer = CALayer()
|
maskLayer = MediaAreaMaskLayer()
|
||||||
mediaAreasEffectView.layer.mask = maskLayer
|
mediaAreasEffectView.layer.mask = maskLayer
|
||||||
}
|
}
|
||||||
|
maskLayer.update(referenceSize: availableSize, mediaAreas: shimmeringMediaAreas, borderMaskLayer: mediaAreasEffectView.borderMaskLayer)
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if let mediaAreasEffectView = self.mediaAreasEffectView {
|
} else if let mediaAreasEffectView = self.mediaAreasEffectView {
|
||||||
self.mediaAreasEffectView = nil
|
self.mediaAreasEffectView = nil
|
||||||
mediaAreasEffectView.removeFromSuperview()
|
mediaAreasEffectView.removeFromSuperview()
|
||||||
|
@ -913,9 +913,6 @@ public final class StoryItemSetContainerComponent: Component {
|
|||||||
@objc private func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
@objc private func tapGesture(_ recognizer: UITapGestureRecognizer) {
|
||||||
if case .ended = recognizer.state, let component = self.component, let itemLayout = self.itemLayout {
|
if case .ended = recognizer.state, let component = self.component, let itemLayout = self.itemLayout {
|
||||||
|
|
||||||
if let _ = self.sendMessageContext.menuController {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if self.displayLikeReactions {
|
if self.displayLikeReactions {
|
||||||
self.displayLikeReactions = false
|
self.displayLikeReactions = false
|
||||||
self.sendMessageContext.currentInputMode = .text
|
self.sendMessageContext.currentInputMode = .text
|
||||||
|
@ -3347,32 +3347,7 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
var actions: [ContextMenuAction] = []
|
var actions: [ContextMenuAction] = []
|
||||||
switch mediaArea {
|
switch mediaArea {
|
||||||
case let .venue(coordinates, venue):
|
case let .venue(coordinates, venue):
|
||||||
let action = { [weak controller, weak view] in
|
let action = { [weak controller] 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 searchController = context.sharedContext.makeStorySearchController(context: context, scope: .location(coordinates: coordinates, venue: venue), listContext: nil)
|
let searchController = context.sharedContext.makeStorySearchController(context: context, scope: .location(coordinates: coordinates, venue: venue), listContext: nil)
|
||||||
controller?.push(searchController)
|
controller?.push(searchController)
|
||||||
}
|
}
|
||||||
@ -3475,12 +3450,16 @@ final class StoryItemSetContainerSendMessage {
|
|||||||
let node = controller.displayNode
|
let node = controller.displayNode
|
||||||
let menuController = makeContextMenuController(actions: actions, blurred: true)
|
let menuController = makeContextMenuController(actions: actions, blurred: true)
|
||||||
menuController.centerHorizontally = 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 {
|
if let self, let view {
|
||||||
self.selectedMediaArea = nil
|
if self.menuController === menuController {
|
||||||
Queue.mainQueue().after(0.1) {
|
self.selectedMediaArea = nil
|
||||||
self.menuController = nil
|
Queue.mainQueue().after(0.1) {
|
||||||
view.updateIsProgressPaused()
|
if self.menuController === menuController {
|
||||||
|
self.menuController = nil
|
||||||
|
view.updateIsProgressPaused()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import ChatListUI
|
|||||||
import StoryContainerScreen
|
import StoryContainerScreen
|
||||||
import ChatMessageNotificationItem
|
import ChatMessageNotificationItem
|
||||||
import PhoneNumberFormat
|
import PhoneNumberFormat
|
||||||
|
import AttachmentUI
|
||||||
|
|
||||||
final class UnauthorizedApplicationContext {
|
final class UnauthorizedApplicationContext {
|
||||||
let sharedContext: SharedAccountContextImpl
|
let sharedContext: SharedAccountContextImpl
|
||||||
@ -436,6 +437,10 @@ final class AuthorizedApplicationContext {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let topContoller = strongSelf.rootController.topViewController as? AttachmentController {
|
||||||
|
topContoller.minimizeIfNeeded()
|
||||||
|
}
|
||||||
|
|
||||||
for controller in strongSelf.rootController.viewControllers {
|
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) {
|
if let controller = controller as? ChatControllerImpl, controller.chatLocation.peerId == chatLocation.peerId, (controller.chatLocation.threadId == nil || controller.chatLocation.threadId == chatLocation.threadId) {
|
||||||
return true
|
return true
|
||||||
|
@ -43,6 +43,10 @@ extension ChatControllerImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func presentAttachmentMenu(subject: AttachMenuSubject) {
|
func presentAttachmentMenu(subject: AttachMenuSubject) {
|
||||||
|
guard self.audioRecorderValue == nil && self.videoRecorderValue == nil else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let context = self.context
|
let context = self.context
|
||||||
let inputIsActive = self.presentationInterfaceState.inputMode == .text
|
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) })
|
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 {
|
if hasSettings {
|
||||||
items.append(.action(ContextMenuActionItem(text: presentationData.strings.WebApp_Settings, icon: { theme in
|
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)
|
return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Settings"), color: theme.contextMenu.primaryColor)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user