From 362e43a2d2f1be23afdb45bafe387af08a7bcb7e Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 29 Nov 2021 19:13:33 +0400 Subject: [PATCH 1/4] Various Fixes --- .../Sources/AuthTransferScanScreen.swift | 8 +++++--- submodules/TelegramUI/Sources/ChatTextInputMenu.swift | 10 ++++++++++ .../TelegramUI/Sources/ChatTextInputPanelNode.swift | 3 +-- .../Sources/PeerSelectionTextInputPanelNode.swift | 3 +-- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift b/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift index 63d63bc84a..33a9c6af0e 100644 --- a/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift +++ b/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift @@ -504,15 +504,17 @@ private final class AuthTransferScanScreenNode: ViewControllerTracingNode, UIScr let titleSize = self.titleNode.updateLayout(CGSize(width: layout.size.width - 16.0, height: layout.size.height)) let textSize = self.textNode.updateLayout(CGSize(width: layout.size.width - 16.0, height: layout.size.height)) let errorTextSize = self.errorTextNode.updateLayout(CGSize(width: layout.size.width - 16.0, height: layout.size.height)) - let textFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - textSize.width) / 2.0), y: min(dimHeight - textSize.height - titleSpacing, navigationHeight + floorToScreenPixels((dimHeight - navigationHeight - textSize.height) / 2.0) + 5.0)), size: textSize) + var textFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - textSize.width) / 2.0), y: max(dimHeight - textSize.height - titleSpacing, navigationHeight + floorToScreenPixels((dimHeight - navigationHeight - textSize.height) / 2.0) + 5.0)), size: textSize) let titleFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - titleSize.width) / 2.0), y: textFrame.minY - 18.0 - titleSize.height), size: titleSize) - var errorTextFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - errorTextSize.width) / 2.0), y: dimHeight + frameSide + 48.0), size: errorTextSize) - errorTextFrame.origin.y += floor(additionalTorchOffset / 2.0) if titleFrame.minY < navigationHeight { transition.updateAlpha(node: self.titleNode, alpha: 0.0) + textFrame = textFrame.offsetBy(dx: 0.0, dy: -5.0) } else { transition.updateAlpha(node: self.titleNode, alpha: controlsAlpha) } + var errorTextFrame = CGRect(origin: CGPoint(x: floor((layout.size.width - errorTextSize.width) / 2.0), y: dimHeight + frameSide + 48.0), size: errorTextSize) + errorTextFrame.origin.y += floor(additionalTorchOffset / 2.0) + transition.updateFrameAdditive(node: self.titleNode, frame: titleFrame) transition.updateFrameAdditive(node: self.textNode, frame: textFrame) transition.updateFrameAdditive(node: self.errorTextNode, frame: errorTextFrame) diff --git a/submodules/TelegramUI/Sources/ChatTextInputMenu.swift b/submodules/TelegramUI/Sources/ChatTextInputMenu.swift index 0db7a756ca..75efd13155 100644 --- a/submodules/TelegramUI/Sources/ChatTextInputMenu.swift +++ b/submodules/TelegramUI/Sources/ChatTextInputMenu.swift @@ -89,4 +89,14 @@ final class ChatTextInputMenu { self.state = .general } } + + func hide() { + self.back() + if #available(iOS 13.0, *) { + UIMenuController.shared.hideMenu() + } else { + UIMenuController.shared.isMenuVisible = false + } + UIMenuController.shared.update() + } } diff --git a/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift index 57e3745aad..f1dae67d4e 100644 --- a/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatTextInputPanelNode.swift @@ -2048,8 +2048,7 @@ class ChatTextInputPanelNode: ChatInputPanelNode, ASEditableTextNodeDelegate { if let textInputNode = self.textInputNode, let presentationInterfaceState = self.presentationInterfaceState { if case .format = self.inputMenu.state { - self.inputMenu.deactivate() - UIMenuController.shared.update() + self.inputMenu.hide() } let baseFontSize = max(minInputFontSize, presentationInterfaceState.fontSize.baseDisplaySize) diff --git a/submodules/TelegramUI/Sources/PeerSelectionTextInputPanelNode.swift b/submodules/TelegramUI/Sources/PeerSelectionTextInputPanelNode.swift index d9b2d34536..8272112c34 100644 --- a/submodules/TelegramUI/Sources/PeerSelectionTextInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/PeerSelectionTextInputPanelNode.swift @@ -829,8 +829,7 @@ class PeerSelectionTextInputPanelNode: ChatInputPanelNode, TGCaptionPanelView, A if let textInputNode = self.textInputNode, let presentationInterfaceState = self.presentationInterfaceState { if case .format = self.inputMenu.state { - self.inputMenu.deactivate() - UIMenuController.shared.update() + self.inputMenu.hide() } let baseFontSize = max(minInputFontSize, presentationInterfaceState.fontSize.baseDisplaySize) From dfa08bac4287af8efa50b941d555d4b62cd317dc Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 29 Nov 2021 22:18:16 +0400 Subject: [PATCH 2/4] Fix request is channel flag --- .../TelegramCore/Sources/Settings/PeerContactSettings.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/TelegramCore/Sources/Settings/PeerContactSettings.swift b/submodules/TelegramCore/Sources/Settings/PeerContactSettings.swift index cc832eb3cb..3182f41a13 100644 --- a/submodules/TelegramCore/Sources/Settings/PeerContactSettings.swift +++ b/submodules/TelegramCore/Sources/Settings/PeerContactSettings.swift @@ -32,7 +32,7 @@ extension PeerStatusSettings { if (flags & (1 << 8)) != 0 { result.insert(.suggestAddMembers) } - self = PeerStatusSettings(flags: result, geoDistance: geoDistance, requestChatTitle: requestChatTitle, requestChatDate: requestChatDate, requestChatIsChannel: (flags & (1 << 9)) != 0) + self = PeerStatusSettings(flags: result, geoDistance: geoDistance, requestChatTitle: requestChatTitle, requestChatDate: requestChatDate, requestChatIsChannel: (flags & (1 << 10)) != 0) } } } From 3c1b4e1b1554ea58bc42b5376a690c3c9a342fff Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 30 Nov 2021 20:09:32 +0400 Subject: [PATCH 3/4] Various Improvements --- .../Telegram-iOS/Resources/TestFireworks.tgs | Bin 60630 -> 0 bytes .../Telegram-iOS/Resources/TestHearts.tgs | Bin 64609 -> 0 bytes .../Telegram-iOS/Resources/TestHearts2.tgs | Bin 65392 -> 0 bytes .../Telegram-iOS/en.lproj/Localizable.strings | 6 + .../Sources/CallListController.swift | 45 ++++- .../Sources/ContactsController.swift | 107 +++++++--- submodules/Display/Source/NavigationBar.swift | 12 +- .../Display/Source/NavigationBarBadge.swift | 11 +- .../Display/Source/NavigationButtonNode.swift | 20 +- .../Sources/GalleryControllerNode.swift | 10 +- .../Sources/Items/ChatImageGalleryItem.swift | 42 +++- .../Contact List/Contents.json | 6 +- .../Contact List/Context Menu/Contents.json | 9 + .../PeopleNearby.imageset/Contents.json | 12 ++ .../peoplenearbyon_24.pdf | 145 ++++++++++++++ .../TelegramUI/Sources/ChatBotInfoItem.swift | 2 +- .../TelegramUI/Sources/ChatController.swift | 25 +++ .../Sources/ChatControllerInteraction.swift | 4 + .../ChatMessageBubbleContentNode.swift | 1 + .../Sources/ChatMessageBubbleItemNode.swift | 10 +- .../ChatMessageTextBubbleContentNode.swift | 18 +- .../ChatRecentActionsControllerNode.swift | 1 + .../Sources/DrawingStickersScreen.swift | 1 + .../Sources/LargeEmojiActionSheetItem.swift | 185 ++++++++++++++++++ .../OverlayAudioPlayerControllerNode.swift | 1 + .../PeerInfoScreenLabeledValueItem.swift | 33 +++- .../Sources/PeerInfo/PeerInfoScreen.swift | 1 + .../Sources/SharedAccountContext.swift | 1 + 28 files changed, 655 insertions(+), 53 deletions(-) delete mode 100644 Telegram/Telegram-iOS/Resources/TestFireworks.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/TestHearts.tgs delete mode 100644 Telegram/Telegram-iOS/Resources/TestHearts2.tgs create mode 100644 submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/peoplenearbyon_24.pdf create mode 100644 submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift diff --git a/Telegram/Telegram-iOS/Resources/TestFireworks.tgs b/Telegram/Telegram-iOS/Resources/TestFireworks.tgs deleted file mode 100644 index c0ca7bf61fa5e2615048a8e46cf232944031f654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60630 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 S;Myzk8IF0ap^Rk=8t`A5MnT~K diff --git a/Telegram/Telegram-iOS/Resources/TestHearts.tgs b/Telegram/Telegram-iOS/Resources/TestHearts.tgs deleted file mode 100644 index 3addc12a203dc2e3ce7fccea8b138306a88965dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64609 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%0DHje}`0 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 z%0Dy@L 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 PjjpP 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ν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 ContextControllerTakeViewInfo? { + return ContextControllerTakeViewInfo(contentContainingNode: self.sourceNode, contentAreaInScreenSpace: UIScreen.main.bounds) + } + + func putBack() -> ContextControllerPutBackViewInfo? { + return ContextControllerPutBackViewInfo(contentAreaInScreenSpace: UIScreen.main.bounds) + } } diff --git a/submodules/ContactListUI/Sources/ContactsController.swift b/submodules/ContactListUI/Sources/ContactsController.swift index 1a09f5b662..94b4324e24 100644 --- a/submodules/ContactListUI/Sources/ContactsController.swift +++ b/submodules/ContactListUI/Sources/ContactsController.swift @@ -17,6 +17,7 @@ import SearchUI import TelegramPermissionsUI import AppBundle import StickerResources +import ContextUI private func fixListNodeScrolling(_ listNode: ListView, searchNode: NavigationBarSearchContentNode) -> Bool { if searchNode.expansionProgress > 0.0 && searchNode.expansionProgress < 1.0 { @@ -100,6 +101,8 @@ public class ContactsController: ViewController { super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData)) + self.tabBarItemContextActionType = .always + self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style self.title = self.presentationData.strings.Contacts_Title @@ -311,11 +314,13 @@ public class ContactsController: ViewController { let presentPeersNearby = { let controller = strongSelf.context.sharedContext.makePeersNearbyController(context: strongSelf.context) controller.navigationPresentation = .master - (strongSelf.navigationController as? NavigationController)?.pushViewController(controller, animated: true, completion: { [weak self] in - if let strongSelf = self { - strongSelf.contactsNode.contactListNode.listNode.clearHighlightAnimated(true) - } - }) + if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController { + navigationController.pushViewController(controller, animated: true, completion: { [weak self] in + if let strongSelf = self { + strongSelf.contactsNode.contactListNode.listNode.clearHighlightAnimated(true) + } + }) + } } switch status { @@ -332,11 +337,13 @@ public class ContactsController: ViewController { let _ = (strongSelf.navigationController as? NavigationController)?.popViewController(animated: true) } } - (strongSelf.navigationController as? NavigationController)?.pushViewController(controller, completion: { [weak self] in - if let strongSelf = self { - strongSelf.contactsNode.contactListNode.listNode.clearHighlightAnimated(true) - } - }) + if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController { + navigationController.pushViewController(controller, completion: { [weak self] in + if let strongSelf = self { + strongSelf.contactsNode.contactListNode.listNode.clearHighlightAnimated(true) + } + }) + } } }) } @@ -480,20 +487,26 @@ public class ContactsController: ViewController { switch status { case .allowed: let contactData = DeviceContactExtendedData(basicData: DeviceContactBasicData(firstName: "", lastName: "", phoneNumbers: [DeviceContactPhoneNumberData(label: "_$!!$_", value: "+")]), middleName: "", prefix: "", suffix: "", organization: "", jobTitle: "", department: "", emailAddresses: [], urls: [], addresses: [], birthdayDate: nil, socialProfiles: [], instantMessagingProfiles: [], note: "") - (strongSelf.navigationController as? NavigationController)?.pushViewController(strongSelf.context.sharedContext.makeDeviceContactInfoController(context: strongSelf.context, subject: .create(peer: nil, contactData: contactData, isSharing: false, shareViaException: false, completion: { peer, stableId, contactData in - guard let strongSelf = self else { - return - } - if let peer = peer { - DispatchQueue.main.async { - if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, updatedPresentationData: nil, peer: peer, mode: .generic, avatarInitiallyExpanded: false, fromChat: false, requestsContext: nil) { - (strongSelf.navigationController as? NavigationController)?.pushViewController(infoController) + if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController { + navigationController.pushViewController(strongSelf.context.sharedContext.makeDeviceContactInfoController(context: strongSelf.context, subject: .create(peer: nil, contactData: contactData, isSharing: false, shareViaException: false, completion: { peer, stableId, contactData in + guard let strongSelf = self else { + return + } + if let peer = peer { + DispatchQueue.main.async { + if let infoController = strongSelf.context.sharedContext.makePeerInfoController(context: strongSelf.context, updatedPresentationData: nil, peer: peer, mode: .generic, avatarInitiallyExpanded: false, fromChat: false, requestsContext: nil) { + if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController { + navigationController.pushViewController(infoController) + } + } + } + } else { + if let navigationController = strongSelf.context.sharedContext.mainWindow?.viewController as? NavigationController { + navigationController.pushViewController(strongSelf.context.sharedContext.makeDeviceContactInfoController(context: strongSelf.context, subject: .vcard(nil, stableId, contactData), completed: nil, cancelled: nil)) } } - } else { - (strongSelf.navigationController as? NavigationController)?.pushViewController(strongSelf.context.sharedContext.makeDeviceContactInfoController(context: strongSelf.context, subject: .vcard(nil, stableId, contactData), completed: nil, cancelled: nil)) - } - }), completed: nil, cancelled: nil)) + }), completed: nil, cancelled: nil)) + } case .notDetermined: DeviceAccess.authorizeAccess(to: .contacts) default: @@ -504,4 +517,54 @@ public class ContactsController: ViewController { } }) } + + override public func tabBarItemContextAction(sourceNode: ContextExtractedContentContainingNode, gesture: ContextGesture) { + var items: [ContextMenuItem] = [] + items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Contacts_AddContact, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/AddUser"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] c, f in + c.dismiss(completion: { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.addPressed() + }) + }))) + + items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.Contacts_AddPeopleNearby, icon: { theme in + return generateTintedImage(image: UIImage(bundleImageName: "Contact List/Context Menu/PeopleNearby"), color: theme.contextMenu.primaryColor) + }, action: { [weak self] c, f in + c.dismiss(completion: { [weak self] in + guard let strongSelf = self else { + return + } + strongSelf.contactsNode.openPeopleNearby?() + }) + }))) + + let controller = ContextController(account: self.context.account, presentationData: self.presentationData, source: .extracted(ContactsTabBarContextExtractedContentSource(controller: self, sourceNode: sourceNode)), items: .single(ContextController.Items(items: items)), recognizer: nil, gesture: gesture) + self.context.sharedContext.mainWindow?.presentInGlobalOverlay(controller) + } +} + +private final class ContactsTabBarContextExtractedContentSource: ContextExtractedContentSource { + let keepInPlace: Bool = true + let ignoreContentTouches: Bool = true + let blurBackground: Bool = true + + private let controller: ViewController + private let sourceNode: ContextExtractedContentContainingNode + + init(controller: ViewController, sourceNode: ContextExtractedContentContainingNode) { + self.controller = controller + self.sourceNode = sourceNode + } + + func takeView() -> ContextControllerTakeViewInfo? { + return ContextControllerTakeViewInfo(contentContainingNode: self.sourceNode, contentAreaInScreenSpace: UIScreen.main.bounds) + } + + func putBack() -> ContextControllerPutBackViewInfo? { + return ContextControllerPutBackViewInfo(contentAreaInScreenSpace: UIScreen.main.bounds) + } } diff --git a/submodules/Display/Source/NavigationBar.swift b/submodules/Display/Source/NavigationBar.swift index 0e228969c3..ede32ea4d5 100644 --- a/submodules/Display/Source/NavigationBar.swift +++ b/submodules/Display/Source/NavigationBar.swift @@ -550,6 +550,7 @@ open class NavigationBar: ASDisplayNode { if self.badgeNode.text != actualText { self.badgeNode.text = actualText self.badgeNode.isHidden = actualText.isEmpty + self.backButtonNode.manualAlpha = self.badgeNode.isHidden ? 1.0 : 0.0 self.invalidateCalculatedLayout() self.requestLayout() @@ -835,7 +836,7 @@ open class NavigationBar: ASDisplayNode { self.titleNode.accessibilityTraits = .header self.backButtonNode = NavigationButtonNode() - self.badgeNode = NavigationBarBadgeNode(fillColor: self.presentationData.theme.badgeBackgroundColor, strokeColor: self.presentationData.theme.badgeStrokeColor, textColor: self.presentationData.theme.badgeTextColor) + self.badgeNode = NavigationBarBadgeNode(fillColor: self.presentationData.theme.buttonColor, strokeColor: self.presentationData.theme.buttonColor, textColor: self.presentationData.theme.badgeTextColor) self.badgeNode.isUserInteractionEnabled = false self.badgeNode.isHidden = true self.backButtonArrow = ASImageNode() @@ -890,6 +891,7 @@ open class NavigationBar: ASDisplayNode { self.backButtonNode.highlightChanged = { [weak self] index, highlighted in if let strongSelf = self, index == 0 { strongSelf.backButtonArrow.alpha = (highlighted ? 0.4 : 1.0) + strongSelf.badgeNode.alpha = (highlighted ? 0.4 : 1.0) } } self.backButtonNode.pressed = { [weak self] index in @@ -957,7 +959,7 @@ open class NavigationBar: ASDisplayNode { } self.stripeNode.backgroundColor = self.presentationData.theme.separatorColor - self.badgeNode.updateTheme(fillColor: self.presentationData.theme.badgeBackgroundColor, strokeColor: self.presentationData.theme.badgeStrokeColor, textColor: self.presentationData.theme.badgeTextColor) + self.badgeNode.updateTheme(fillColor: self.presentationData.theme.buttonColor, strokeColor: self.presentationData.theme.buttonColor, textColor: self.presentationData.theme.badgeTextColor) self.requestLayout() } @@ -1089,7 +1091,7 @@ open class NavigationBar: ASDisplayNode { let badgeSize = self.badgeNode.measure(CGSize(width: 200.0, height: 100.0)) let backButtonArrowFrame = self.backButtonArrow.frame - transition.updateFrame(node: self.badgeNode, frame: CGRect(origin: backButtonArrowFrame.origin.offsetBy(dx: 7.0, dy: -9.0), size: badgeSize)) + transition.updateFrame(node: self.badgeNode, frame: CGRect(origin: backButtonArrowFrame.origin.offsetBy(dx: 16.0, dy: 2.0), size: badgeSize)) if self.rightButtonNode.supernode != nil { let rightButtonSize = self.rightButtonNode.updateLayout(constrainedSize: (CGSize(width: size.width, height: nominalHeight)), isLandscape: isLandscape) @@ -1122,7 +1124,7 @@ open class NavigationBar: ASDisplayNode { transitionBackArrowNode.alpha = max(0.0, 1.0 - progress * 1.3) if let transitionBadgeNode = self.transitionBadgeNode { - transitionBadgeNode.frame = CGRect(origin: transitionBackArrowNode.frame.origin.offsetBy(dx: 7.0, dy: -9.0), size: transitionBadgeNode.bounds.size) + transitionBadgeNode.frame = CGRect(origin: transitionBackArrowNode.frame.origin.offsetBy(dx: 16.0, dy: 2.0), size: transitionBadgeNode.bounds.size) transitionBadgeNode.alpha = transitionBackArrowNode.alpha } } @@ -1284,7 +1286,7 @@ open class NavigationBar: ASDisplayNode { public func makeTransitionBadgeNode() -> ASDisplayNode? { if self.badgeNode.supernode != nil && !self.badgeNode.isHidden { - let node = NavigationBarBadgeNode(fillColor: self.presentationData.theme.badgeBackgroundColor, strokeColor: self.presentationData.theme.badgeStrokeColor, textColor: self.presentationData.theme.badgeTextColor) + let node = NavigationBarBadgeNode(fillColor: self.presentationData.theme.buttonColor, strokeColor: self.presentationData.theme.buttonColor, textColor: self.presentationData.theme.badgeTextColor) node.text = self.badgeNode.text let nodeSize = node.measure(CGSize(width: 200.0, height: 100.0)) node.frame = CGRect(origin: CGPoint(), size: nodeSize) diff --git a/submodules/Display/Source/NavigationBarBadge.swift b/submodules/Display/Source/NavigationBarBadge.swift index e12b716ef5..2c998d3a57 100644 --- a/submodules/Display/Source/NavigationBarBadge.swift +++ b/submodules/Display/Source/NavigationBarBadge.swift @@ -31,7 +31,7 @@ public final class NavigationBarBadgeNode: ASDisplayNode { self.backgroundNode = ASImageNode() self.backgroundNode.isLayerBacked = true self.backgroundNode.displaysAsynchronously = false - self.backgroundNode.image = generateStretchableFilledCircleImage(diameter: 18.0, color: fillColor, strokeColor: strokeColor, strokeWidth: 1.0) + self.backgroundNode.image = generateStretchableFilledCircleImage(radius: 18.0, color: fillColor, backgroundColor: nil) super.init() @@ -43,14 +43,19 @@ public final class NavigationBarBadgeNode: ASDisplayNode { self.fillColor = fillColor self.strokeColor = strokeColor self.textColor = textColor - self.backgroundNode.image = generateStretchableFilledCircleImage(diameter: 18.0, color: fillColor, strokeColor: strokeColor, strokeWidth: 1.0) + self.backgroundNode.image = generateStretchableFilledCircleImage(radius: 18.0, color: fillColor, backgroundColor: nil) self.textNode.attributedText = NSAttributedString(string: self.text, font: self.font, textColor: self.textColor) self.textNode.redrawIfPossible() } override public func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { let badgeSize = self.textNode.updateLayout(constrainedSize) - let backgroundSize = CGSize(width: max(18.0, badgeSize.width + 10.0 + 1.0), height: 18.0) + let backgroundSize: CGSize + if self.text.count < 2 { + backgroundSize = CGSize(width: 18.0, height: 18.0) + } else { + backgroundSize = CGSize(width: max(18.0, badgeSize.width + 10.0 + 1.0), height: 18.0) + } let backgroundFrame = CGRect(origin: CGPoint(), size: backgroundSize) self.backgroundNode.frame = backgroundFrame self.textNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels(backgroundFrame.midX - badgeSize.width / 2.0), y: floorToScreenPixels((backgroundFrame.size.height - badgeSize.height) / 2.0)), size: badgeSize) diff --git a/submodules/Display/Source/NavigationButtonNode.swift b/submodules/Display/Source/NavigationButtonNode.swift index 169b57ca03..0c57874efe 100644 --- a/submodules/Display/Source/NavigationButtonNode.swift +++ b/submodules/Display/Source/NavigationButtonNode.swift @@ -278,7 +278,11 @@ private final class NavigationButtonItemNode: ImmediateTextNode { let result = node.view.hitTest(self.view.convert(point, to: node.view), with: event) return result } else { - return super.hitTest(point, with: event) + let previousAlpha = self.alpha + self.alpha = 1.0 + let result = super.hitTest(point, with: event) + self.alpha = previousAlpha + return result } } @@ -300,7 +304,9 @@ private final class NavigationButtonItemNode: ImmediateTextNode { } if shouldChangeHighlight { - self.alpha = !self.isEnabled ? 1.0 : (highlighted ? 0.4 : 1.0) + if self.alpha > 0.0 { + self.alpha = !self.isEnabled ? 1.0 : (highlighted ? 0.4 : 1.0) + } self.highlightChanged(highlighted) } } @@ -379,6 +385,14 @@ public final class NavigationButtonNode: ASDisplayNode { return self.nodes.first?.text ?? "" } + var manualAlpha: CGFloat = 1.0 { + didSet { + for node in self.nodes { + node.alpha = self.manualAlpha + } + } + } + func updateManualText(_ text: String, isBack: Bool = true) { let node: NavigationButtonItemNode if self.nodes.count > 0 { @@ -404,6 +418,7 @@ public final class NavigationButtonNode: ASDisplayNode { self.nodes.append(node) self.addSubnode(node) } + node.alpha = self.manualAlpha node.item = nil node.image = nil node.text = text @@ -445,6 +460,7 @@ public final class NavigationButtonNode: ASDisplayNode { self.nodes.append(node) self.addSubnode(node) } + node.alpha = self.manualAlpha node.item = items[i] node.image = items[i].image node.text = items[i].title ?? "" diff --git a/submodules/GalleryUI/Sources/GalleryControllerNode.swift b/submodules/GalleryUI/Sources/GalleryControllerNode.swift index 0c1152e64c..ea6054ff1a 100644 --- a/submodules/GalleryUI/Sources/GalleryControllerNode.swift +++ b/submodules/GalleryUI/Sources/GalleryControllerNode.swift @@ -7,7 +7,11 @@ import SwipeToDismissGesture open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGestureRecognizerDelegate { public var statusBar: StatusBar? - public var navigationBar: NavigationBar? + public var navigationBar: NavigationBar? { + didSet { + + } + } public let footerNode: GalleryFooterNode public var currentThumbnailContainerNode: GalleryThumbnailContainerNode? public var overlayNode: ASDisplayNode? @@ -137,7 +141,6 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture self.view.addSubview(self.scrollView) self.scrollView.addSubview(self.pager.view) - self.addSubnode(self.footerNode) var previousIndex: Int? self.pager.centralItemIndexOffsetUpdated = { [weak self] itemsIndexAndProgress in @@ -256,6 +259,9 @@ open class GalleryControllerNode: ASDisplayNode, UIScrollViewDelegate, UIGesture if let navigationBar = self.navigationBar { transition.updateFrame(node: navigationBar, frame: CGRect(origin: CGPoint(x: 0.0, y: self.areControlsHidden ? -navigationBarHeight : 0.0), size: CGSize(width: layout.size.width, height: navigationBarHeight))) + if self.footerNode.supernode == nil { + self.addSubnode(self.footerNode) + } } var thumbnailPanelHeight: CGFloat = 0.0 diff --git a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift index 625d8ac3ec..2ec9e63f32 100644 --- a/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift +++ b/submodules/GalleryUI/Sources/Items/ChatImageGalleryItem.swift @@ -215,8 +215,6 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { private let recognitionDisposable = MetaDisposable() private var status: MediaResourceStatus? - private var textCopiedTooltipController: UndoOverlayController? - private let pagingEnabledPromise = ValuePromise(true) init(context: AccountContext, presentationData: PresentationData, performAction: @escaping (GalleryControllerInteractionTapAction) -> Void, openActionOptions: @escaping (GalleryControllerInteractionTapAction, Message) -> Void, present: @escaping (ViewController, Any?) -> Void) { @@ -260,8 +258,11 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { if let recognizedContentNode = strongSelf.recognizedContentNode { strongSelf.imageNode.isUserInteractionEnabled = active transition.updateAlpha(node: recognizedContentNode, alpha: active ? 1.0 : 0.0) - if !active { + if active { + strongSelf.updateControlsVisibility(false) + } else { recognizedContentNode.dismissSelection() + strongSelf.updateControlsVisibility(true) } strongSelf.pagingEnabledPromise.set(!active) } @@ -333,7 +334,6 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { if let controller = strongSelf.baseNavigationController()?.topViewController as? ViewController { let presentationData = strongSelf.context.sharedContext.currentPresentationData.with({ $0 }) let tooltipController = UndoOverlayController(presentationData: presentationData, content: .copy(text: presentationData.strings.Conversation_TextCopied), elevatedLayout: true, animateInAsReplacement: false, action: { _ in return false }) - strongSelf.textCopiedTooltipController = tooltipController controller.present(tooltipController, in: .window(.root)) } case .share: @@ -626,7 +626,19 @@ final class ChatImageGalleryItemNode: ZoomableContentGalleryItemNode { } override func animateOut(to node: (ASDisplayNode, CGRect, () -> (UIView?, UIView?)), addToTransitionSurface: (UIView) -> Void, completion: @escaping () -> Void) { - self.textCopiedTooltipController?.dismiss() + if let controller = self.baseNavigationController()?.topViewController as? ViewController { + controller.window?.forEachController({ controller in + if let controller = controller as? UndoOverlayController { + controller.dismissWithCommitAction() + } + }) + controller.forEachController({ controller in + if let controller = controller as? UndoOverlayController { + controller.dismissWithCommitAction() + } + return true + }) + } self.fetchDisposable.set(nil) @@ -1098,6 +1110,7 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { private let backgroundNode: ASImageNode private let selectedBackgroundNode: ASImageNode private let iconNode: ASImageNode + private let selectedIconNode: ASImageNode private let buttonNode: HighlightTrackingButtonNode var action: ((Bool) -> Void)? @@ -1106,12 +1119,11 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { init(theme: PresentationTheme) { self.backgroundNode = ASImageNode() self.backgroundNode.displaysAsynchronously = false - self.backgroundNode.image = generateFilledCircleImage(diameter: 32.0, color: UIColor(white: 0.0, alpha: 0.6)) - + self.selectedBackgroundNode = ASImageNode() self.selectedBackgroundNode.displaysAsynchronously = false self.selectedBackgroundNode.isHidden = true - self.selectedBackgroundNode.image = generateFilledCircleImage(diameter: 32.0, color: theme.list.itemAccentColor) + self.selectedBackgroundNode.image = generateFilledCircleImage(diameter: 32.0, color: .white) self.buttonNode = HighlightTrackingButtonNode() self.buttonNode.alpha = 0.0 @@ -1121,6 +1133,12 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { self.iconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Media Gallery/LiveTextIcon"), color: .white) self.iconNode.contentMode = .center + self.selectedIconNode = ASImageNode() + self.selectedIconNode.displaysAsynchronously = false + self.selectedIconNode.image = generateTintedImage(image: UIImage(bundleImageName: "Media Gallery/LiveTextIcon"), color: .black) + self.selectedIconNode.contentMode = .center + self.selectedIconNode.isHidden = true + super.init() self.buttonNode.addTarget(self, action: #selector(self.buttonPressed), forControlEvents: .touchUpInside) @@ -1128,13 +1146,16 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { self.buttonNode.addSubnode(self.backgroundNode) self.buttonNode.addSubnode(self.selectedBackgroundNode) self.buttonNode.addSubnode(self.iconNode) + self.buttonNode.addSubnode(self.selectedIconNode) } @objc private func buttonPressed() { let newValue = !self.buttonNode.isSelected - self.action?(newValue) self.buttonNode.isSelected = newValue self.selectedBackgroundNode.isHidden = !newValue + self.selectedIconNode.isHidden = !newValue + + self.action?(newValue) if self.interfaceIsHidden && !newValue { let transition = ContainedViewLayoutTransition.animated(duration: 0.2, curve: .easeInOut) @@ -1159,6 +1180,7 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { self.backgroundNode.frame = CGRect(origin: CGPoint(x: 12.0, y: 12.0), size: buttonSize) self.selectedBackgroundNode.frame = CGRect(origin: CGPoint(x: 12.0, y: 12.0), size: buttonSize) self.iconNode.frame = CGRect(origin: CGPoint(x: 12.0, y: 12.0), size: buttonSize) + self.selectedIconNode.frame = CGRect(origin: CGPoint(x: 12.0, y: 12.0), size: buttonSize) if self.appeared { if !self.buttonNode.isSelected && isHidden { @@ -1168,7 +1190,7 @@ private class ImageRecognitionOverlayContentNode: GalleryOverlayContentNode { } } - transition.updateFrame(node: self.buttonNode, frame: CGRect(x: size.width - rightInset - buttonSize.width - 24.0, y: size.height - bottomInset - buttonSize.height - 24.0, width: buttonSize.width + 24.0, height: buttonSize.height + 24.0)) + transition.updateFrame(node: self.buttonNode, frame: CGRect(x: size.width - rightInset - buttonSize.width - 24.0, y: 41.0, width: buttonSize.width + 24.0, height: buttonSize.height + 24.0)) } override func animateIn(previousContentNode: GalleryOverlayContentNode?, transition: ContainedViewLayoutTransition) { diff --git a/submodules/TelegramUI/Images.xcassets/Contact List/Contents.json b/submodules/TelegramUI/Images.xcassets/Contact List/Contents.json index 38f0c81fc2..6e965652df 100644 --- a/submodules/TelegramUI/Images.xcassets/Contact List/Contents.json +++ b/submodules/TelegramUI/Images.xcassets/Contact List/Contents.json @@ -1,9 +1,9 @@ { "info" : { - "version" : 1, - "author" : "xcode" + "author" : "xcode", + "version" : 1 }, "properties" : { "provides-namespace" : true } -} \ No newline at end of file +} diff --git a/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/Contents.json b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/Contents.json new file mode 100644 index 0000000000..6e965652df --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/Contents.json new file mode 100644 index 0000000000..6b7b65b4e5 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "peoplenearbyon_24.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/peoplenearbyon_24.pdf b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/peoplenearbyon_24.pdf new file mode 100644 index 0000000000..1eada00e63 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Contact List/Context Menu/PeopleNearby.imageset/peoplenearbyon_24.pdf @@ -0,0 +1,145 @@ +%PDF-1.7 + +1 0 obj + << >> +endobj + +2 0 obj + << /Length 3 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 2.934998 1.735001 cm +0.000000 0.000000 0.000000 scn +7.330000 17.464998 m +7.330000 18.423212 8.106786 19.199999 9.065001 19.199999 c +10.023214 19.199999 10.800000 18.423212 10.800000 17.464998 c +10.800000 16.506784 10.023214 15.729999 9.065001 15.729999 c +8.106786 15.729999 7.330000 16.506784 7.330000 17.464998 c +h +9.065001 20.529999 m +7.372247 20.529999 6.000000 19.157751 6.000000 17.464998 c +6.000000 15.772245 7.372247 14.399999 9.065001 14.399999 c +10.757753 14.399999 12.130000 15.772245 12.130000 17.464998 c +12.130000 19.157751 10.757753 20.529999 9.065001 20.529999 c +h +1.330000 3.865000 m +1.330000 4.026144 1.400150 4.232668 1.634496 4.483692 c +1.872207 4.738321 2.249572 5.004240 2.774642 5.255713 c +3.677844 5.688284 4.928888 6.035789 6.400000 6.230032 c +6.400001 4.564999 l +6.400001 3.755901 7.055903 3.099998 7.865001 3.099998 c +10.265000 3.099998 l +11.074098 3.099998 11.730000 3.755901 11.730000 4.564999 c +11.730000 6.230032 l +13.201113 6.035789 14.452158 5.688284 15.355359 5.255713 c +15.880429 5.004240 16.257793 4.738321 16.495506 4.483692 c +16.729851 4.232668 16.800003 4.026144 16.800003 3.865000 c +16.800003 3.677490 16.702744 3.422382 16.359842 3.113541 c +16.017097 2.804838 15.483717 2.496361 14.767962 2.223692 c +13.341063 1.680111 11.324945 1.330000 9.065001 1.330000 c +6.805056 1.330000 4.788938 1.680111 3.362040 2.223692 c +2.646284 2.496361 2.112905 2.804838 1.770159 3.113541 c +1.427257 3.422382 1.330000 3.677490 1.330000 3.865000 c +h +2.200152 6.455237 m +3.300211 6.982090 4.758119 7.368791 6.400000 7.570784 c +6.400000 8.099998 l +5.859936 8.099998 l +5.076447 8.099998 4.338713 8.757976 4.479389 9.657219 c +4.588190 10.352705 4.856467 11.405879 5.540887 12.298394 c +6.249626 13.222622 7.373408 13.929998 9.065001 13.929998 c +10.756596 13.929998 11.880377 13.222621 12.589115 12.298393 c +13.273535 11.405878 13.541812 10.352703 13.650612 9.657217 c +13.791287 8.757974 13.053553 8.099998 12.270063 8.099998 c +11.730000 8.099998 l +11.730000 7.570784 l +13.371881 7.368791 14.829790 6.982090 15.929850 6.455237 c +16.545578 6.160346 17.079411 5.807216 17.467701 5.391293 c +17.859352 4.971766 18.130001 4.456234 18.130001 3.865000 c +18.130001 3.168854 17.757156 2.582132 17.249931 2.125290 c +16.742554 1.668306 16.045780 1.287239 15.241435 0.980824 c +13.628130 0.366230 11.444248 0.000000 9.065001 0.000000 c +6.685753 0.000000 4.501871 0.366230 2.888566 0.980824 c +2.084221 1.287239 1.387449 1.668306 0.880069 2.125290 c +0.372844 2.582132 0.000000 3.168854 0.000000 3.865000 c +0.000000 4.456234 0.270649 4.971766 0.662301 5.391293 c +1.050590 5.807216 1.584423 6.160346 2.200152 6.455237 c +h +6.596293 11.489061 m +6.105442 10.848969 5.886520 10.046863 5.793407 9.451655 c +5.793330 9.451145 l +5.800257 9.444448 5.821226 9.429998 5.859936 9.429998 c +7.065000 9.429998 l +7.432269 9.429998 7.730000 9.132269 7.730000 8.764999 c +7.730000 4.564999 l +7.730000 4.490440 7.790442 4.429998 7.865001 4.429998 c +8.533002 4.429998 l +8.533002 6.764999 l +8.533002 7.058815 8.771186 7.296999 9.065001 7.296999 c +9.358817 7.296999 9.597001 7.058815 9.597001 6.764999 c +9.597001 4.429998 l +10.265000 4.429998 l +10.339560 4.429998 10.400000 4.490440 10.400000 4.564999 c +10.400000 8.764999 l +10.400000 8.941368 10.470061 9.110514 10.594772 9.235225 c +10.719484 9.359937 10.888630 9.429998 11.064999 9.429998 c +12.270063 9.429998 l +12.308775 9.429998 12.329742 9.444448 12.336671 9.451145 c +12.336594 9.451655 l +12.243481 10.046862 12.024561 10.848969 11.533709 11.489061 c +11.067177 12.097442 10.327614 12.599998 9.065001 12.599998 c +7.802389 12.599998 7.062826 12.097442 6.596293 11.489061 c +h +f* +n +Q + +endstream +endobj + +3 0 obj + 3674 +endobj + +4 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ] + /Resources 1 0 R + /Contents 2 0 R + /Parent 5 0 R + >> +endobj + +5 0 obj + << /Kids [ 4 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +6 0 obj + << /Pages 5 0 R + /Type /Catalog + >> +endobj + +xref +0 7 +0000000000 65535 f +0000000010 00000 n +0000000034 00000 n +0000003764 00000 n +0000003787 00000 n +0000003960 00000 n +0000004034 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 6 0 R + /Size 7 +>> +startxref +4093 +%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Sources/ChatBotInfoItem.swift b/submodules/TelegramUI/Sources/ChatBotInfoItem.swift index 6ce332d648..489e38bce5 100644 --- a/submodules/TelegramUI/Sources/ChatBotInfoItem.swift +++ b/submodules/TelegramUI/Sources/ChatBotInfoItem.swift @@ -118,7 +118,7 @@ final class ChatBotInfoItemNode: ListViewItemNode { break case .ignore: return .fail - case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .theme, .call, .openMessage, .timecode, .bankCard, .tooltip, .openPollResults, .copy: + case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .theme, .call, .openMessage, .timecode, .bankCard, .tooltip, .openPollResults, .copy, .largeEmoji: return .waitForSingleTap } } diff --git a/submodules/TelegramUI/Sources/ChatController.swift b/submodules/TelegramUI/Sources/ChatController.swift index 3b413b7fdc..1f516390b6 100644 --- a/submodules/TelegramUI/Sources/ChatController.swift +++ b/submodules/TelegramUI/Sources/ChatController.swift @@ -3060,6 +3060,31 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G ) } }) + }, openLargeEmojiInfo: { [weak self] _, fitz, file in + guard let strongSelf = self else { + return + } + let actionSheet = ActionSheetController(presentationData: strongSelf.presentationData) + actionSheet.setItemGroups([ActionSheetItemGroup(items: [ + LargeEmojiActionSheetItem(context: strongSelf.context, text: strongSelf.presentationData.strings.Conversation_LargeEmojiDisabledInfo, fitz: fitz, file: file), + ActionSheetButtonItem(title: strongSelf.presentationData.strings.Conversation_LargeEmojiEnable, color: .accent, action: { [weak actionSheet, weak self] in + actionSheet?.dismissAnimated() + guard let strongSelf = self else { + return + } + let _ = updatePresentationThemeSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager, { current in + return current.withUpdatedLargeEmoji(true) + }).start() + + strongSelf.present(UndoOverlayController(presentationData: strongSelf.presentationData, content: .emoji(name: "TwoFactorSetupRememberSuccess", text: strongSelf.presentationData.strings.Conversation_LargeEmojiEnabled), elevatedLayout: false, action: { _ in return false }), in: .current) + }) + ]), ActionSheetItemGroup(items: [ + ActionSheetButtonItem(title: strongSelf.presentationData.strings.Common_Cancel, color: .accent, font: .bold, action: { [weak actionSheet] in + actionSheet?.dismissAnimated() + }) + ])]) + strongSelf.chatDisplayNode.dismissInput() + strongSelf.present(actionSheet, in: .window(.root)) }, requestMessageUpdate: { [weak self] id in if let strongSelf = self { strongSelf.chatDisplayNode.historyNode.requestMessageUpdate(id) diff --git a/submodules/TelegramUI/Sources/ChatControllerInteraction.swift b/submodules/TelegramUI/Sources/ChatControllerInteraction.swift index f7fe5294b8..267e5d0ce2 100644 --- a/submodules/TelegramUI/Sources/ChatControllerInteraction.swift +++ b/submodules/TelegramUI/Sources/ChatControllerInteraction.swift @@ -122,6 +122,7 @@ public final class ChatControllerInteraction { let getMessageTransitionNode: () -> ChatMessageTransitionNode? let updateChoosingSticker: (Bool) -> Void let commitEmojiInteraction: (MessageId, String, EmojiInteraction, TelegramMediaFile) -> Void + let openLargeEmojiInfo: (String, String?, TelegramMediaFile) -> Void let requestMessageUpdate: (MessageId) -> Void let cancelInteractiveKeyboardGestures: () -> Void @@ -218,6 +219,7 @@ public final class ChatControllerInteraction { getMessageTransitionNode: @escaping () -> ChatMessageTransitionNode?, updateChoosingSticker: @escaping (Bool) -> Void, commitEmojiInteraction: @escaping (MessageId, String, EmojiInteraction, TelegramMediaFile) -> Void, + openLargeEmojiInfo: @escaping (String, String?, TelegramMediaFile) -> Void, requestMessageUpdate: @escaping (MessageId) -> Void, cancelInteractiveKeyboardGestures: @escaping () -> Void, automaticMediaDownloadSettings: MediaAutoDownloadSettings, @@ -300,6 +302,7 @@ public final class ChatControllerInteraction { self.getMessageTransitionNode = getMessageTransitionNode self.updateChoosingSticker = updateChoosingSticker self.commitEmojiInteraction = commitEmojiInteraction + self.openLargeEmojiInfo = openLargeEmojiInfo self.requestMessageUpdate = requestMessageUpdate self.cancelInteractiveKeyboardGestures = cancelInteractiveKeyboardGestures @@ -356,6 +359,7 @@ public final class ChatControllerInteraction { return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleContentNode.swift index 01a062a262..5a680d2d6a 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleContentNode.swift @@ -97,6 +97,7 @@ enum ChatMessageBubbleContentTapAction { case ignore case openPollResults(Data) case copy(String) + case largeEmoji(String, String?, TelegramMediaFile) } final class ChatMessageBubbleContentItem { diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index 3c91d78eb3..f72a9a7929 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -782,7 +782,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode break case .ignore: return .fail - case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .theme, .call, .openMessage, .timecode, .bankCard, .tooltip, .openPollResults, .copy: + case .url, .peerMention, .textMention, .botCommand, .hashtag, .instantPage, .wallpaper, .theme, .call, .openMessage, .timecode, .bankCard, .tooltip, .openPollResults, .copy, .largeEmoji: return .waitForSingleTap } } @@ -3098,6 +3098,12 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode item.controllerInteraction.copyText(text) }) } + case let .largeEmoji(emoji, fitz, file): + if let item = self.item { + return .optionalAction({ + item.controllerInteraction.openLargeEmojiInfo(emoji, fitz, file) + }) + } } } return nil @@ -3176,6 +3182,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode break case .copy: break + case .largeEmoji: + break } } if let tapMessage = tapMessage { diff --git a/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift b/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift index c87866aab2..6d16c61cc7 100644 --- a/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageTextBubbleContentNode.swift @@ -460,7 +460,23 @@ class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode { } else if let pre = attributes[NSAttributedString.Key(rawValue: TelegramTextAttributes.Pre)] as? String { return .copy(pre) } else { - return .none + if let item = self.item, item.message.text.count == 1, !item.presentationData.largeEmoji { + let (emoji, fitz) = item.message.text.basicEmoji + var emojiFile: TelegramMediaFile? + + emojiFile = item.associatedData.animatedEmojiStickers[emoji]?.first?.file + if emojiFile == nil { + emojiFile = item.associatedData.animatedEmojiStickers[emoji.strippedEmoji]?.first?.file + } + + if let emojiFile = emojiFile { + return .largeEmoji(emoji, fitz, emojiFile) + } else { + return .none + } + } else { + return .none + } } } else { if let _ = self.statusNode.hitTest(self.view.convert(point, to: self.statusNode.view), with: nil) { diff --git a/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift b/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift index 1b841cee2e..ee7aa1e43c 100644 --- a/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift +++ b/submodules/TelegramUI/Sources/ChatRecentActionsControllerNode.swift @@ -529,6 +529,7 @@ final class ChatRecentActionsControllerNode: ViewControllerTracingNode { return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: self.automaticMediaDownloadSettings, diff --git a/submodules/TelegramUI/Sources/DrawingStickersScreen.swift b/submodules/TelegramUI/Sources/DrawingStickersScreen.swift index 3a5d0d7850..be65cf340a 100644 --- a/submodules/TelegramUI/Sources/DrawingStickersScreen.swift +++ b/submodules/TelegramUI/Sources/DrawingStickersScreen.swift @@ -155,6 +155,7 @@ private final class DrawingStickersScreenNode: ViewControllerTracingNode { return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, diff --git a/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift b/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift new file mode 100644 index 0000000000..1938bed2b4 --- /dev/null +++ b/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift @@ -0,0 +1,185 @@ +import Foundation +import UIKit +import Display +import Postbox +import SwiftSignalKit +import TelegramCore +import TelegramPresentationData +import TelegramUIPreferences +import AccountContext +import AnimatedStickerNode +import TelegramAnimatedStickerNode +import MediaResources +import StickerResources +import ShimmerEffect + +public final class LargeEmojiActionSheetItem: ActionSheetItem { + let context: AccountContext + let text: String + let fitz: String? + let file: TelegramMediaFile + + public init(context: AccountContext, text: String, fitz: String?, file: TelegramMediaFile) { + self.context = context + self.text = text + self.fitz = fitz + self.file = file + } + + public func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { + return LargeEmojiActionSheetItemNode(theme: theme, context: self.context, text: self.text, fitz: self.fitz, file: self.file) + } + + public func updateNode(_ node: ActionSheetItemNode) { + } +} + +private final class LargeEmojiActionSheetItemNode: ActionSheetItemNode { + private let theme: ActionSheetControllerTheme + + private var placeholderNode: StickerShimmerEffectNode + private let imageNode: TransformImageNode + private let animationNode: AnimatedStickerNode + private let textNode: ImmediateTextNode + + private let accessibilityArea: AccessibilityAreaNode + + private let disposable = MetaDisposable() + + private var setupTimestamp: Double? + + init(theme: ActionSheetControllerTheme, context: AccountContext, text: String, fitz: String?, file: TelegramMediaFile) { + self.theme = theme + + let textFont = Font.regular(floor(theme.baseFontSize * 13.0 / 17.0)) + + self.placeholderNode = StickerShimmerEffectNode() + self.placeholderNode.isUserInteractionEnabled = false + + self.imageNode = TransformImageNode() + self.imageNode.displaysAsynchronously = false + + self.animationNode = AnimatedStickerNode() + var fitzModifier: EmojiFitzModifier? + if let fitz = fitz { + fitzModifier = EmojiFitzModifier(emoji: fitz) + } + self.animationNode.setup(source: AnimatedStickerResourceSource(account: context.account, resource: file.resource, fitzModifier: fitzModifier), width: 192, height: 192, playbackMode: .once, mode: .direct(cachePathPrefix: nil)) + self.animationNode.visibility = true + + self.textNode = ImmediateTextNode() + self.textNode.displaysAsynchronously = false + self.textNode.maximumNumberOfLines = 0 + self.textNode.textAlignment = .center + self.textNode.isAccessibilityElement = false + + self.accessibilityArea = AccessibilityAreaNode() + + super.init(theme: theme) + + self.hasSeparator = true + + self.addSubnode(self.imageNode) + self.addSubnode(self.placeholderNode) + self.addSubnode(self.animationNode) + self.addSubnode(self.textNode) + self.addSubnode(self.accessibilityArea) + + let attributedText = NSAttributedString(string: text, font: textFont, textColor: theme.secondaryTextColor) + self.textNode.attributedText = attributedText + + self.accessibilityArea.accessibilityLabel = attributedText.string + self.accessibilityArea.accessibilityTraits = .staticText + + let dimensions = file.dimensions ?? PixelDimensions(width: 512, height: 512) + self.imageNode.setSignal(chatMessageAnimatedSticker(postbox: context.account.postbox, file: file, small: false, size: dimensions.cgSize.aspectFilled(CGSize(width: 384.0, height: 384.0)), fitzModifier: fitzModifier, thumbnail: false, synchronousLoad: true), attemptSynchronously: true) + self.disposable.set(freeMediaFileInteractiveFetched(account: context.account, fileReference: .standalone(media: file)).start()) + + self.setupTimestamp = CACurrentMediaTime() + + self.animationNode.started = { [weak self] in + if let strongSelf = self { + strongSelf.imageNode.alpha = 0.0 + + let current = CACurrentMediaTime() + if let setupTimestamp = strongSelf.setupTimestamp, current - setupTimestamp > 0.3 { + if !strongSelf.placeholderNode.alpha.isZero { + strongSelf.animationNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) + strongSelf.removePlaceholder(animated: true) + } + } else { + strongSelf.removePlaceholder(animated: false) + } + } + } + + var firstTime = true + self.imageNode.imageUpdated = { [weak self] image in + guard let strongSelf = self else { + return + } + if image != nil { + if firstTime && !strongSelf.placeholderNode.isEmpty { + strongSelf.imageNode.alpha = 0.0 + } else { + if strongSelf.setupTimestamp == nil { + strongSelf.removePlaceholder(animated: true) + } + } + firstTime = false + } + } + + if let immediateThumbnailData = file.immediateThumbnailData { + self.placeholderNode.update(backgroundColor: nil, foregroundColor: theme.secondaryTextColor.blitOver(theme.itemBackgroundColor, alpha: 0.55), shimmeringColor: theme.itemBackgroundColor.withAlphaComponent(0.4), data: immediateThumbnailData, size: CGSize(width: 96.0, height: 96.0), imageSize: dimensions.cgSize) + } + } + + deinit { + self.disposable.dispose() + } + + override func didLoad() { + super.didLoad() + + self.animationNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap))) + } + + @objc private func tap() { + let _ = self.animationNode.playIfNeeded() + } + + private func removePlaceholder(animated: Bool) { + self.placeholderNode.alpha = 0.0 + if !animated { + self.placeholderNode.removeFromSupernode() + } else { + self.placeholderNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, completion: { [weak self] _ in + self?.placeholderNode.removeFromSupernode() + }) + } + } + + public override func updateLayout(constrainedSize: CGSize, transition: ContainedViewLayoutTransition) -> CGSize { + let textSize = self.textNode.updateLayout(CGSize(width: constrainedSize.width - 120.0, height: .greatestFiniteMagnitude)) + + let topInset: CGFloat = 26.0 + let textSpacing: CGFloat = 17.0 + let bottomInset: CGFloat = 15.0 + + let iconSize = CGSize(width: 96.0, height: 96.0) + self.animationNode.frame = CGRect(origin: CGPoint(x: floor((constrainedSize.width - iconSize.width) / 2.0), y: topInset), size: iconSize) + self.animationNode.updateLayout(size: iconSize) + self.placeholderNode.frame = self.animationNode.frame + + self.textNode.frame = CGRect(origin: CGPoint(x: floor((constrainedSize.width - textSize.width) / 2.0), y: topInset + iconSize.height + textSpacing), size: textSize) + + let size = CGSize(width: constrainedSize.width, height: topInset + iconSize.height + textSpacing + textSize.height + bottomInset) + self.accessibilityArea.frame = CGRect(origin: CGPoint(), size: size) + + self.placeholderNode.updateAbsoluteRect(CGRect(origin: CGPoint(x: self.placeholderNode.frame.minX, y: self.placeholderNode.frame.minY), size: self.placeholderNode.frame.size), within: size) + + self.updateInternalLayout(size, constrainedSize: constrainedSize) + return size + } +} diff --git a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift index 9c22d09ff8..7917809ed9 100644 --- a/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift +++ b/submodules/TelegramUI/Sources/OverlayAudioPlayerControllerNode.swift @@ -147,6 +147,7 @@ final class OverlayAudioPlayerControllerNode: ViewControllerTracingNode, UIGestu return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, pollActionState: ChatInterfacePollActionState(), stickerSettings: ChatInterfaceStickerSettings(loopAnimatedStickers: false), presentationContext: ChatPresentationContext(backgroundNode: nil)) diff --git a/submodules/TelegramUI/Sources/PeerInfo/ListItems/PeerInfoScreenLabeledValueItem.swift b/submodules/TelegramUI/Sources/PeerInfo/ListItems/PeerInfoScreenLabeledValueItem.swift index 190cb52ea3..faeeb1c6ec 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/ListItems/PeerInfoScreenLabeledValueItem.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/ListItems/PeerInfoScreenLabeledValueItem.swift @@ -52,6 +52,22 @@ final class PeerInfoScreenLabeledValueItem: PeerInfoScreenItem { } } +private func generateExpandBackground(size: CGSize, color: UIColor) -> UIImage? { + return generateImage(size, rotatedContext: { size, context in + context.clear(CGRect(origin: CGPoint(), size: size)) + + var locations: [CGFloat] = [0.0, 1.0] + let colors: [CGColor] = [color.withAlphaComponent(0.0).cgColor, color.cgColor] + + let colorSpace = CGColorSpaceCreateDeviceRGB() + let gradient = CGGradient(colorsSpace: colorSpace, colors: colors as CFArray, locations: &locations)! + + context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: 40.0, y: size.height), options: CGGradientDrawingOptions()) + context.setFillColor(color.cgColor) + context.fill(CGRect(origin: CGPoint(x: 40.0, y: 0.0), size: CGSize(width: size.width - 40.0, height: size.height))) + }) +} + private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { private let selectionNode: PeerInfoScreenSelectableBackgroundNode private let maskNode: ASImageNode @@ -59,6 +75,7 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { private let textNode: ImmediateTextNode private let bottomSeparatorNode: ASDisplayNode + private let expandBackgroundNode: ASImageNode private let expandNode: ImmediateTextNode private let expandButonNode: HighlightTrackingButtonNode @@ -90,6 +107,9 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { self.bottomSeparatorNode = ASDisplayNode() self.bottomSeparatorNode.isLayerBacked = true + self.expandBackgroundNode = ASImageNode() + self.expandBackgroundNode.displaysAsynchronously = false + self.expandNode = ImmediateTextNode() self.expandNode.displaysAsynchronously = false self.expandNode.isUserInteractionEnabled = false @@ -110,6 +130,7 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { self.addSubnode(self.labelNode) self.addSubnode(self.textNode) + self.addSubnode(self.expandBackgroundNode) self.addSubnode(self.expandNode) self.addSubnode(self.expandButonNode) @@ -211,7 +232,7 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { textColorValue = presentationData.theme.list.itemAccentColor } - self.expandNode.attributedText = NSAttributedString(string: presentationData.strings.PeerInfo_BioExpand, font: Font.regular(17.0), textColor: presentationData.theme.list.itemAccentColor) + self.expandNode.attributedText = NSAttributedString(string: presentationData.strings.PeerInfo_BioExpand.uppercased(), font: Font.medium(16.0), textColor: presentationData.theme.list.itemAccentColor) let expandSize = self.expandNode.updateLayout(CGSize(width: width, height: 100.0)) self.labelNode.attributedText = NSAttributedString(string: item.label, font: Font.regular(14.0), textColor: presentationData.theme.list.itemPrimaryTextColor) @@ -223,7 +244,7 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { self.textNode.attributedText = NSAttributedString(string: item.text, font: Font.regular(17.0), textColor: textColorValue) case let .multiLine(maxLines, enabledEntities): self.textNode.maximumNumberOfLines = self.isExpanded ? maxLines : 3 - self.textNode.cutout = self.isExpanded ? nil : TextNodeCutout(bottomRight: CGSize(width: expandSize.width + 4.0, height: expandSize.height)) +// self.textNode.cutout = self.isExpanded ? nil : TextNodeCutout(bottomRight: CGSize(width: expandSize.width + 4.0, height: expandSize.height)) if enabledEntities.isEmpty { self.textNode.attributedText = NSAttributedString(string: item.text, font: Font.regular(17.0), textColor: textColorValue) } else { @@ -246,9 +267,11 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { let textSize = textLayout.size if case .multiLine = item.textBehavior, textLayout.truncated, !self.isExpanded { + self.expandBackgroundNode.isHidden = false self.expandNode.isHidden = false self.expandButonNode.isHidden = false } else { + self.expandBackgroundNode.isHidden = true self.expandNode.isHidden = true self.expandButonNode.isHidden = true } @@ -260,6 +283,12 @@ private final class PeerInfoScreenLabeledValueItemNode: PeerInfoScreenItemNode { self.expandNode.frame = expandFrame self.expandButonNode.frame = expandFrame.insetBy(dx: -8.0, dy: -8.0) + var expandBackgroundFrame = expandFrame + expandBackgroundFrame.origin.x -= 50.0 + expandBackgroundFrame.size.width += 50.0 + self.expandBackgroundNode.frame = expandBackgroundFrame + self.expandBackgroundNode.image = generateExpandBackground(size: expandBackgroundFrame.size, color: presentationData.theme.list.itemBlocksBackgroundColor) + transition.updateFrame(node: self.labelNode, frame: labelFrame) transition.updateFrame(node: self.textNode, frame: textFrame) diff --git a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift index f9042e2600..a04619a5ea 100644 --- a/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift +++ b/submodules/TelegramUI/Sources/PeerInfo/PeerInfoScreen.swift @@ -2151,6 +2151,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, UIScrollViewDelegate return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, diff --git a/submodules/TelegramUI/Sources/SharedAccountContext.swift b/submodules/TelegramUI/Sources/SharedAccountContext.swift index d118725be3..ba3334bbe1 100644 --- a/submodules/TelegramUI/Sources/SharedAccountContext.swift +++ b/submodules/TelegramUI/Sources/SharedAccountContext.swift @@ -1292,6 +1292,7 @@ public final class SharedAccountContextImpl: SharedAccountContext { return nil }, updateChoosingSticker: { _ in }, commitEmojiInteraction: { _, _, _, _ in + }, openLargeEmojiInfo: { _, _, _ in }, requestMessageUpdate: { _ in }, cancelInteractiveKeyboardGestures: { }, automaticMediaDownloadSettings: MediaAutoDownloadSettings.defaultSettings, From 55c4015269d5a8fbd4f68bea9c6fb5e41f296b9f Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 30 Nov 2021 21:21:37 +0400 Subject: [PATCH 4/4] Various Fixes --- submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift | 3 +++ submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift b/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift index 33a9c6af0e..ff89bba3a6 100644 --- a/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift +++ b/submodules/AuthTransferUI/Sources/AuthTransferScanScreen.swift @@ -500,6 +500,9 @@ private final class AuthTransferScanScreenNode: ViewControllerTracingNode, UIScr transition.updateAlpha(node: self.textNode, alpha: controlsAlpha) transition.updateAlpha(node: self.errorTextNode, alpha: controlsAlpha) transition.updateAlpha(node: self.torchButtonNode, alpha: controlsAlpha) + for view in self.highlightViews { + transition.updateAlpha(layer: view.layer, alpha: controlsAlpha) + } let titleSize = self.titleNode.updateLayout(CGSize(width: layout.size.width - 16.0, height: layout.size.height)) let textSize = self.textNode.updateLayout(CGSize(width: layout.size.width - 16.0, height: layout.size.height)) diff --git a/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift b/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift index 1938bed2b4..47485ac4be 100644 --- a/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift +++ b/submodules/TelegramUI/Sources/LargeEmojiActionSheetItem.swift @@ -59,11 +59,11 @@ private final class LargeEmojiActionSheetItemNode: ActionSheetItemNode { self.imageNode = TransformImageNode() self.imageNode.displaysAsynchronously = false - self.animationNode = AnimatedStickerNode() var fitzModifier: EmojiFitzModifier? if let fitz = fitz { fitzModifier = EmojiFitzModifier(emoji: fitz) } + self.animationNode = AnimatedStickerNode() self.animationNode.setup(source: AnimatedStickerResourceSource(account: context.account, resource: file.resource, fitzModifier: fitzModifier), width: 192, height: 192, playbackMode: .once, mode: .direct(cachePathPrefix: nil)) self.animationNode.visibility = true