From 5278c5272996970faddc117294069d8708b665f9 Mon Sep 17 00:00:00 2001 From: Peter <> Date: Tue, 13 Aug 2019 13:00:38 +0300 Subject: [PATCH] Refactor ChatListUI --- .../contents.xcworkspacedata | 15 + .../project.pbxproj | 4 + .../Sources/AccountContext.swift | 6 + .../Sources/ChatController.swift | 28 + .../StoredMessageFromSearchPeer.swift | 6 +- .../project.pbxproj | 747 ++++++++++++++++++ submodules/ChatListUI/Info.plist | 22 + .../Sources}/ChatListController.swift | 40 +- .../Sources}/ChatListControllerNode.swift | 0 .../Sources}/ChatListEmptyNode.swift | 0 .../ChatListRecentPeersListItem.swift | 0 .../ChatListSearchContainerNode.swift | 51 +- .../Sources}/ChatListSelection.swift | 0 .../Sources}/ChatListTitleLockView.swift | 0 .../Sources}/ChatListTitleProxyNode.swift | 0 .../Sources}/ChatListTitleView.swift | 0 submodules/ChatListUI/Sources/ChatListUI.h | 19 + .../ChatListUI/Sources/FrameworkBundle.swift | 13 + .../Node}/ChatListArchiveInfoItem.swift | 0 .../Sources/Node}/ChatListBadgeNode.swift | 0 .../Sources/Node}/ChatListHoleItem.swift | 0 .../Sources/Node}/ChatListItem.swift | 40 +- .../Sources/Node}/ChatListItemStrings.swift | 0 .../Sources/Node}/ChatListNode.swift | 111 +-- .../Sources/Node}/ChatListNodeEntries.swift | 0 .../Sources/Node}/ChatListNodeLocation.swift | 0 .../Node/ChatListPresentationData.swift | 22 + .../Sources/Node}/ChatListStatusNode.swift | 0 .../Sources/Node}/ChatListTypingNode.swift | 1 + .../Node}/ChatListViewTransition.swift | 0 .../project.pbxproj | 583 ++++++++++++++ submodules/ChatTitleActivityNode/Info.plist | 22 + .../ChatPlayingActivityContentNode.swift | 0 ...hatRecordingVideoActivityContentNode.swift | 0 ...hatRecordingVoiceActivityContentNode.swift | 0 .../ChatTitleActivityContentNode.swift | 28 +- .../Sources/ChatTitleActivityNode.h | 19 + .../Sources}/ChatTitleActivityNode.swift | 10 +- .../ChatTypingActivityContentNode.swift | 0 .../ChatUploadingActivityContentNode.swift | 0 .../project.pbxproj | 571 +++++++++++++ .../DeleteChatPeerActionSheetItem/Info.plist | 22 + .../Sources/DeleteChatPeerActionSheetItem.h | 19 + .../DeleteChatPeerActionSheetItem.swift | 10 +- submodules/LanguageSuggestionUI/Info.plist | 22 + .../project.pbxproj | 575 ++++++++++++++ .../LanguageSuggestionController.swift | 370 +++++++++ .../Sources/LanguageSuggestionUI.h | 19 + .../Sources/StickerResources.swift | 7 +- .../TelegramUI/ChannelInfoController.swift | 1 + .../TelegramUI/ChatController.swift | 5 +- .../TelegramUI/ChatInterfaceState.swift | 28 - .../TelegramUI/ChatListPresentationData.swift | 22 - .../TelegramUI/ChatMessageItemView.swift | 1 + .../TelegramUI/TelegramUI/ChatTitleView.swift | 1 + .../TelegramUI/DeclareEncodables.swift | 1 + .../TelegramUI/GroupInfoController.swift | 1 + .../TelegramUI/HashtagSearchController.swift | 1 + .../HashtagSearchControllerNode.swift | 1 + .../TelegramUI/NavigateToChatController.swift | 1 + .../NotificationExceptionControllerNode.swift | 1 + .../TelegramUI/OpenAddContact.swift | 2 +- .../TelegramUI/PeerSelectionController.swift | 1 + .../PeerSelectionControllerNode.swift | 1 + .../TelegramUI/SettingsController.swift | 10 +- .../TelegramUI/SharedAccountContext.swift | 17 + .../TelegramUI/TelegramRootController.swift | 3 +- .../ThemePreviewControllerNode.swift | 1 + .../project.pbxproj | 190 +---- .../TextSelectionNode/Info.plist | 22 + .../TextSelectionNode/TextSelectionNode.h | 19 + .../project.pbxproj | 520 ++++++++++++ 72 files changed, 3867 insertions(+), 385 deletions(-) rename submodules/{TelegramUI/TelegramUI => AccountContext/Sources}/StoredMessageFromSearchPeer.swift (89%) create mode 100644 submodules/ChatListUI/ChatListUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/ChatListUI/Info.plist rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListController.swift (98%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListControllerNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListEmptyNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListRecentPeersListItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListSearchContainerNode.swift (96%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListSelection.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListTitleLockView.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListTitleProxyNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources}/ChatListTitleView.swift (100%) create mode 100644 submodules/ChatListUI/Sources/ChatListUI.h create mode 100644 submodules/ChatListUI/Sources/FrameworkBundle.swift rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListArchiveInfoItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListBadgeNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListHoleItem.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListItem.swift (97%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListItemStrings.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListNode.swift (93%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListNodeEntries.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListNodeLocation.swift (100%) create mode 100644 submodules/ChatListUI/Sources/Node/ChatListPresentationData.swift rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListStatusNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListTypingNode.swift (99%) rename submodules/{TelegramUI/TelegramUI => ChatListUI/Sources/Node}/ChatListViewTransition.swift (100%) create mode 100644 submodules/ChatTitleActivityNode/ChatTitleActivityNode_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/ChatTitleActivityNode/Info.plist rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatPlayingActivityContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatRecordingVideoActivityContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatRecordingVoiceActivityContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatTitleActivityContentNode.swift (79%) create mode 100644 submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.h rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatTitleActivityNode.swift (95%) rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatTypingActivityContentNode.swift (100%) rename submodules/{TelegramUI/TelegramUI => ChatTitleActivityNode/Sources}/ChatUploadingActivityContentNode.swift (100%) create mode 100644 submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/DeleteChatPeerActionSheetItem/Info.plist create mode 100644 submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.h rename submodules/{TelegramUI/TelegramUI => DeleteChatPeerActionSheetItem/Sources}/DeleteChatPeerActionSheetItem.swift (92%) create mode 100644 submodules/LanguageSuggestionUI/Info.plist create mode 100644 submodules/LanguageSuggestionUI/LanguageSuggestionUI_Xcode.xcodeproj/project.pbxproj create mode 100644 submodules/LanguageSuggestionUI/Sources/LanguageSuggestionController.swift create mode 100644 submodules/LanguageSuggestionUI/Sources/LanguageSuggestionUI.h delete mode 100644 submodules/TelegramUI/TelegramUI/ChatListPresentationData.swift create mode 100644 submodules/TextSelectionNode/TextSelectionNode/Info.plist create mode 100644 submodules/TextSelectionNode/TextSelectionNode/TextSelectionNode.h create mode 100644 submodules/TextSelectionNode/TextSelectionNode_Xcode.xcodeproj/project.pbxproj diff --git a/Telegram-iOS.xcworkspace/contents.xcworkspacedata b/Telegram-iOS.xcworkspace/contents.xcworkspacedata index 8eb96be7d5..5a635e9d0e 100644 --- a/Telegram-iOS.xcworkspace/contents.xcworkspacedata +++ b/Telegram-iOS.xcworkspace/contents.xcworkspacedata @@ -217,6 +217,12 @@ + + + + + + + + + + diff --git a/submodules/AccountContext/AccountContext_Xcode.xcodeproj/project.pbxproj b/submodules/AccountContext/AccountContext_Xcode.xcodeproj/project.pbxproj index e4a5d654e9..b265aed4b3 100644 --- a/submodules/AccountContext/AccountContext_Xcode.xcodeproj/project.pbxproj +++ b/submodules/AccountContext/AccountContext_Xcode.xcodeproj/project.pbxproj @@ -36,6 +36,7 @@ D0C9C3D72300CC2500FAB518 /* FetchMediaUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */; }; D0C9C3D92300CC6000FAB518 /* IsMediaStreamable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */; }; D0C9CA8A2302314400FAB518 /* ContactSelectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CA892302314400FAB518 /* ContactSelectionController.swift */; }; + D0C9CB842302B4B900FAB518 /* StoredMessageFromSearchPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB832302B4B900FAB518 /* StoredMessageFromSearchPeer.swift */; }; D0D3285422F329A900D07EE2 /* AccountContext.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D3285222F329A900D07EE2 /* AccountContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; D0D3285F22F335B000D07EE2 /* AccountContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D3285E22F335B000D07EE2 /* AccountContext.swift */; }; D0D3289D22F3461700D07EE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0D3289C22F3461700D07EE2 /* Foundation.framework */; }; @@ -75,6 +76,7 @@ D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchMediaUtils.swift; sourceTree = ""; }; D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IsMediaStreamable.swift; sourceTree = ""; }; D0C9CA892302314400FAB518 /* ContactSelectionController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactSelectionController.swift; sourceTree = ""; }; + D0C9CB832302B4B900FAB518 /* StoredMessageFromSearchPeer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoredMessageFromSearchPeer.swift; sourceTree = ""; }; D0D3284F22F329A900D07EE2 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0D3285222F329A900D07EE2 /* AccountContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccountContext.h; sourceTree = ""; }; D0D3285322F329A900D07EE2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -152,6 +154,7 @@ D0C9C3D62300CC2400FAB518 /* FetchMediaUtils.swift */, D0C9C3D82300CC6000FAB518 /* IsMediaStreamable.swift */, D0C9CA892302314400FAB518 /* ContactSelectionController.swift */, + D0C9CB832302B4B900FAB518 /* StoredMessageFromSearchPeer.swift */, ); path = Sources; sourceTree = ""; @@ -255,6 +258,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + D0C9CB842302B4B900FAB518 /* StoredMessageFromSearchPeer.swift in Sources */, D0879B6122F7A7A600C4D6B3 /* UniversalVideoNode.swift in Sources */, D0879A4E22F65B2A00C4D6B3 /* MediaManager.swift in Sources */, D0879A4A22F6584B00C4D6B3 /* SharedMediaPlayer.swift in Sources */, diff --git a/submodules/AccountContext/Sources/AccountContext.swift b/submodules/AccountContext/Sources/AccountContext.swift index 7b8e3df112..40d7dc4f6c 100644 --- a/submodules/AccountContext/Sources/AccountContext.swift +++ b/submodules/AccountContext/Sources/AccountContext.swift @@ -367,6 +367,8 @@ public final class ContactSelectionControllerParams { } } +public let defaultContactLabel: String = "_$!!$_" + public protocol SharedAccountContext: class { var basePath: String { get } var mainWindow: Window1? { get } @@ -405,13 +407,17 @@ public protocol SharedAccountContext: class { func makePeerInfoController(context: AccountContext, peer: Peer, mode: PeerInfoControllerMode) -> ViewController? func makeDeviceContactInfoController(context: AccountContext, subject: DeviceContactInfoSubject, completed: (() -> Void)?, cancelled: (() -> Void)?) -> ViewController func makePeersNearbyController(context: AccountContext) -> ViewController + func makeComposeController(context: AccountContext) -> ViewController func makeChatController(context: AccountContext, chatLocation: ChatLocation, subject: ChatControllerSubject?, botStart: ChatControllerInitialBotStart?, mode: ChatControllerPresentationMode) -> ChatController func makeContactSelectionController(_ params: ContactSelectionControllerParams) -> ContactSelectionController + func makeProxySettingsController(context: AccountContext) -> ViewController + func makeLocalizationListController(context: AccountContext) -> ViewController func navigateToChatController(_ params: NavigateToChatControllerParams) func openExternalUrl(context: AccountContext, urlContext: OpenURLContext, url: String, forceExternal: Bool, presentationData: PresentationData, navigationController: NavigationController?, dismissInput: @escaping () -> Void) func chatAvailableMessageActions(postbox: Postbox, accountPeerId: PeerId, messageIds: Set) -> Signal func resolveUrl(account: Account, url: String) -> Signal func openResolvedUrl(_ resolvedUrl: ResolvedUrl, context: AccountContext, urlContext: OpenURLContext, navigationController: NavigationController?, openPeer: @escaping (PeerId, ChatControllerInteractionNavigateToPeer) -> Void, sendFile: ((FileMediaReference) -> Void)?, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)?, present: @escaping (ViewController, Any?) -> Void, dismissInput: @escaping () -> Void) + func openAddContact(context: AccountContext, firstName: String, lastName: String, phoneNumber: String, label: String, present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, completed: @escaping () -> Void) func presentContactsWarningSuppression(context: AccountContext, present: (ViewController, Any?) -> Void) func navigateToCurrentCall() diff --git a/submodules/AccountContext/Sources/ChatController.swift b/submodules/AccountContext/Sources/ChatController.swift index 00f8172a2f..598493f70c 100644 --- a/submodules/AccountContext/Sources/ChatController.swift +++ b/submodules/AccountContext/Sources/ChatController.swift @@ -246,6 +246,34 @@ public enum ChatControllerPresentationMode: Equatable { case inline } +public final class ChatEmbeddedInterfaceState: PeerChatListEmbeddedInterfaceState { + public let timestamp: Int32 + public let text: NSAttributedString + + public init(timestamp: Int32, text: NSAttributedString) { + self.timestamp = timestamp + self.text = text + } + + public init(decoder: PostboxDecoder) { + self.timestamp = decoder.decodeInt32ForKey("d", orElse: 0) + self.text = ((decoder.decodeObjectForKey("at", decoder: { ChatTextInputStateText(decoder: $0) }) as? ChatTextInputStateText) ?? ChatTextInputStateText()).attributedText() + } + + public func encode(_ encoder: PostboxEncoder) { + encoder.encodeInt32(self.timestamp, forKey: "d") + encoder.encodeObject(ChatTextInputStateText(attributedText: self.text), forKey: "at") + } + + public func isEqual(to: PeerChatListEmbeddedInterfaceState) -> Bool { + if let to = to as? ChatEmbeddedInterfaceState { + return self.timestamp == to.timestamp && self.text.isEqual(to: to.text) + } else { + return false + } + } +} + public protocol ChatController: ViewController { var chatLocation: ChatLocation { get } var canReadHistory: ValuePromise { get } diff --git a/submodules/TelegramUI/TelegramUI/StoredMessageFromSearchPeer.swift b/submodules/AccountContext/Sources/StoredMessageFromSearchPeer.swift similarity index 89% rename from submodules/TelegramUI/TelegramUI/StoredMessageFromSearchPeer.swift rename to submodules/AccountContext/Sources/StoredMessageFromSearchPeer.swift index f094ef2417..01deab5599 100644 --- a/submodules/TelegramUI/TelegramUI/StoredMessageFromSearchPeer.swift +++ b/submodules/AccountContext/Sources/StoredMessageFromSearchPeer.swift @@ -3,7 +3,7 @@ import Postbox import TelegramCore import SwiftSignalKit -func storedMessageFromSearchPeer(account: Account, peer: Peer) -> Signal { +public func storedMessageFromSearchPeer(account: Account, peer: Peer) -> Signal { return account.postbox.transaction { transaction -> PeerId in if transaction.getPeer(peer.id) == nil { updatePeers(transaction: transaction, peers: [peer], update: { previousPeer, updatedPeer in @@ -17,7 +17,7 @@ func storedMessageFromSearchPeer(account: Account, peer: Peer) -> Signal Signal { +public func storedMessageFromSearch(account: Account, message: Message) -> Signal { return account.postbox.transaction { transaction -> Void in if transaction.getMessage(message.id) == nil { for (_, peer) in message.peers { @@ -35,7 +35,7 @@ func storedMessageFromSearch(account: Account, message: Message) -> Signal + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift similarity index 98% rename from submodules/TelegramUI/TelegramUI/ChatListController.swift rename to submodules/ChatListUI/Sources/ChatListController.swift index ceaf9dddbb..d7d29afae8 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -13,6 +13,8 @@ import AlertUI import UndoUI import TelegramNotices import SearchUI +import DeleteChatPeerActionSheetItem +import LanguageSuggestionUI public func useSpecialTabBarIcons() -> Bool { return (Date(timeIntervalSince1970: 1545642000)...Date(timeIntervalSince1970: 1546387200)).contains(Date()) @@ -65,7 +67,7 @@ private func fixListNodeScrolling(_ listNode: ListView, searchNode: NavigationBa public class ChatListController: TelegramBaseController, UIViewControllerPreviewingDelegate { private var validLayout: ContainerViewLayout? - let context: AccountContext + public let context: AccountContext private let controlsHistoryPreload: Bool private let hideNetworkActivityStatus: Bool @@ -109,7 +111,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - public init(context: AccountContext, groupId: PeerGroupId, controlsHistoryPreload: Bool, hideNetworkActivityStatus: Bool = false) { + public init(context: AccountContext, groupId: PeerGroupId, controlsHistoryPreload: Bool, hideNetworkActivityStatus: Bool = false, enableDebugActions: Bool) { self.context = context self.controlsHistoryPreload = controlsHistoryPreload self.hideNetworkActivityStatus = hideNetworkActivityStatus @@ -324,7 +326,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview self.titleView.openProxySettings = { [weak self] in if let strongSelf = self { - (strongSelf.navigationController as? NavigationController)?.pushViewController(proxySettingsController(context: context)) + (strongSelf.navigationController as? NavigationController)?.pushViewController(context.sharedContext.makeProxySettingsController(context: context)) } } @@ -349,7 +351,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview self.searchContentNode?.updateExpansionProgress(0.0) self.navigationBar?.setContentNode(self.searchContentNode, animated: false) - if !GlobalExperimentalSettings.isAppStoreBuild { + if enableDebugActions { self.tabBarItemDebugTapAction = { preconditionFailure("debug tap") } @@ -709,7 +711,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview self.chatListDisplayNode.chatListNode.groupSelected = { [weak self] groupId in if let strongSelf = self { if let navigationController = strongSelf.navigationController as? NavigationController { - let chatListController = ChatListController(context: strongSelf.context, groupId: groupId, controlsHistoryPreload: false) + let chatListController = ChatListController(context: strongSelf.context, groupId: groupId, controlsHistoryPreload: false, enableDebugActions: false) navigationController.pushViewController(chatListController) strongSelf.chatListDisplayNode.chatListNode.clearHighlightAnimated(true) } @@ -815,7 +817,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview self.chatListDisplayNode.requestAddContact = { [weak self] phoneNumber in if let strongSelf = self { strongSelf.view.endEditing(true) - openAddContact(context: strongSelf.context, phoneNumber: phoneNumber, present: { [weak self] controller, arguments in + strongSelf.context.sharedContext.openAddContact(context: strongSelf.context, firstName: "", lastName: "", phoneNumber: phoneNumber, label: defaultContactLabel, present: { [weak self] controller, arguments in self?.present(controller, in: .window(.root), with: arguments) }, pushController: { [weak self] controller in (self?.navigationController as? NavigationController)?.pushViewController(controller) @@ -1042,7 +1044,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } if let controller = languageSuggestionController(context: strongSelf.context, suggestedLocalization: suggestedLocalization, currentLanguageCode: currentLanguageCode, openSelection: { [weak self] in if let strongSelf = self { - let controller = LocalizationListController(context: strongSelf.context) + let controller = strongSelf.context.sharedContext.makeLocalizationListController(context: strongSelf.context) (strongSelf.navigationController as? NavigationController)?.pushViewController(controller) } }) { @@ -1114,7 +1116,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview super.navigationStackConfigurationUpdated(next: next) } - @objc func editPressed() { + @objc private func editPressed() { let editItem = UIBarButtonItem(title: self.presentationData.strings.Common_Done, style: .done, target: self, action: #selector(self.donePressed)) editItem.accessibilityLabel = self.presentationData.strings.Common_Done if case .root = self.groupId { @@ -1134,7 +1136,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - @objc func donePressed() { + @objc private func donePressed() { let editItem = UIBarButtonItem(title: self.presentationData.strings.Common_Edit, style: .plain, target: self, action: #selector(self.editPressed)) editItem.accessibilityLabel = self.presentationData.strings.Common_Edit if case .root = self.groupId { @@ -1153,7 +1155,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - func activateSearch() { + public func activateSearch() { if self.displayNavigationBar { let _ = (self.chatListDisplayNode.chatListNode.ready |> take(1) @@ -1172,7 +1174,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - func deactivateSearch(animated: Bool) { + public func deactivateSearch(animated: Bool) { if !self.displayNavigationBar { self.setDisplayNavigationBar(true, transition: animated ? .animated(duration: 0.5, curve: .spring) : .immediate) if let searchContentNode = self.searchContentNode { @@ -1181,8 +1183,8 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - @objc func composePressed() { - (self.navigationController as? NavigationController)?.replaceAllButRootController(ComposeController(context: self.context), animated: true) + @objc public func composePressed() { + (self.navigationController as? NavigationController)?.replaceAllButRootController(self.context.sharedContext.makeComposeController(context: self.context), animated: true) } public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { @@ -1218,7 +1220,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview sourceRect = CGRect(x: sourceRect.minX, y: sourceRect.minY + bounds.minY, width: bounds.width, height: bounds.height) sourceRect.size.height -= UIScreenPixel - let chatController = ChatControllerImpl(context: self.context, chatLocation: .peer(peerId), mode: .standard(previewing: true)) + let chatController = self.context.sharedContext.makeChatController(context: self.context, chatLocation: .peer(peerId), subject: nil, botStart: nil, mode: .standard(previewing: true)) chatController.canReadHistory.set(false) chatController.containerLayoutUpdated(ContainerViewLayout(size: contentSize, metrics: LayoutMetrics(), intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: nil, standardInputHeight: 216.0, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: .immediate) return (chatController, sourceRect) @@ -1227,7 +1229,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview sourceRect = CGRect(x: sourceRect.minX, y: sourceRect.minY + bounds.minY, width: bounds.width, height: bounds.height) sourceRect.size.height -= UIScreenPixel - let chatController = ChatControllerImpl(context: self.context, chatLocation: .peer(messageId.peerId), subject: .message(messageId), mode: .standard(previewing: true)) + let chatController = self.context.sharedContext.makeChatController(context: self.context, chatLocation: .peer(messageId.peerId), subject: .message(messageId), botStart: nil, mode: .standard(previewing: true)) chatController.canReadHistory.set(false) chatController.containerLayoutUpdated(ContainerViewLayout(size: contentSize, metrics: LayoutMetrics(), intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: nil, standardInputHeight: 216.0, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: .immediate) return (chatController, sourceRect) @@ -1250,7 +1252,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview switch item.content { case let .peer(_, peer, _, _, _, _, _, _, _, _): if peer.peerId.namespace != Namespaces.Peer.SecretChat { - let chatController = ChatControllerImpl(context: self.context, chatLocation: .peer(peer.peerId), mode: .standard(previewing: true)) + let chatController = self.context.sharedContext.makeChatController(context: self.context, chatLocation: .peer(peer.peerId), subject: nil, botStart: nil, mode: .standard(previewing: true)) chatController.canReadHistory.set(false) chatController.containerLayoutUpdated(ContainerViewLayout(size: contentSize, metrics: LayoutMetrics(), intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: nil, standardInputHeight: 216.0, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: .immediate) return (chatController, sourceRect) @@ -1258,7 +1260,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview return nil } case let .groupReference(groupId, _, _, _, _): - let chatListController = ChatListController(context: self.context, groupId: groupId, controlsHistoryPreload: false) + let chatListController = ChatListController(context: self.context, groupId: groupId, controlsHistoryPreload: false, enableDebugActions: false) chatListController.containerLayoutUpdated(ContainerViewLayout(size: contentSize, metrics: LayoutMetrics(), intrinsicInsets: UIEdgeInsets(), safeInsets: UIEdgeInsets(), statusBarHeight: nil, inputHeight: nil, standardInputHeight: 216.0, inputHeightIsInteractivellyChanging: false, inVoiceOver: false), transition: .immediate) return (chatListController, sourceRect) } @@ -1273,7 +1275,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview func previewingCommit(_ viewControllerToCommit: UIViewController) { if let viewControllerToCommit = viewControllerToCommit as? ViewController { - if let chatController = viewControllerToCommit as? ChatControllerImpl { + if let chatController = viewControllerToCommit as? ChatController { chatController.canReadHistory.set(true) chatController.updatePresentationMode(.standard(previewing: false)) if let navigationController = self.navigationController as? NavigationController { @@ -1446,7 +1448,7 @@ public class ChatListController: TelegramBaseController, UIViewControllerPreview } } - func maybeAskForPeerChatRemoval(peer: RenderedPeer, deleteGloballyIfPossible: Bool = false, completion: @escaping (Bool) -> Void, removed: @escaping () -> Void) { + public func maybeAskForPeerChatRemoval(peer: RenderedPeer, deleteGloballyIfPossible: Bool = false, completion: @escaping (Bool) -> Void, removed: @escaping () -> Void) { guard let chatPeer = peer.peers[peer.peerId], let mainPeer = peer.chatMainPeer else { completion(false) return diff --git a/submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift b/submodules/ChatListUI/Sources/ChatListControllerNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListControllerNode.swift rename to submodules/ChatListUI/Sources/ChatListControllerNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListEmptyNode.swift b/submodules/ChatListUI/Sources/ChatListEmptyNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListEmptyNode.swift rename to submodules/ChatListUI/Sources/ChatListEmptyNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListRecentPeersListItem.swift b/submodules/ChatListUI/Sources/ChatListRecentPeersListItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListRecentPeersListItem.swift rename to submodules/ChatListUI/Sources/ChatListRecentPeersListItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift similarity index 96% rename from submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift rename to submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift index e9586d9321..31b9d455d2 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift +++ b/submodules/ChatListUI/Sources/ChatListSearchContainerNode.swift @@ -178,13 +178,13 @@ private enum ChatListRecentEntry: Comparable, Identifiable { } } -enum ChatListSearchEntryStableId: Hashable { +public enum ChatListSearchEntryStableId: Hashable { case localPeerId(PeerId) case globalPeerId(PeerId) case messageId(MessageId) case addContact - static func ==(lhs: ChatListSearchEntryStableId, rhs: ChatListSearchEntryStableId) -> Bool { + public static func ==(lhs: ChatListSearchEntryStableId, rhs: ChatListSearchEntryStableId) -> Bool { switch lhs { case let .localPeerId(peerId): if case .localPeerId(peerId) = rhs { @@ -214,13 +214,13 @@ enum ChatListSearchEntryStableId: Hashable { } } -enum ChatListSearchEntry: Comparable, Identifiable { +public enum ChatListSearchEntry: Comparable, Identifiable { case localPeer(Peer, Peer?, (Int32, Bool)?, Int, PresentationTheme, PresentationStrings, PresentationPersonNameOrder, PresentationPersonNameOrder) case globalPeer(FoundPeer, (Int32, Bool)?, Int, PresentationTheme, PresentationStrings, PresentationPersonNameOrder, PresentationPersonNameOrder) case message(Message, RenderedPeer, CombinedPeerReadState?, ChatListPresentationData) case addContact(String, PresentationTheme, PresentationStrings) - var stableId: ChatListSearchEntryStableId { + public var stableId: ChatListSearchEntryStableId { switch self { case let .localPeer(peer, _, _, _, _, _, _, _): return .localPeerId(peer.id) @@ -233,7 +233,7 @@ enum ChatListSearchEntry: Comparable, Identifiable { } } - static func ==(lhs: ChatListSearchEntry, rhs: ChatListSearchEntry) -> Bool { + public static func ==(lhs: ChatListSearchEntry, rhs: ChatListSearchEntry) -> Bool { switch lhs { case let .localPeer(lhsPeer, lhsAssociatedPeer, lhsUnreadBadge, lhsIndex, lhsTheme, lhsStrings, lhsSortOrder, lhsDisplayOrder): if case let .localPeer(rhsPeer, rhsAssociatedPeer, rhsUnreadBadge, rhsIndex, rhsTheme, rhsStrings, rhsSortOrder, rhsDisplayOrder) = rhs, lhsPeer.isEqual(rhsPeer) && arePeersEqual(lhsAssociatedPeer, rhsAssociatedPeer) && lhsIndex == rhsIndex && lhsTheme === rhsTheme && lhsStrings === rhsStrings && lhsSortOrder == rhsSortOrder && lhsDisplayOrder == rhsDisplayOrder && lhsUnreadBadge?.0 == rhsUnreadBadge?.0 && lhsUnreadBadge?.1 == rhsUnreadBadge?.1 { @@ -286,7 +286,7 @@ enum ChatListSearchEntry: Comparable, Identifiable { } } - static func <(lhs: ChatListSearchEntry, rhs: ChatListSearchEntry) -> Bool { + public static func <(lhs: ChatListSearchEntry, rhs: ChatListSearchEntry) -> Bool { switch lhs { case let .localPeer(_, _, _, lhsIndex, _, _, _, _): if case let .localPeer(_, _, _, rhsIndex, _, _, _, _) = rhs { @@ -316,7 +316,7 @@ enum ChatListSearchEntry: Comparable, Identifiable { } } - func item(context: AccountContext, enableHeaders: Bool, filter: ChatListNodePeersFilter, interaction: ChatListNodeInteraction) -> ListViewItem { + public func item(context: AccountContext, enableHeaders: Bool, filter: ChatListNodePeersFilter, interaction: ChatListNodeInteraction) -> ListViewItem { switch self { case let .localPeer(peer, associatedPeer, unreadBadge, _, theme, strings, nameSortOrder, nameDisplayOrder): let primaryPeer: Peer @@ -433,11 +433,18 @@ private struct ChatListSearchContainerRecentTransition { let updates: [ListViewUpdateItem] } -struct ChatListSearchContainerTransition { - let deletions: [ListViewDeleteItem] - let insertions: [ListViewInsertItem] - let updates: [ListViewUpdateItem] - let displayingResults: Bool +public struct ChatListSearchContainerTransition { + public let deletions: [ListViewDeleteItem] + public let insertions: [ListViewInsertItem] + public let updates: [ListViewUpdateItem] + public let displayingResults: Bool + + public init(deletions: [ListViewDeleteItem], insertions: [ListViewInsertItem], updates: [ListViewUpdateItem], displayingResults: Bool) { + self.deletions = deletions + self.insertions = insertions + self.updates = updates + self.displayingResults = displayingResults + } } private func chatListSearchContainerPreparedRecentTransition(from fromEntries: [ChatListRecentEntry], to toEntries: [ChatListRecentEntry], context: AccountContext, filter: ChatListNodePeersFilter, peerSelected: @escaping (Peer) -> Void, peerLongTapped: @escaping (Peer) -> Void, clearRecentlySearchedPeers: @escaping () -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, deletePeer: @escaping (PeerId) -> Void) -> ChatListSearchContainerRecentTransition { @@ -450,7 +457,7 @@ private func chatListSearchContainerPreparedRecentTransition(from fromEntries: [ return ChatListSearchContainerRecentTransition(deletions: deletions, insertions: insertions, updates: updates) } -func chatListSearchContainerPreparedTransition(from fromEntries: [ChatListSearchEntry], to toEntries: [ChatListSearchEntry], displayingResults: Bool, context: AccountContext, enableHeaders: Bool, filter: ChatListNodePeersFilter, interaction: ChatListNodeInteraction) -> ChatListSearchContainerTransition { +public func chatListSearchContainerPreparedTransition(from fromEntries: [ChatListSearchEntry], to toEntries: [ChatListSearchEntry], displayingResults: Bool, context: AccountContext, enableHeaders: Bool, filter: ChatListNodePeersFilter, interaction: ChatListNodeInteraction) -> ChatListSearchContainerTransition { let (deleteIndices, indicesAndItems, updateIndices) = mergeListsStableWithUpdates(leftList: fromEntries, rightList: toEntries) let deletions = deleteIndices.map { ListViewDeleteItem(index: $0, directionHint: nil) } @@ -510,7 +517,7 @@ private struct ChatListSearchMessagesContext { let loadMoreIndex: MessageIndex? } -final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { +public final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { private let context: AccountContext private let recentListNode: ListView @@ -534,13 +541,13 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { private let statePromise: ValuePromise private let _isSearching = ValuePromise(false, ignoreRepeated: true) - override var isSearching: Signal { + override public var isSearching: Signal { return self._isSearching.get() } private let filter: ChatListNodePeersFilter - init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, openPeer: @escaping (Peer, Bool) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage: @escaping (Peer, MessageId) -> Void, addContact: ((String) -> Void)?) { + public init(context: AccountContext, filter: ChatListNodePeersFilter, groupId: PeerGroupId, openPeer: @escaping (Peer, Bool) -> Void, openRecentPeerOptions: @escaping (Peer) -> Void, openMessage: @escaping (Peer, MessageId) -> Void, addContact: ((String) -> Void)?) { self.context = context self.filter = filter self.dimNode = ASDisplayNode() @@ -974,12 +981,12 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { } } - override func didLoad() { + override public func didLoad() { super.didLoad() self.dimNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.dimTapGesture(_:)))) } - @objc func dimTapGesture(_ recognizer: UITapGestureRecognizer) { + @objc private func dimTapGesture(_ recognizer: UITapGestureRecognizer) { if case .ended = recognizer.state { self.cancel?() } @@ -1007,7 +1014,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { } } - override func searchTextUpdated(text: String) { + override public func searchTextUpdated(text: String) { if text.isEmpty { self.searchQuery.set(.single(nil)) } else { @@ -1072,7 +1079,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { } } - override func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { + override public func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { super.containerLayoutUpdated(layout, navigationBarHeight: navigationBarHeight, transition: transition) let hadValidLayout = self.validLayout != nil @@ -1120,7 +1127,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { } } - override func previewViewAndActionAtLocation(_ location: CGPoint) -> (UIView, CGRect, Any)? { + override public func previewViewAndActionAtLocation(_ location: CGPoint) -> (UIView, CGRect, Any)? { var selectedItemNode: ASDisplayNode? var bounds: CGRect if !self.recentListNode.isHidden { @@ -1170,7 +1177,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { |> deliverOnMainQueue).start() } - override func scrollToTop() { + override public func scrollToTop() { if !self.listNode.isHidden { self.listNode.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: [.Synchronous, .LowLatency], scrollToItem: ListViewScrollToItem(index: 0, position: .top(0.0), animated: true, curve: .Default(duration: nil), directionHint: .Up), updateSizeAndInsets: nil, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) } else { diff --git a/submodules/TelegramUI/TelegramUI/ChatListSelection.swift b/submodules/ChatListUI/Sources/ChatListSelection.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListSelection.swift rename to submodules/ChatListUI/Sources/ChatListSelection.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListTitleLockView.swift b/submodules/ChatListUI/Sources/ChatListTitleLockView.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListTitleLockView.swift rename to submodules/ChatListUI/Sources/ChatListTitleLockView.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListTitleProxyNode.swift b/submodules/ChatListUI/Sources/ChatListTitleProxyNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListTitleProxyNode.swift rename to submodules/ChatListUI/Sources/ChatListTitleProxyNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListTitleView.swift b/submodules/ChatListUI/Sources/ChatListTitleView.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListTitleView.swift rename to submodules/ChatListUI/Sources/ChatListTitleView.swift diff --git a/submodules/ChatListUI/Sources/ChatListUI.h b/submodules/ChatListUI/Sources/ChatListUI.h new file mode 100644 index 0000000000..4a3e46fa3c --- /dev/null +++ b/submodules/ChatListUI/Sources/ChatListUI.h @@ -0,0 +1,19 @@ +// +// ChatListUI.h +// ChatListUI +// +// Created by Peter on 8/13/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for ChatListUI. +FOUNDATION_EXPORT double ChatListUIVersionNumber; + +//! Project version string for ChatListUI. +FOUNDATION_EXPORT const unsigned char ChatListUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/ChatListUI/Sources/FrameworkBundle.swift b/submodules/ChatListUI/Sources/FrameworkBundle.swift new file mode 100644 index 0000000000..8ca13d7d92 --- /dev/null +++ b/submodules/ChatListUI/Sources/FrameworkBundle.swift @@ -0,0 +1,13 @@ +import Foundation +import UIKit + +private class FrameworkBundleClass: NSObject { +} + +let frameworkBundle: Bundle = Bundle(for: FrameworkBundleClass.self) + +extension UIImage { + convenience init?(bundleImageName: String) { + self.init(named: bundleImageName, in: frameworkBundle, compatibleWith: nil) + } +} diff --git a/submodules/TelegramUI/TelegramUI/ChatListArchiveInfoItem.swift b/submodules/ChatListUI/Sources/Node/ChatListArchiveInfoItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListArchiveInfoItem.swift rename to submodules/ChatListUI/Sources/Node/ChatListArchiveInfoItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListBadgeNode.swift b/submodules/ChatListUI/Sources/Node/ChatListBadgeNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListBadgeNode.swift rename to submodules/ChatListUI/Sources/Node/ChatListBadgeNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListHoleItem.swift b/submodules/ChatListUI/Sources/Node/ChatListHoleItem.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListHoleItem.swift rename to submodules/ChatListUI/Sources/Node/ChatListHoleItem.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListItem.swift b/submodules/ChatListUI/Sources/Node/ChatListItem.swift similarity index 97% rename from submodules/TelegramUI/TelegramUI/ChatListItem.swift rename to submodules/ChatListUI/Sources/Node/ChatListItem.swift index b59ee9be88..db31b444de 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListItem.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListItem.swift @@ -16,11 +16,11 @@ import PeerPresenceStatusManager import PhotoResources import ChatListSearchItemNode -enum ChatListItemContent { +public enum ChatListItemContent { case peer(message: Message?, peer: RenderedPeer, combinedReadState: CombinedPeerReadState?, notificationSettings: PeerNotificationSettings?, presence: PeerPresence?, summaryInfo: ChatListMessageTagSummaryInfo, embeddedState: PeerChatListEmbeddedInterfaceState?, inputActivities: [(Peer, PeerInputActivity)]?, isAd: Bool, ignoreUnreadBadge: Bool) case groupReference(groupId: PeerGroupId, peers: [ChatListGroupReferencePeer], message: Message?, unreadState: PeerGroupUnreadCountersCombinedSummary, hiddenByDefault: Bool) - var chatLocation: ChatLocation? { + public var chatLocation: ChatLocation? { switch self { case let .peer(_, peer, _, _, _, _, _, _, _, _): return .peer(peer.peerId) @@ -30,7 +30,7 @@ enum ChatListItemContent { } } -class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { +public class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { let presentationData: ChatListPresentationData let context: AccountContext let peerGroupId: PeerGroupId @@ -43,19 +43,19 @@ class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { let hiddenOffset: Bool let interaction: ChatListNodeInteraction - let selectable: Bool = true + public let selectable: Bool = true - var approximateHeight: CGFloat { + public var approximateHeight: CGFloat { return self.hiddenOffset ? 0.0 : 44.0 } let header: ListViewItemHeader? - var isPinned: Bool { + public var isPinned: Bool { return self.index.pinningIndex != nil } - init(presentationData: ChatListPresentationData, context: AccountContext, peerGroupId: PeerGroupId, index: ChatListIndex, content: ChatListItemContent, editing: Bool, hasActiveRevealControls: Bool, selected: Bool, header: ListViewItemHeader?, enableContextActions: Bool, hiddenOffset: Bool, interaction: ChatListNodeInteraction) { + public init(presentationData: ChatListPresentationData, context: AccountContext, peerGroupId: PeerGroupId, index: ChatListIndex, content: ChatListItemContent, editing: Bool, hasActiveRevealControls: Bool, selected: Bool, header: ListViewItemHeader?, enableContextActions: Bool, hiddenOffset: Bool, interaction: ChatListNodeInteraction) { self.presentationData = presentationData self.peerGroupId = peerGroupId self.context = context @@ -70,7 +70,7 @@ class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { self.interaction = interaction } - func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal?, (ListViewItemApply) -> Void)) -> Void) { + public func nodeConfiguredForParams(async: @escaping (@escaping () -> Void) -> Void, params: ListViewItemLayoutParams, synchronousLoads: Bool, previousItem: ListViewItem?, nextItem: ListViewItem?, completion: @escaping (ListViewItemNode, @escaping () -> (Signal?, (ListViewItemApply) -> Void)) -> Void) { async { let node = ChatListItemNode() let (first, last, firstWithHeader, nextIsPinned) = ChatListItem.mergeType(item: self, previousItem: previousItem, nextItem: nextItem) @@ -93,7 +93,7 @@ class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { } } - func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) { + public func updateNode(async: @escaping (@escaping () -> Void) -> Void, node: @escaping () -> ListViewItemNode, params: ListViewItemLayoutParams, previousItem: ListViewItem?, nextItem: ListViewItem?, animation: ListViewItemUpdateAnimation, completion: @escaping (ListViewItemNodeLayout, @escaping (ListViewItemApply) -> Void) -> Void) { Queue.mainQueue().async { assert(node() is ChatListItemNode) if let nodeValue = node() as? ChatListItemNode { @@ -117,7 +117,7 @@ class ChatListItem: ListViewItem, ChatListSearchItemNeighbour { } } - func selected(listView: ListView) { + public func selected(listView: ListView) { switch self.content { case let .peer(message, peer, _, _, _, _, _, _, isAd, _): if let message = message, let peer = peer.peer { @@ -295,7 +295,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { private let highlightedBackgroundNode: ASDisplayNode let avatarNode: AvatarNode - var multipleAvatarsNode: MultipleAvatarsNode? let titleNode: TextNode let authorNode: TextNode let textNode: TextNode @@ -1238,22 +1237,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { } strongSelf.onlineNode.setImage(onlineIcon) - /*if let multipleAvatarsApply = multipleAvatarsApply { - strongSelf.avatarNode.isHidden = true - let multipleAvatarsNode = multipleAvatarsApply(animated && strongSelf.multipleAvatarsNode != nil) - if strongSelf.multipleAvatarsNode != multipleAvatarsNode { - strongSelf.multipleAvatarsNode?.removeFromSupernode() - strongSelf.multipleAvatarsNode = multipleAvatarsNode - strongSelf.addSubnode(multipleAvatarsNode) - multipleAvatarsNode.frame = avatarFrame - } else { - transition.updateFrame(node: multipleAvatarsNode, frame: avatarFrame) - } - } else if let multipleAvatarsNode = strongSelf.multipleAvatarsNode { - multipleAvatarsNode.removeFromSupernode() - strongSelf.avatarNode.isHidden = false - }*/ - let _ = dateApply() let _ = textApply() let _ = authorApply() @@ -1544,9 +1527,6 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { var avatarFrame = self.avatarNode.frame avatarFrame.origin.x = leftInset - 78.0 + editingOffset + 10.0 + offset transition.updateFrame(node: self.avatarNode, frame: avatarFrame) - if let multipleAvatarsNode = self.multipleAvatarsNode { - transition.updateFrame(node: multipleAvatarsNode, frame: avatarFrame) - } var onlineFrame = self.onlineNode.frame onlineFrame.origin.x = avatarFrame.maxX - onlineFrame.width - 2.0 diff --git a/submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift b/submodules/ChatListUI/Sources/Node/ChatListItemStrings.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListItemStrings.swift rename to submodules/ChatListUI/Sources/Node/ChatListItemStrings.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListNode.swift b/submodules/ChatListUI/Sources/Node/ChatListNode.swift similarity index 93% rename from submodules/TelegramUI/TelegramUI/ChatListNode.swift rename to submodules/ChatListUI/Sources/Node/ChatListNode.swift index bd9ffa68d6..99761c57a7 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListNode.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListNode.swift @@ -35,7 +35,7 @@ public struct ChatListNodePeersFilter: OptionSet { public static let includeSavedMessages = ChatListNodePeersFilter(rawValue: 1 << 11) } -enum ChatListNodeMode { +public enum ChatListNodeMode { case chatList case peers(filter: ChatListNodePeersFilter) } @@ -64,7 +64,7 @@ final class ChatListHighlightedLocation { } } -final class ChatListNodeInteraction { +public final class ChatListNodeInteraction { let activateSearch: () -> Void let peerSelected: (Peer) -> Void let togglePeerSelected: (PeerId) -> Void @@ -81,7 +81,7 @@ final class ChatListNodeInteraction { var highlightedChatLocation: ChatListHighlightedLocation? - init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (PeerId) -> Void, messageSelected: @escaping (Peer, Message, Bool) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void, toggleArchivedFolderHiddenByDefault: @escaping () -> Void) { + public init(activateSearch: @escaping () -> Void, peerSelected: @escaping (Peer) -> Void, togglePeerSelected: @escaping (PeerId) -> Void, messageSelected: @escaping (Peer, Message, Bool) -> Void, groupSelected: @escaping (PeerGroupId) -> Void, addContact: @escaping (String) -> Void, setPeerIdWithRevealedOptions: @escaping (PeerId?, PeerId?) -> Void, setItemPinned: @escaping (PinnedItemId, Bool) -> Void, setPeerMuted: @escaping (PeerId, Bool) -> Void, deletePeer: @escaping (PeerId) -> Void, updatePeerGrouping: @escaping (PeerId, Bool) -> Void, togglePeerMarkedUnread: @escaping (PeerId, Bool) -> Void, toggleArchivedFolderHiddenByDefault: @escaping () -> Void) { self.activateSearch = activateSearch self.peerSelected = peerSelected self.togglePeerSelected = togglePeerSelected @@ -98,25 +98,36 @@ final class ChatListNodeInteraction { } } -final class ChatListNodePeerInputActivities { - let activities: [PeerId: [(Peer, PeerInputActivity)]] +public final class ChatListNodePeerInputActivities { + public let activities: [PeerId: [(Peer, PeerInputActivity)]] - init(activities: [PeerId: [(Peer, PeerInputActivity)]]) { + public init(activities: [PeerId: [(Peer, PeerInputActivity)]]) { self.activities = activities } } -struct ChatListNodeState: Equatable { - var presentationData: ChatListPresentationData - var editing: Bool - var peerIdWithRevealedOptions: PeerId? - var selectedPeerIds: Set - var peerInputActivities: ChatListNodePeerInputActivities? - var pendingRemovalPeerIds: Set - var pendingClearHistoryPeerIds: Set - var archiveShouldBeTemporaryRevealed: Bool +public struct ChatListNodeState: Equatable { + public var presentationData: ChatListPresentationData + public var editing: Bool + public var peerIdWithRevealedOptions: PeerId? + public var selectedPeerIds: Set + public var peerInputActivities: ChatListNodePeerInputActivities? + public var pendingRemovalPeerIds: Set + public var pendingClearHistoryPeerIds: Set + public var archiveShouldBeTemporaryRevealed: Bool - static func ==(lhs: ChatListNodeState, rhs: ChatListNodeState) -> Bool { + public init(presentationData: ChatListPresentationData, editing: Bool, peerIdWithRevealedOptions: PeerId?, selectedPeerIds: Set, peerInputActivities: ChatListNodePeerInputActivities?, pendingRemovalPeerIds: Set, pendingClearHistoryPeerIds: Set, archiveShouldBeTemporaryRevealed: Bool) { + self.presentationData = presentationData + self.editing = editing + self.peerIdWithRevealedOptions = peerIdWithRevealedOptions + self.selectedPeerIds = selectedPeerIds + self.peerInputActivities = peerInputActivities + self.pendingRemovalPeerIds = pendingRemovalPeerIds + self.pendingClearHistoryPeerIds = pendingClearHistoryPeerIds + self.archiveShouldBeTemporaryRevealed = archiveShouldBeTemporaryRevealed + } + + public static func ==(lhs: ChatListNodeState, rhs: ChatListNodeState) -> Bool { if lhs.presentationData !== rhs.presentationData { return false } @@ -277,14 +288,14 @@ private final class ChatListOpaqueTransactionState { } } -enum ChatListSelectionOption { +public enum ChatListSelectionOption { case previous(unread: Bool) case next(unread: Bool) case peerId(PeerId) case index(Int) } -enum ChatListGlobalScrollOption { +public enum ChatListGlobalScrollOption { case none case top case unread @@ -295,18 +306,18 @@ private struct ChatListVisibleUnreadCounts: Equatable { var filtered: Int32 = 0 } -enum ChatListNodeScrollPosition { +public enum ChatListNodeScrollPosition { case auto case autoUp case top } -enum ChatListNodeEmptyState: Equatable { +public enum ChatListNodeEmptyState: Equatable { case notEmpty(containsChats: Bool) case empty(isLoading: Bool) } -final class ChatListNode: ListView { +public final class ChatListNode: ListView { private let controlsHistoryPreload: Bool private let context: AccountContext private let groupId: PeerGroupId @@ -314,18 +325,18 @@ final class ChatListNode: ListView { private let _ready = ValuePromise() private var didSetReady = false - var ready: Signal { + public var ready: Signal { return _ready.get() } - var peerSelected: ((PeerId, Bool, Bool) -> Void)? - var groupSelected: ((PeerGroupId) -> Void)? - var addContact: ((String) -> Void)? - var activateSearch: (() -> Void)? - var deletePeerChat: ((PeerId) -> Void)? - var updatePeerGrouping: ((PeerId, Bool) -> Void)? - var presentAlert: ((String) -> Void)? - var toggleArchivedFolderHiddenByDefault: (() -> Void)? + public var peerSelected: ((PeerId, Bool, Bool) -> Void)? + public var groupSelected: ((PeerGroupId) -> Void)? + public var addContact: ((String) -> Void)? + public var activateSearch: (() -> Void)? + public var deletePeerChat: ((PeerId) -> Void)? + public var updatePeerGrouping: ((PeerId, Bool) -> Void)? + public var presentAlert: ((String) -> Void)? + public var toggleArchivedFolderHiddenByDefault: (() -> Void)? private var theme: PresentationTheme @@ -338,7 +349,7 @@ final class ChatListNode: ListView { private(set) var currentState: ChatListNodeState private let statePromise: ValuePromise - var state: Signal { + public var state: Signal { return self.statePromise.get() } @@ -348,7 +359,7 @@ final class ChatListNode: ListView { private var activityStatusesDisposable: Disposable? private let scrollToTopOptionPromise = Promise(.none) - var scrollToTopOption: Signal { + public var scrollToTopOption: Signal { return self.scrollToTopOptionPromise.get() } @@ -361,8 +372,8 @@ final class ChatListNode: ListView { } } - var contentOffsetChanged: ((ListViewVisibleContentOffset) -> Void)? - var contentScrollingEnded: ((ListView) -> Bool)? + public var contentOffsetChanged: ((ListViewVisibleContentOffset) -> Void)? + public var contentScrollingEnded: ((ListView) -> Bool)? private let visibleUnreadCounts = ValuePromise(ChatListVisibleUnreadCounts()) private var visibleUnreadCountsValue = ChatListVisibleUnreadCounts() { @@ -373,19 +384,19 @@ final class ChatListNode: ListView { } } - var isEmptyUpdated: ((ChatListNodeEmptyState) -> Void)? + public var isEmptyUpdated: ((ChatListNodeEmptyState) -> Void)? private var currentIsEmptyState: ChatListNodeEmptyState? - var addedVisibleChatsWithPeerIds: (([PeerId]) -> Void)? + public var addedVisibleChatsWithPeerIds: (([PeerId]) -> Void)? private let currentRemovingPeerId = Atomic(value: nil) - func setCurrentRemovingPeerId(_ peerId: PeerId?) { + public func setCurrentRemovingPeerId(_ peerId: PeerId?) { let _ = self.currentRemovingPeerId.swap(peerId) } private var hapticFeedback: HapticFeedback? - init(context: AccountContext, groupId: PeerGroupId, controlsHistoryPreload: Bool, mode: ChatListNodeMode, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { + public init(context: AccountContext, groupId: PeerGroupId, controlsHistoryPreload: Bool, mode: ChatListNodeMode, theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { self.context = context self.groupId = groupId self.controlsHistoryPreload = controlsHistoryPreload @@ -1068,7 +1079,7 @@ final class ChatListNode: ListView { self.activityStatusesDisposable?.dispose() } - func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { + public func updateThemeAndStrings(theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { if theme !== self.currentState.presentationData.theme || strings !== self.currentState.presentationData.strings || dateTimeFormat != self.currentState.presentationData.dateTimeFormat || disableAnimations != self.currentState.presentationData.disableAnimations { self.theme = theme if self.keepTopItemOverscrollBackground != nil { @@ -1084,7 +1095,7 @@ final class ChatListNode: ListView { } } - func updateState(_ f: (ChatListNodeState) -> ChatListNodeState) { + public func updateState(_ f: (ChatListNodeState) -> ChatListNodeState) { let state = f(self.currentState) if state != self.currentState { self.currentState = state @@ -1222,7 +1233,7 @@ final class ChatListNode: ListView { } } - func updateLayout(transition: ContainedViewLayoutTransition, updateSizeAndInsets: ListViewUpdateSizeAndInsets) { + public func updateLayout(transition: ContainedViewLayoutTransition, updateSizeAndInsets: ListViewUpdateSizeAndInsets) { self.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: [.Synchronous, .LowLatency], scrollToItem: nil, updateSizeAndInsets: updateSizeAndInsets, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) if !self.dequeuedInitialTransitionOnLayout { @@ -1231,7 +1242,7 @@ final class ChatListNode: ListView { } } - func scrollToPosition(_ position: ChatListNodeScrollPosition) { + public func scrollToPosition(_ position: ChatListNodeScrollPosition) { if let view = self.chatListView?.originalView { if case .auto = position { switch self.visibleContentOffset() { @@ -1295,7 +1306,7 @@ final class ChatListNode: ListView { |> switchToLatest } - func scrollToEarliestUnread(earlierThan: ChatListIndex?) { + public func scrollToEarliestUnread(earlierThan: ChatListIndex?) { let _ = (relativeUnreadChatListIndex(position: .earlier(than: earlierThan)) |> deliverOnMainQueue).start(next: { [weak self] index in guard let strongSelf = self else { return @@ -1313,7 +1324,7 @@ final class ChatListNode: ListView { }) } - func selectChat(_ option: ChatListSelectionOption) { + public func selectChat(_ option: ChatListSelectionOption) { guard let interaction = self.interaction else { return } @@ -1326,15 +1337,6 @@ final class ChatListNode: ListView { return } -// if interaction.highlightedChatLocation == nil { -// let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound -// , scrollPosition: .top(0.0), animated: true) -// self.currentLocation = location -// self.chatListLocation.set(location) -// //interaction.highlightedChatLocation = ChatListHighlightedLocation(location: .peer(0), progress: 1.0) -// return -// } - let entryCount = chatListView.filteredEntries.count var current: (ChatListIndex, PeerId, Int)? = nil var previous: (ChatListIndex, PeerId)? = nil @@ -1421,10 +1423,9 @@ final class ChatListNode: ListView { } private func enqueueHistoryPreloadUpdate() { - } - func updateSelectedChatLocation(_ chatLocation: ChatLocation?, progress: CGFloat, transition: ContainedViewLayoutTransition) { + public func updateSelectedChatLocation(_ chatLocation: ChatLocation?, progress: CGFloat, transition: ContainedViewLayoutTransition) { guard let interaction = self.interaction else { return } diff --git a/submodules/TelegramUI/TelegramUI/ChatListNodeEntries.swift b/submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListNodeEntries.swift rename to submodules/ChatListUI/Sources/Node/ChatListNodeEntries.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListNodeLocation.swift b/submodules/ChatListUI/Sources/Node/ChatListNodeLocation.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListNodeLocation.swift rename to submodules/ChatListUI/Sources/Node/ChatListNodeLocation.swift diff --git a/submodules/ChatListUI/Sources/Node/ChatListPresentationData.swift b/submodules/ChatListUI/Sources/Node/ChatListPresentationData.swift new file mode 100644 index 0000000000..da0d405e97 --- /dev/null +++ b/submodules/ChatListUI/Sources/Node/ChatListPresentationData.swift @@ -0,0 +1,22 @@ +import Foundation +import UIKit +import TelegramPresentationData +import TelegramUIPreferences + +public final class ChatListPresentationData { + public let theme: PresentationTheme + public let strings: PresentationStrings + public let dateTimeFormat: PresentationDateTimeFormat + public let nameSortOrder: PresentationPersonNameOrder + public let nameDisplayOrder: PresentationPersonNameOrder + public let disableAnimations: Bool + + public init(theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { + self.theme = theme + self.strings = strings + self.dateTimeFormat = dateTimeFormat + self.nameSortOrder = nameSortOrder + self.nameDisplayOrder = nameDisplayOrder + self.disableAnimations = disableAnimations + } +} diff --git a/submodules/TelegramUI/TelegramUI/ChatListStatusNode.swift b/submodules/ChatListUI/Sources/Node/ChatListStatusNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListStatusNode.swift rename to submodules/ChatListUI/Sources/Node/ChatListStatusNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatListTypingNode.swift b/submodules/ChatListUI/Sources/Node/ChatListTypingNode.swift similarity index 99% rename from submodules/TelegramUI/TelegramUI/ChatListTypingNode.swift rename to submodules/ChatListUI/Sources/Node/ChatListTypingNode.swift index 0b1603b462..5eeed83f05 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListTypingNode.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListTypingNode.swift @@ -6,6 +6,7 @@ import TelegramCore import Display import SwiftSignalKit import TelegramPresentationData +import ChatTitleActivityNode private let textFont = Font.regular(15.0) diff --git a/submodules/TelegramUI/TelegramUI/ChatListViewTransition.swift b/submodules/ChatListUI/Sources/Node/ChatListViewTransition.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatListViewTransition.swift rename to submodules/ChatListUI/Sources/Node/ChatListViewTransition.swift diff --git a/submodules/ChatTitleActivityNode/ChatTitleActivityNode_Xcode.xcodeproj/project.pbxproj b/submodules/ChatTitleActivityNode/ChatTitleActivityNode_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..8b694c308c --- /dev/null +++ b/submodules/ChatTitleActivityNode/ChatTitleActivityNode_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,583 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9CB2C2302B02E00FAB518 /* ChatTitleActivityNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9CB2A2302B02E00FAB518 /* ChatTitleActivityNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9CB372302B0C400FAB518 /* ChatTitleActivityNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB362302B0C400FAB518 /* ChatTitleActivityNode.swift */; }; + D0C9CB3A2302B0D800FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB392302B0D800FAB518 /* UIKit.framework */; }; + D0C9CB3C2302B0DD00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB3B2302B0DD00FAB518 /* Foundation.framework */; }; + D0C9CB3E2302B0DE00FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB3D2302B0DE00FAB518 /* AsyncDisplayKit.framework */; }; + D0C9CB402302B0E300FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB3F2302B0E300FAB518 /* Display.framework */; }; + D0C9CB462302B19A00FAB518 /* ChatTitleActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB452302B19A00FAB518 /* ChatTitleActivityContentNode.swift */; }; + D0C9CB482302B1A600FAB518 /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB472302B1A600FAB518 /* LegacyComponents.framework */; }; + D0C9CB4E2302B22800FAB518 /* ChatTypingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB492302B22700FAB518 /* ChatTypingActivityContentNode.swift */; }; + D0C9CB4F2302B22800FAB518 /* ChatPlayingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB4A2302B22700FAB518 /* ChatPlayingActivityContentNode.swift */; }; + D0C9CB502302B22800FAB518 /* ChatRecordingVideoActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB4B2302B22800FAB518 /* ChatRecordingVideoActivityContentNode.swift */; }; + D0C9CB512302B22800FAB518 /* ChatUploadingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB4C2302B22800FAB518 /* ChatUploadingActivityContentNode.swift */; }; + D0C9CB522302B22800FAB518 /* ChatRecordingVoiceActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB4D2302B22800FAB518 /* ChatRecordingVoiceActivityContentNode.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9CB272302B02E00FAB518 /* ChatTitleActivityNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ChatTitleActivityNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB2A2302B02E00FAB518 /* ChatTitleActivityNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChatTitleActivityNode.h; sourceTree = ""; }; + D0C9CB2B2302B02E00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9CB362302B0C400FAB518 /* ChatTitleActivityNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTitleActivityNode.swift; sourceTree = ""; }; + D0C9CB392302B0D800FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9CB3B2302B0DD00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9CB3D2302B0DE00FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB3F2302B0E300FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB452302B19A00FAB518 /* ChatTitleActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTitleActivityContentNode.swift; sourceTree = ""; }; + D0C9CB472302B1A600FAB518 /* LegacyComponents.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LegacyComponents.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB492302B22700FAB518 /* ChatTypingActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTypingActivityContentNode.swift; sourceTree = ""; }; + D0C9CB4A2302B22700FAB518 /* ChatPlayingActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatPlayingActivityContentNode.swift; sourceTree = ""; }; + D0C9CB4B2302B22800FAB518 /* ChatRecordingVideoActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatRecordingVideoActivityContentNode.swift; sourceTree = ""; }; + D0C9CB4C2302B22800FAB518 /* ChatUploadingActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatUploadingActivityContentNode.swift; sourceTree = ""; }; + D0C9CB4D2302B22800FAB518 /* ChatRecordingVoiceActivityContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatRecordingVoiceActivityContentNode.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9CB242302B02E00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB482302B1A600FAB518 /* LegacyComponents.framework in Frameworks */, + D0C9CB402302B0E300FAB518 /* Display.framework in Frameworks */, + D0C9CB3E2302B0DE00FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9CB3C2302B0DD00FAB518 /* Foundation.framework in Frameworks */, + D0C9CB3A2302B0D800FAB518 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9CB1D2302B02E00FAB518 = { + isa = PBXGroup; + children = ( + D0C9CB2B2302B02E00FAB518 /* Info.plist */, + D0C9CB292302B02E00FAB518 /* Sources */, + D0C9CB282302B02E00FAB518 /* Products */, + D0C9CB382302B0D500FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9CB282302B02E00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9CB272302B02E00FAB518 /* ChatTitleActivityNode.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9CB292302B02E00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9CB4A2302B22700FAB518 /* ChatPlayingActivityContentNode.swift */, + D0C9CB4B2302B22800FAB518 /* ChatRecordingVideoActivityContentNode.swift */, + D0C9CB4D2302B22800FAB518 /* ChatRecordingVoiceActivityContentNode.swift */, + D0C9CB492302B22700FAB518 /* ChatTypingActivityContentNode.swift */, + D0C9CB4C2302B22800FAB518 /* ChatUploadingActivityContentNode.swift */, + D0C9CB452302B19A00FAB518 /* ChatTitleActivityContentNode.swift */, + D0C9CB362302B0C400FAB518 /* ChatTitleActivityNode.swift */, + D0C9CB2A2302B02E00FAB518 /* ChatTitleActivityNode.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9CB382302B0D500FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9CB472302B1A600FAB518 /* LegacyComponents.framework */, + D0C9CB3F2302B0E300FAB518 /* Display.framework */, + D0C9CB3D2302B0DE00FAB518 /* AsyncDisplayKit.framework */, + D0C9CB3B2302B0DD00FAB518 /* Foundation.framework */, + D0C9CB392302B0D800FAB518 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9CB222302B02E00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB2C2302B02E00FAB518 /* ChatTitleActivityNode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9CB262302B02E00FAB518 /* ChatTitleActivityNode */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9CB2F2302B02E00FAB518 /* Build configuration list for PBXNativeTarget "ChatTitleActivityNode" */; + buildPhases = ( + D0C9CB222302B02E00FAB518 /* Headers */, + D0C9CB232302B02E00FAB518 /* Sources */, + D0C9CB242302B02E00FAB518 /* Frameworks */, + D0C9CB252302B02E00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ChatTitleActivityNode; + productName = ChatTitleActivityNode; + productReference = D0C9CB272302B02E00FAB518 /* ChatTitleActivityNode.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9CB1E2302B02E00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9CB262302B02E00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9CB212302B02E00FAB518 /* Build configuration list for PBXProject "ChatTitleActivityNode_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9CB1D2302B02E00FAB518; + productRefGroup = D0C9CB282302B02E00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9CB262302B02E00FAB518 /* ChatTitleActivityNode */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9CB252302B02E00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9CB232302B02E00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB372302B0C400FAB518 /* ChatTitleActivityNode.swift in Sources */, + D0C9CB4F2302B22800FAB518 /* ChatPlayingActivityContentNode.swift in Sources */, + D0C9CB522302B22800FAB518 /* ChatRecordingVoiceActivityContentNode.swift in Sources */, + D0C9CB4E2302B22800FAB518 /* ChatTypingActivityContentNode.swift in Sources */, + D0C9CB462302B19A00FAB518 /* ChatTitleActivityContentNode.swift in Sources */, + D0C9CB512302B22800FAB518 /* ChatUploadingActivityContentNode.swift in Sources */, + D0C9CB502302B22800FAB518 /* ChatRecordingVideoActivityContentNode.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9CB2D2302B02E00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9CB2E2302B02E00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB302302B02E00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ChatTitleActivityNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9CB312302B02E00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ChatTitleActivityNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB322302B05800FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9CB332302B05800FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ChatTitleActivityNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9CB342302B06400FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9CB352302B06400FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.ChatTitleActivityNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9CB212302B02E00FAB518 /* Build configuration list for PBXProject "ChatTitleActivityNode_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB2D2302B02E00FAB518 /* DebugAppStoreLLC */, + D0C9CB322302B05800FAB518 /* DebugHockeyapp */, + D0C9CB2E2302B02E00FAB518 /* ReleaseAppStoreLLC */, + D0C9CB342302B06400FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9CB2F2302B02E00FAB518 /* Build configuration list for PBXNativeTarget "ChatTitleActivityNode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB302302B02E00FAB518 /* DebugAppStoreLLC */, + D0C9CB332302B05800FAB518 /* DebugHockeyapp */, + D0C9CB312302B02E00FAB518 /* ReleaseAppStoreLLC */, + D0C9CB352302B06400FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9CB1E2302B02E00FAB518 /* Project object */; +} diff --git a/submodules/ChatTitleActivityNode/Info.plist b/submodules/ChatTitleActivityNode/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/ChatTitleActivityNode/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TelegramUI/TelegramUI/ChatPlayingActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatPlayingActivityContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatPlayingActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatPlayingActivityContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatRecordingVideoActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatRecordingVideoActivityContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatRecordingVideoActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatRecordingVideoActivityContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatRecordingVoiceActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatRecordingVoiceActivityContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatRecordingVoiceActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatRecordingVoiceActivityContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatTitleActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityContentNode.swift similarity index 79% rename from submodules/TelegramUI/TelegramUI/ChatTitleActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatTitleActivityContentNode.swift index dd4a4b4275..27c2014190 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTitleActivityContentNode.swift +++ b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityContentNode.swift @@ -7,28 +7,28 @@ import LegacyComponents private let transitionDuration = 0.2 private let animationKey = "animation" -class ChatTitleActivityIndicatorNode: ASDisplayNode { - var duration: CFTimeInterval { +public class ChatTitleActivityIndicatorNode: ASDisplayNode { + public var duration: CFTimeInterval { return 0.0 } - var timingFunction: CAMediaTimingFunction { + public var timingFunction: CAMediaTimingFunction { return CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) } - var color: UIColor? { + public var color: UIColor? { didSet { self.setNeedsDisplay() } } - var progress: CGFloat = 0.0 { + public var progress: CGFloat = 0.0 { didSet { self.setNeedsDisplay() } } - init(color: UIColor) { + public init(color: UIColor) { self.color = color super.init() @@ -68,21 +68,21 @@ class ChatTitleActivityIndicatorNode: ASDisplayNode { self.pop_removeAnimation(forKey: animationKey) } - override func didEnterHierarchy() { + override public func didEnterHierarchy() { super.didEnterHierarchy() self.startAnimation() } - override func didExitHierarchy() { + override public func didExitHierarchy() { super.didExitHierarchy() self.stopAnimation() } } -class ChatTitleActivityContentNode: ASDisplayNode { - let textNode: ImmediateTextNode +public class ChatTitleActivityContentNode: ASDisplayNode { + public let textNode: ImmediateTextNode - init(text: NSAttributedString) { + public init(text: NSAttributedString) { self.textNode = ImmediateTextNode() self.textNode.displaysAsynchronously = false self.textNode.maximumNumberOfLines = 1 @@ -95,7 +95,7 @@ class ChatTitleActivityContentNode: ASDisplayNode { self.textNode.attributedText = text } - func animateOut(to: ChatTitleActivityNodeState, style: ChatTitleActivityAnimationStyle, completion: @escaping () -> Void) { + public func animateOut(to: ChatTitleActivityNodeState, style: ChatTitleActivityAnimationStyle, completion: @escaping () -> Void) { self.layer.animateAlpha(from: 1.0, to: 0.0, duration: transitionDuration, removeOnCompletion: false, completion: { _ in completion() }) @@ -105,7 +105,7 @@ class ChatTitleActivityContentNode: ASDisplayNode { } } - func animateIn(from: ChatTitleActivityNodeState, style: ChatTitleActivityAnimationStyle) { + public func animateIn(from: ChatTitleActivityNodeState, style: ChatTitleActivityAnimationStyle) { self.layer.animateAlpha(from: 0.0, to: 1.0, duration: transitionDuration) if case .slide = style { @@ -113,7 +113,7 @@ class ChatTitleActivityContentNode: ASDisplayNode { } } - func updateLayout(_ constrainedSize: CGSize, alignment: NSTextAlignment) -> CGSize { + public func updateLayout(_ constrainedSize: CGSize, alignment: NSTextAlignment) -> CGSize { let size = self.textNode.updateLayout(constrainedSize) self.textNode.bounds = CGRect(origin: CGPoint(), size: size) if case .center = alignment { diff --git a/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.h b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.h new file mode 100644 index 0000000000..0d41a1270b --- /dev/null +++ b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.h @@ -0,0 +1,19 @@ +// +// ChatTitleActivityNode.h +// ChatTitleActivityNode +// +// Created by Peter on 8/13/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for ChatTitleActivityNode. +FOUNDATION_EXPORT double ChatTitleActivityNodeVersionNumber; + +//! Project version string for ChatTitleActivityNode. +FOUNDATION_EXPORT const unsigned char ChatTitleActivityNodeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/ChatTitleActivityNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.swift similarity index 95% rename from submodules/TelegramUI/TelegramUI/ChatTitleActivityNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.swift index 5d41598b84..c345f428bb 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTitleActivityNode.swift +++ b/submodules/ChatTitleActivityNode/Sources/ChatTitleActivityNode.swift @@ -43,7 +43,7 @@ public enum ChatTitleActivityNodeState: Equatable { } } - var string: String? { + public var string: String? { if case let .info(text, _) = self { return text.string } @@ -51,12 +51,16 @@ public enum ChatTitleActivityNodeState: Equatable { } } -class ChatTitleActivityNode: ASDisplayNode { - private(set) var state: ChatTitleActivityNodeState = .none +public class ChatTitleActivityNode: ASDisplayNode { + public private(set) var state: ChatTitleActivityNodeState = .none private var contentNode: ChatTitleActivityContentNode? private var nextContentNode: ChatTitleActivityContentNode? + override public init() { + super.init() + } + public func transitionToState(_ state: ChatTitleActivityNodeState, animation: ChatTitleActivityAnimationStyle = .crossfade, completion: @escaping () -> Void = {}) -> Bool { if self.state != state { let currentState = self.state diff --git a/submodules/TelegramUI/TelegramUI/ChatTypingActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatTypingActivityContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatTypingActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatTypingActivityContentNode.swift diff --git a/submodules/TelegramUI/TelegramUI/ChatUploadingActivityContentNode.swift b/submodules/ChatTitleActivityNode/Sources/ChatUploadingActivityContentNode.swift similarity index 100% rename from submodules/TelegramUI/TelegramUI/ChatUploadingActivityContentNode.swift rename to submodules/ChatTitleActivityNode/Sources/ChatUploadingActivityContentNode.swift diff --git a/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem_Xcode.xcodeproj/project.pbxproj b/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..718308169e --- /dev/null +++ b/submodules/DeleteChatPeerActionSheetItem/DeleteChatPeerActionSheetItem_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,571 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9CB622302B28D00FAB518 /* DeleteChatPeerActionSheetItem.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9CB602302B28D00FAB518 /* DeleteChatPeerActionSheetItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9CB6D2302B32200FAB518 /* DeleteChatPeerActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB6C2302B32200FAB518 /* DeleteChatPeerActionSheetItem.swift */; }; + D0C9CB702302B33600FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB6F2302B33600FAB518 /* Foundation.framework */; }; + D0C9CB722302B33B00FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB712302B33B00FAB518 /* UIKit.framework */; }; + D0C9CB742302B33E00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB732302B33E00FAB518 /* Display.framework */; }; + D0C9CB762302B34200FAB518 /* Postbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB752302B34200FAB518 /* Postbox.framework */; }; + D0C9CB782302B34A00FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB772302B34A00FAB518 /* TelegramCore.framework */; }; + D0C9CB7A2302B35100FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB792302B35100FAB518 /* TelegramPresentationData.framework */; }; + D0C9CB7C2302B35600FAB518 /* AvatarNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB7B2302B35600FAB518 /* AvatarNode.framework */; }; + D0C9CB7E2302B35D00FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB7D2302B35D00FAB518 /* AccountContext.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9CB5D2302B28D00FAB518 /* DeleteChatPeerActionSheetItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DeleteChatPeerActionSheetItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB602302B28D00FAB518 /* DeleteChatPeerActionSheetItem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeleteChatPeerActionSheetItem.h; sourceTree = ""; }; + D0C9CB612302B28D00FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9CB6C2302B32200FAB518 /* DeleteChatPeerActionSheetItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeleteChatPeerActionSheetItem.swift; sourceTree = ""; }; + D0C9CB6F2302B33600FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9CB712302B33B00FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9CB732302B33E00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB752302B34200FAB518 /* Postbox.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Postbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB772302B34A00FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB792302B35100FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB7B2302B35600FAB518 /* AvatarNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AvatarNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB7D2302B35D00FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9CB5A2302B28D00FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB7E2302B35D00FAB518 /* AccountContext.framework in Frameworks */, + D0C9CB7C2302B35600FAB518 /* AvatarNode.framework in Frameworks */, + D0C9CB7A2302B35100FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9CB782302B34A00FAB518 /* TelegramCore.framework in Frameworks */, + D0C9CB762302B34200FAB518 /* Postbox.framework in Frameworks */, + D0C9CB742302B33E00FAB518 /* Display.framework in Frameworks */, + D0C9CB722302B33B00FAB518 /* UIKit.framework in Frameworks */, + D0C9CB702302B33600FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9CB532302B28D00FAB518 = { + isa = PBXGroup; + children = ( + D0C9CB612302B28D00FAB518 /* Info.plist */, + D0C9CB5F2302B28D00FAB518 /* Sources */, + D0C9CB5E2302B28D00FAB518 /* Products */, + D0C9CB6E2302B33400FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9CB5E2302B28D00FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9CB5D2302B28D00FAB518 /* DeleteChatPeerActionSheetItem.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9CB5F2302B28D00FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9CB6C2302B32200FAB518 /* DeleteChatPeerActionSheetItem.swift */, + D0C9CB602302B28D00FAB518 /* DeleteChatPeerActionSheetItem.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9CB6E2302B33400FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9CB7D2302B35D00FAB518 /* AccountContext.framework */, + D0C9CB7B2302B35600FAB518 /* AvatarNode.framework */, + D0C9CB792302B35100FAB518 /* TelegramPresentationData.framework */, + D0C9CB772302B34A00FAB518 /* TelegramCore.framework */, + D0C9CB752302B34200FAB518 /* Postbox.framework */, + D0C9CB732302B33E00FAB518 /* Display.framework */, + D0C9CB712302B33B00FAB518 /* UIKit.framework */, + D0C9CB6F2302B33600FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9CB582302B28D00FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB622302B28D00FAB518 /* DeleteChatPeerActionSheetItem.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9CB5C2302B28D00FAB518 /* DeleteChatPeerActionSheetItem */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9CB652302B28D00FAB518 /* Build configuration list for PBXNativeTarget "DeleteChatPeerActionSheetItem" */; + buildPhases = ( + D0C9CB582302B28D00FAB518 /* Headers */, + D0C9CB592302B28D00FAB518 /* Sources */, + D0C9CB5A2302B28D00FAB518 /* Frameworks */, + D0C9CB5B2302B28D00FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DeleteChatPeerActionSheetItem; + productName = DeleteChatPeerActionSheetItem; + productReference = D0C9CB5D2302B28D00FAB518 /* DeleteChatPeerActionSheetItem.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9CB542302B28D00FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9CB5C2302B28D00FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9CB572302B28D00FAB518 /* Build configuration list for PBXProject "DeleteChatPeerActionSheetItem_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9CB532302B28D00FAB518; + productRefGroup = D0C9CB5E2302B28D00FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9CB5C2302B28D00FAB518 /* DeleteChatPeerActionSheetItem */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9CB5B2302B28D00FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9CB592302B28D00FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB6D2302B32200FAB518 /* DeleteChatPeerActionSheetItem.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9CB632302B28D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9CB642302B28D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB662302B28D00FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DeleteChatPeerActionSheetItem; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9CB672302B28D00FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DeleteChatPeerActionSheetItem; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB682302B2C800FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9CB692302B2C800FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DeleteChatPeerActionSheetItem; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; + D0C9CB6A2302B2CC00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9CB6B2302B2CC00FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.DeleteChatPeerActionSheetItem; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9CB572302B28D00FAB518 /* Build configuration list for PBXProject "DeleteChatPeerActionSheetItem_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB632302B28D00FAB518 /* DebugAppStoreLLC */, + D0C9CB6A2302B2CC00FAB518 /* DebugHockeyapp */, + D0C9CB642302B28D00FAB518 /* ReleaseAppStoreLLC */, + D0C9CB682302B2C800FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9CB652302B28D00FAB518 /* Build configuration list for PBXNativeTarget "DeleteChatPeerActionSheetItem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB662302B28D00FAB518 /* DebugAppStoreLLC */, + D0C9CB6B2302B2CC00FAB518 /* DebugHockeyapp */, + D0C9CB672302B28D00FAB518 /* ReleaseAppStoreLLC */, + D0C9CB692302B2C800FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9CB542302B28D00FAB518 /* Project object */; +} diff --git a/submodules/DeleteChatPeerActionSheetItem/Info.plist b/submodules/DeleteChatPeerActionSheetItem/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/DeleteChatPeerActionSheetItem/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.h b/submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.h new file mode 100644 index 0000000000..eff87f3b1f --- /dev/null +++ b/submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.h @@ -0,0 +1,19 @@ +// +// DeleteChatPeerActionSheetItem.h +// DeleteChatPeerActionSheetItem +// +// Created by Peter on 8/13/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for DeleteChatPeerActionSheetItem. +FOUNDATION_EXPORT double DeleteChatPeerActionSheetItemVersionNumber; + +//! Project version string for DeleteChatPeerActionSheetItem. +FOUNDATION_EXPORT const unsigned char DeleteChatPeerActionSheetItemVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TelegramUI/TelegramUI/DeleteChatPeerActionSheetItem.swift b/submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.swift similarity index 92% rename from submodules/TelegramUI/TelegramUI/DeleteChatPeerActionSheetItem.swift rename to submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.swift index 41fea3f083..415c3881a5 100644 --- a/submodules/TelegramUI/TelegramUI/DeleteChatPeerActionSheetItem.swift +++ b/submodules/DeleteChatPeerActionSheetItem/Sources/DeleteChatPeerActionSheetItem.swift @@ -7,19 +7,19 @@ import TelegramPresentationData import AvatarNode import AccountContext -enum DeleteChatPeerAction { +public enum DeleteChatPeerAction { case delete case clearHistory } -final class DeleteChatPeerActionSheetItem: ActionSheetItem { +public final class DeleteChatPeerActionSheetItem: ActionSheetItem { let context: AccountContext let peer: Peer let chatPeer: Peer let action: DeleteChatPeerAction let strings: PresentationStrings - init(context: AccountContext, peer: Peer, chatPeer: Peer, action: DeleteChatPeerAction, strings: PresentationStrings) { + public init(context: AccountContext, peer: Peer, chatPeer: Peer, action: DeleteChatPeerAction, strings: PresentationStrings) { self.context = context self.peer = peer self.chatPeer = chatPeer @@ -27,11 +27,11 @@ final class DeleteChatPeerActionSheetItem: ActionSheetItem { self.strings = strings } - func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { + public func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { return DeleteChatPeerActionSheetItemNode(theme: theme, strings: self.strings, context: self.context, peer: self.peer, chatPeer: self.chatPeer, action: self.action) } - func updateNode(_ node: ActionSheetItemNode) { + public func updateNode(_ node: ActionSheetItemNode) { } } diff --git a/submodules/LanguageSuggestionUI/Info.plist b/submodules/LanguageSuggestionUI/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/LanguageSuggestionUI/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/LanguageSuggestionUI/LanguageSuggestionUI_Xcode.xcodeproj/project.pbxproj b/submodules/LanguageSuggestionUI/LanguageSuggestionUI_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..7112528dec --- /dev/null +++ b/submodules/LanguageSuggestionUI/LanguageSuggestionUI_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,575 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9CB942302B55400FAB518 /* LanguageSuggestionUI.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9CB922302B55400FAB518 /* LanguageSuggestionUI.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0C9CB9F2302B5CF00FAB518 /* LanguageSuggestionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C9CB9E2302B5CF00FAB518 /* LanguageSuggestionController.swift */; }; + D0C9CBA22302B60B00FAB518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBA12302B60A00FAB518 /* Foundation.framework */; }; + D0C9CBA42302B61000FAB518 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBA32302B61000FAB518 /* UIKit.framework */; }; + D0C9CBA62302B61100FAB518 /* SwiftSignalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBA52302B61100FAB518 /* SwiftSignalKit.framework */; }; + D0C9CBA82302B61600FAB518 /* AsyncDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBA72302B61600FAB518 /* AsyncDisplayKit.framework */; }; + D0C9CBAA2302B61B00FAB518 /* Display.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBA92302B61B00FAB518 /* Display.framework */; }; + D0C9CBAC2302B62300FAB518 /* TelegramCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBAB2302B62300FAB518 /* TelegramCore.framework */; }; + D0C9CBAE2302B62900FAB518 /* TelegramPresentationData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBAD2302B62900FAB518 /* TelegramPresentationData.framework */; }; + D0C9CBB02302B62E00FAB518 /* ActivityIndicator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBAF2302B62E00FAB518 /* ActivityIndicator.framework */; }; + D0C9CBB22302B63500FAB518 /* AccountContext.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBB12302B63500FAB518 /* AccountContext.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9CB8F2302B55400FAB518 /* LanguageSuggestionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LanguageSuggestionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB922302B55400FAB518 /* LanguageSuggestionUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LanguageSuggestionUI.h; sourceTree = ""; }; + D0C9CB932302B55400FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C9CB9E2302B5CF00FAB518 /* LanguageSuggestionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LanguageSuggestionController.swift; sourceTree = ""; }; + D0C9CBA12302B60A00FAB518 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + D0C9CBA32302B61000FAB518 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + D0C9CBA52302B61100FAB518 /* SwiftSignalKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SwiftSignalKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBA72302B61600FAB518 /* AsyncDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AsyncDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBA92302B61B00FAB518 /* Display.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Display.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBAB2302B62300FAB518 /* TelegramCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBAD2302B62900FAB518 /* TelegramPresentationData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TelegramPresentationData.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBAF2302B62E00FAB518 /* ActivityIndicator.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ActivityIndicator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBB12302B63500FAB518 /* AccountContext.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = AccountContext.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9CB8C2302B55400FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CBB22302B63500FAB518 /* AccountContext.framework in Frameworks */, + D0C9CBB02302B62E00FAB518 /* ActivityIndicator.framework in Frameworks */, + D0C9CBAE2302B62900FAB518 /* TelegramPresentationData.framework in Frameworks */, + D0C9CBAC2302B62300FAB518 /* TelegramCore.framework in Frameworks */, + D0C9CBAA2302B61B00FAB518 /* Display.framework in Frameworks */, + D0C9CBA82302B61600FAB518 /* AsyncDisplayKit.framework in Frameworks */, + D0C9CBA62302B61100FAB518 /* SwiftSignalKit.framework in Frameworks */, + D0C9CBA42302B61000FAB518 /* UIKit.framework in Frameworks */, + D0C9CBA22302B60B00FAB518 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9CB852302B55400FAB518 = { + isa = PBXGroup; + children = ( + D0C9CB932302B55400FAB518 /* Info.plist */, + D0C9CB912302B55400FAB518 /* Sources */, + D0C9CB902302B55400FAB518 /* Products */, + D0C9CBA02302B60900FAB518 /* Frameworks */, + ); + sourceTree = ""; + }; + D0C9CB902302B55400FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9CB8F2302B55400FAB518 /* LanguageSuggestionUI.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9CB912302B55400FAB518 /* Sources */ = { + isa = PBXGroup; + children = ( + D0C9CB9E2302B5CF00FAB518 /* LanguageSuggestionController.swift */, + D0C9CB922302B55400FAB518 /* LanguageSuggestionUI.h */, + ); + path = Sources; + sourceTree = ""; + }; + D0C9CBA02302B60900FAB518 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D0C9CBB12302B63500FAB518 /* AccountContext.framework */, + D0C9CBAF2302B62E00FAB518 /* ActivityIndicator.framework */, + D0C9CBAD2302B62900FAB518 /* TelegramPresentationData.framework */, + D0C9CBAB2302B62300FAB518 /* TelegramCore.framework */, + D0C9CBA92302B61B00FAB518 /* Display.framework */, + D0C9CBA72302B61600FAB518 /* AsyncDisplayKit.framework */, + D0C9CBA52302B61100FAB518 /* SwiftSignalKit.framework */, + D0C9CBA32302B61000FAB518 /* UIKit.framework */, + D0C9CBA12302B60A00FAB518 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9CB8A2302B55400FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB942302B55400FAB518 /* LanguageSuggestionUI.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9CB8E2302B55400FAB518 /* LanguageSuggestionUI */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9CB972302B55400FAB518 /* Build configuration list for PBXNativeTarget "LanguageSuggestionUI" */; + buildPhases = ( + D0C9CB8A2302B55400FAB518 /* Headers */, + D0C9CB8B2302B55400FAB518 /* Sources */, + D0C9CB8C2302B55400FAB518 /* Frameworks */, + D0C9CB8D2302B55400FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = LanguageSuggestionUI; + productName = LanguageSuggestionUI; + productReference = D0C9CB8F2302B55400FAB518 /* LanguageSuggestionUI.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9CB862302B55400FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9CB8E2302B55400FAB518 = { + CreatedOnToolsVersion = 10.3; + LastSwiftMigration = 1030; + }; + }; + }; + buildConfigurationList = D0C9CB892302B55400FAB518 /* Build configuration list for PBXProject "LanguageSuggestionUI_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9CB852302B55400FAB518; + productRefGroup = D0C9CB902302B55400FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9CB8E2302B55400FAB518 /* LanguageSuggestionUI */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9CB8D2302B55400FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9CB8B2302B55400FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CB9F2302B5CF00FAB518 /* LanguageSuggestionController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9CB952302B55400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9CB962302B55400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB982302B55400FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LanguageSuggestionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9CB992302B55400FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LanguageSuggestionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CB9A2302B59500FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9CB9B2302B59500FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LanguageSuggestionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9CB9C2302B5A000FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9CB9D2302B5A000FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.LanguageSuggestionUI; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9CB892302B55400FAB518 /* Build configuration list for PBXProject "LanguageSuggestionUI_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB952302B55400FAB518 /* DebugAppStoreLLC */, + D0C9CB9A2302B59500FAB518 /* DebugHockeyapp */, + D0C9CB962302B55400FAB518 /* ReleaseAppStoreLLC */, + D0C9CB9C2302B5A000FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9CB972302B55400FAB518 /* Build configuration list for PBXNativeTarget "LanguageSuggestionUI" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CB982302B55400FAB518 /* DebugAppStoreLLC */, + D0C9CB9B2302B59500FAB518 /* DebugHockeyapp */, + D0C9CB992302B55400FAB518 /* ReleaseAppStoreLLC */, + D0C9CB9D2302B5A000FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9CB862302B55400FAB518 /* Project object */; +} diff --git a/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionController.swift b/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionController.swift new file mode 100644 index 0000000000..f063030898 --- /dev/null +++ b/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionController.swift @@ -0,0 +1,370 @@ +import Foundation +import UIKit +import SwiftSignalKit +import AsyncDisplayKit +import Display +import TelegramCore +import TelegramPresentationData +import ActivityIndicator +import AccountContext + +public struct LanguageSuggestionControllerStrings { + let ChooseLanguage: String + let Other: String + let English: String + + public init(localization: SuggestedLocalizationInfo) { + var chooseLanguage = "Choose Your Language" + var other = "Other" + var english = "English" + + for entry in localization.extractedEntries { + switch entry { + case let .string(key, value): + switch key { + case "Localization.ChooseLanguage": + chooseLanguage = value + case "Localization.LanguageOther": + other = value + case "Localization.EnglishLanguageName": + english = value + default: + break + } + default: + break + } + } + + self.ChooseLanguage = chooseLanguage + self.Other = other + self.English = english + } + + public init(bundle: Bundle?) { + var chooseLanguage = "Choose Your Language" + var other = "Other" + var english = "English" + + if let bundle = bundle { + for key in LanguageSuggestionControllerStrings.keys { + let value = bundle.localizedString(forKey: key, value: nil, table: nil) + if value != key { + switch key { + case "Localization.ChooseLanguage": + chooseLanguage = value + case "Localization.LanguageOther": + other = value + case "Localization.EnglishLanguageName": + english = value + default: + break + } + } + } + } + + self.ChooseLanguage = chooseLanguage + self.Other = other + self.English = english + } + + public static let keys: [String] = [ + "Localization.ChooseLanguage", + "Localization.LanguageOther", + "Localization.EnglishLanguageName" + ] +} + +private enum LanguageSuggestionItemType { + case localization(String) + case disclosure + case action +} + +private struct LanguageSuggestionItem { + public let type: LanguageSuggestionItemType + public let title: String + public let subtitle: String? + public let action: () -> Void + + public init(type: LanguageSuggestionItemType, title: String, subtitle: String?, action: @escaping () -> Void) { + self.type = type + self.title = title + self.subtitle = subtitle + self.action = action + } +} + +private final class LanguageSuggestionItemNode: HighlightableButtonNode { + private let backgroundNode: ASDisplayNode + private let separatorNode: ASDisplayNode + private let subtitleNode: ASTextNode + private let iconNode: ASImageNode + + let item: LanguageSuggestionItem + + override var isSelected: Bool { + didSet { + if case .localization = self.item.type { + self.iconNode.isHidden = !self.isSelected + } + } + } + + init(theme: PresentationTheme, item: LanguageSuggestionItem) { + self.item = item + + self.backgroundNode = ASDisplayNode() + self.backgroundNode.isLayerBacked = true + self.backgroundNode.backgroundColor = theme.actionSheet.opaqueItemHighlightedBackgroundColor + self.backgroundNode.alpha = 0.0 + + self.separatorNode = ASDisplayNode() + self.separatorNode.backgroundColor = theme.actionSheet.opaqueItemSeparatorColor + + self.subtitleNode = ASTextNode() + + self.iconNode = ASImageNode() + + super.init() + + self.addSubnode(self.subtitleNode) + self.addSubnode(self.separatorNode) + self.addSubnode(self.iconNode) + + var color: UIColor = theme.actionSheet.primaryTextColor + var alignment: ASHorizontalAlignment = .left + var inset: CGFloat = 19.0 + var icon: UIImage? + switch item.type { + case .action: + alignment = .middle + color = theme.actionSheet.controlAccentColor + inset = 0.0 + case .disclosure: + icon = PresentationResourcesItemList.disclosureArrowImage(theme) + case .localization: + icon = PresentationResourcesItemList.checkIconImage(theme) + } + + self.iconNode.image = icon + self.contentHorizontalAlignment = alignment + self.setTitle(item.title, with: Font.regular(17.0), with: color, for: []) + + var titleVerticalOffset: CGFloat = 0.0 + if let subtitle = item.subtitle { + self.subtitleNode.attributedText = NSAttributedString(string: subtitle, font: Font.regular(14.0), textColor: theme.actionSheet.secondaryTextColor) + titleVerticalOffset = 20.0 + } + self.contentEdgeInsets = UIEdgeInsets(top: 0.0, left: inset, bottom: titleVerticalOffset, right: 0.0) + + self.highligthedChanged = { [weak self] value in + if let strongSelf = self { + if value { + if strongSelf.backgroundNode.supernode == nil { + strongSelf.insertSubnode(strongSelf.backgroundNode, at: 0) + } + strongSelf.backgroundNode.layer.removeAnimation(forKey: "opacity") + strongSelf.backgroundNode.alpha = 1.0 + } else if !strongSelf.backgroundNode.alpha.isZero { + strongSelf.backgroundNode.alpha = 0.0 + strongSelf.backgroundNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.25) + } + } + } + } + + override func didLoad() { + super.didLoad() + + self.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) + } + + @objc func pressed() { + self.item.action() + } + + public func updateLayout(_ constrainedSize: CGSize) -> CGSize { + let bounds = CGRect(origin: CGPoint(), size: CGSize(width: constrainedSize.width, height: self.item.subtitle != nil ? 58.0 : 44.0)) + self.backgroundNode.frame = bounds + + let subtitleSize = self.subtitleNode.measure(bounds.size) + self.subtitleNode.frame = CGRect(origin: CGPoint(x: 19.0, y: 31.0), size: subtitleSize) + self.separatorNode.frame = CGRect(x: 0.0, y: bounds.height - UIScreenPixel, width: bounds.width, height: UIScreenPixel) + if let icon = self.iconNode.image { + self.iconNode.frame = CGRect(origin: CGPoint(x: bounds.width - icon.size.width - 19.0, y: floorToScreenPixels((bounds.height - icon.size.height) / 2.0)), size: icon.size) + } + return bounds.size + } +} + +private final class LanguageSuggestionAlertContentNode: AlertContentNode { + private var validLayout: CGSize? + + private let titleNode: ASTextNode + private let subtitleNode: ASTextNode + private let titleSeparatorNode: ASDisplayNode + private let activityIndicator: ActivityIndicator + + private var nodes: [LanguageSuggestionItemNode] + + private let disposable = MetaDisposable() + + override var dismissOnOutsideTap: Bool { + return self.isUserInteractionEnabled + } + + init(theme: PresentationTheme, strings: LanguageSuggestionControllerStrings, englishStrings: LanguageSuggestionControllerStrings, suggestedLocalization: LocalizationInfo, openSelection: @escaping () -> Void, applyLocalization: @escaping (String, () -> Void) -> Void, dismiss: @escaping () -> Void) { + let selectedLocalization = ValuePromise(suggestedLocalization.languageCode, ignoreRepeated: true) + + self.titleNode = ASTextNode() + self.titleNode.attributedText = NSAttributedString(string: strings.ChooseLanguage, font: Font.bold(17.0), textColor: theme.actionSheet.primaryTextColor, paragraphAlignment: .center) + self.titleNode.maximumNumberOfLines = 2 + + self.subtitleNode = ASTextNode() + self.subtitleNode.attributedText = NSAttributedString(string: englishStrings.ChooseLanguage, font: Font.regular(14.0), textColor: theme.actionSheet.secondaryTextColor, paragraphAlignment: .center) + self.subtitleNode.maximumNumberOfLines = 2 + + self.titleSeparatorNode = ASDisplayNode() + self.titleSeparatorNode.backgroundColor = theme.actionSheet.opaqueItemSeparatorColor + + self.activityIndicator = ActivityIndicator(type: .custom(theme.actionSheet.controlAccentColor, 22.0, 1.0, false)) + self.activityIndicator.isHidden = true + + var items: [LanguageSuggestionItem] = [] + items.append(LanguageSuggestionItem(type: .localization(suggestedLocalization.languageCode), title: suggestedLocalization.localizedTitle, subtitle: suggestedLocalization.title, action: { + selectedLocalization.set(suggestedLocalization.languageCode) + })) + items.append(LanguageSuggestionItem(type: .localization("en"), title: strings.English, subtitle: englishStrings.English, action: { + selectedLocalization.set("en") + })) + items.append(LanguageSuggestionItem(type: .disclosure, title: strings.Other, subtitle: englishStrings.Other != strings.Other ? englishStrings.Other : nil, action: { + openSelection() + })) + + var applyImpl: (() -> Void)? + items.append(LanguageSuggestionItem(type: .action, title: "OK", subtitle: nil, action: { + applyImpl?() + })) + + self.nodes = items.map { LanguageSuggestionItemNode(theme: theme, item: $0) } + + super.init() + + self.addSubnode(self.titleNode) + self.addSubnode(self.subtitleNode) + self.addSubnode(self.titleSeparatorNode) + self.addSubnode(self.activityIndicator) + for node in self.nodes { + self.addSubnode(node) + } + + self.disposable.set(selectedLocalization.get().start(next: { [weak self] selectedCode in + if let strongSelf = self { + for node in strongSelf.nodes { + if case let .localization(code) = node.item.type { + node.isSelected = code == selectedCode + } + } + } + })) + + applyImpl = { [weak self] in + if let strongSelf = self { + strongSelf.isUserInteractionEnabled = false + + _ = (selectedLocalization.get() + |> take(1)).start(next: { selectedCode in + applyLocalization(selectedCode, { [weak self] in + if let strongSelf = self { + strongSelf.activityIndicator.isHidden = false + if let lastNode = strongSelf.nodes.last { + lastNode.isHidden = true + } + } + }) + }) + } + } + } + + deinit { + self.disposable.dispose() + } + + override func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) -> CGSize { + var size = size + size.width = min(size.width, 270.0) + + self.validLayout = size + + var origin: CGPoint = CGPoint(x: 0.0, y: 17.0) + + let titleSize = self.titleNode.measure(size) + transition.updateFrame(node: self.titleNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - titleSize.width) / 2.0), y: origin.y), size: titleSize)) + origin.y += titleSize.height + 3.0 + + let subtitleSize = self.subtitleNode.measure(size) + transition.updateFrame(node: self.subtitleNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - subtitleSize.width) / 2.0), y: origin.y), size: subtitleSize)) + origin.y += subtitleSize.height + 17.0 + transition.updateFrame(node: self.titleSeparatorNode, frame: CGRect(x: 0.0, y: origin.y - UIScreenPixel, width: size.width, height: UIScreenPixel)) + + var lastNodeSize: CGSize? + for node in self.nodes { + let size = node.updateLayout(size) + transition.updateFrame(node: node, frame: CGRect(origin: origin, size: size)) + origin.y += size.height + lastNodeSize = size + } + + if let lastSize = lastNodeSize { + let indicatorSize = self.activityIndicator.measure(CGSize(width: 100.0, height: 100.0)) + transition.updateFrame(node: self.activityIndicator, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - indicatorSize.width) / 2.0), y: origin.y - lastSize.height + floorToScreenPixels((lastSize.height - indicatorSize.height) / 2.0)), size: indicatorSize)) + } + + return CGSize(width: size.width, height: origin.y - UIScreenPixel) + } +} + +public func languageSuggestionController(context: AccountContext, suggestedLocalization: SuggestedLocalizationInfo, currentLanguageCode: String, openSelection: @escaping () -> Void) -> AlertController? { + guard let localization = suggestedLocalization.availableLocalizations.filter({ $0.languageCode == suggestedLocalization.languageCode }).first else { + return nil + } + + let theme = context.sharedContext.currentPresentationData.with { $0 }.theme + let strings = LanguageSuggestionControllerStrings(localization: suggestedLocalization) + guard let mainPath = Bundle.main.path(forResource: "en", ofType: "lproj") else { + return nil + } + let englishStrings = LanguageSuggestionControllerStrings(bundle: Bundle(path: mainPath)) + + let disposable = MetaDisposable() + + var dismissImpl: ((Bool) -> Void)? + let contentNode = LanguageSuggestionAlertContentNode(theme: theme, strings: strings, englishStrings: englishStrings, suggestedLocalization: localization, openSelection: { + dismissImpl?(true) + openSelection() + }, applyLocalization: { languageCode, startActivity in + if languageCode == currentLanguageCode { + dismissImpl?(true) + } else { + startActivity() + disposable.set((downloadAndApplyLocalization(accountManager: context.sharedContext.accountManager, postbox: context.account.postbox, network: context.account.network, languageCode: languageCode) + |> deliverOnMainQueue).start(completed: { + dismissImpl?(true) + })) + } + }, dismiss: { + dismissImpl?(true) + }) + let controller = AlertController(theme: AlertControllerTheme(presentationTheme: theme), contentNode: contentNode) + dismissImpl = { [weak controller] animated in + if animated { + controller?.dismissAnimated() + } else { + controller?.dismiss() + } + } + return controller +} diff --git a/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionUI.h b/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionUI.h new file mode 100644 index 0000000000..60b73de811 --- /dev/null +++ b/submodules/LanguageSuggestionUI/Sources/LanguageSuggestionUI.h @@ -0,0 +1,19 @@ +// +// LanguageSuggestionUI.h +// LanguageSuggestionUI +// +// Created by Peter on 8/13/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for LanguageSuggestionUI. +FOUNDATION_EXPORT double LanguageSuggestionUIVersionNumber; + +//! Project version string for LanguageSuggestionUI. +FOUNDATION_EXPORT const unsigned char LanguageSuggestionUIVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/StickerResources/Sources/StickerResources.swift b/submodules/StickerResources/Sources/StickerResources.swift index d2e98f69d0..497fb6c292 100644 --- a/submodules/StickerResources/Sources/StickerResources.swift +++ b/submodules/StickerResources/Sources/StickerResources.swift @@ -9,14 +9,14 @@ import Tuples import ImageBlur private func imageFromAJpeg(data: Data) -> (UIImage, UIImage)? { - if let (colorData, alphaData) = data.withUnsafeBytes({ (bytes: UnsafePointer) -> (Data, Data)? in + if let (colorData, alphaData) = data.withUnsafeBytes({ bytes -> (Data, Data)? in var colorSize: Int32 = 0 - memcpy(&colorSize, bytes, 4) + memcpy(&colorSize, bytes.baseAddress, 4) if colorSize < 0 || Int(colorSize) > data.count - 8 { return nil } var alphaSize: Int32 = 0 - memcpy(&alphaSize, bytes.advanced(by: 4 + Int(colorSize)), 4) + memcpy(&alphaSize, bytes.baseAddress?.advanced(by: 4 + Int(colorSize)), 4) if alphaSize < 0 || Int(alphaSize) > data.count - Int(colorSize) - 8 { return nil } @@ -265,7 +265,6 @@ public func chatMessageAnimatedStickerBackingData(postbox: Postbox, fileReferenc public func chatMessageLegacySticker(account: Account, file: TelegramMediaFile, small: Bool, fitSize: CGSize, fetched: Bool = false, onlyFullSize: Bool = false) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { let signal = chatMessageStickerDatas(postbox: account.postbox, file: file, small: small, fetched: fetched, onlyFullSize: onlyFullSize, synchronousLoad: false) return signal |> map { value in - let thumbnailData = value._0 let fullSizeData = value._1 let fullSizeComplete = value._2 return { preArguments in diff --git a/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift b/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift index 4f5c3f7f14..7f14099b91 100644 --- a/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/ChannelInfoController.swift @@ -16,6 +16,7 @@ import ShareController import AlertUI import GalleryUI import LegacyUI +import ChatListUI private final class ChannelInfoControllerArguments { let account: Account diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 19038b69c0..c1f049d375 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -34,6 +34,7 @@ import LegacyUI import InstantPageUI import LocationUI import BotPaymentsUI +import DeleteChatPeerActionSheetItem public enum ChatControllerPeekActions { case standard @@ -1320,13 +1321,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G }) }, addContact: { [weak self] phoneNumber in if let strongSelf = self { - openAddContact(context: strongSelf.context, phoneNumber: phoneNumber, present: { [weak self] controller, arguments in + strongSelf.context.sharedContext.openAddContact(context: strongSelf.context, firstName: "", lastName: "", phoneNumber: phoneNumber, label: defaultContactLabel, present: { [weak self] controller, arguments in self?.present(controller, in: .window(.root), with: arguments) }, pushController: { [weak self] controller in if let strongSelf = self { (strongSelf.navigationController as? NavigationController)?.pushViewController(controller) } - }) + }, completed: {}) } }, rateCall: { [weak self] message, callId in if let strongSelf = self { diff --git a/submodules/TelegramUI/TelegramUI/ChatInterfaceState.swift b/submodules/TelegramUI/TelegramUI/ChatInterfaceState.swift index e39f318c37..b788ea5bc3 100644 --- a/submodules/TelegramUI/TelegramUI/ChatInterfaceState.swift +++ b/submodules/TelegramUI/TelegramUI/ChatInterfaceState.swift @@ -77,34 +77,6 @@ struct ChatEditMessageState: PostboxCoding, Equatable { } } -final class ChatEmbeddedInterfaceState: PeerChatListEmbeddedInterfaceState { - let timestamp: Int32 - let text: NSAttributedString - - init(timestamp: Int32, text: NSAttributedString) { - self.timestamp = timestamp - self.text = text - } - - init(decoder: PostboxDecoder) { - self.timestamp = decoder.decodeInt32ForKey("d", orElse: 0) - self.text = ((decoder.decodeObjectForKey("at", decoder: { ChatTextInputStateText(decoder: $0) }) as? ChatTextInputStateText) ?? ChatTextInputStateText()).attributedText() - } - - func encode(_ encoder: PostboxEncoder) { - encoder.encodeInt32(self.timestamp, forKey: "d") - encoder.encodeObject(ChatTextInputStateText(attributedText: self.text), forKey: "at") - } - - public func isEqual(to: PeerChatListEmbeddedInterfaceState) -> Bool { - if let to = to as? ChatEmbeddedInterfaceState { - return self.timestamp == to.timestamp && self.text.isEqual(to: to.text) - } else { - return false - } - } -} - struct ChatInterfaceMessageActionsState: PostboxCoding, Equatable { var closedButtonKeyboardMessageId: MessageId? var processedSetupReplyMessageId: MessageId? diff --git a/submodules/TelegramUI/TelegramUI/ChatListPresentationData.swift b/submodules/TelegramUI/TelegramUI/ChatListPresentationData.swift deleted file mode 100644 index b333bc0027..0000000000 --- a/submodules/TelegramUI/TelegramUI/ChatListPresentationData.swift +++ /dev/null @@ -1,22 +0,0 @@ -import Foundation -import UIKit -import TelegramPresentationData -import TelegramUIPreferences - -final class ChatListPresentationData { - let theme: PresentationTheme - let strings: PresentationStrings - let dateTimeFormat: PresentationDateTimeFormat - let nameSortOrder: PresentationPersonNameOrder - let nameDisplayOrder: PresentationPersonNameOrder - let disableAnimations: Bool - - init(theme: PresentationTheme, strings: PresentationStrings, dateTimeFormat: PresentationDateTimeFormat, nameSortOrder: PresentationPersonNameOrder, nameDisplayOrder: PresentationPersonNameOrder, disableAnimations: Bool) { - self.theme = theme - self.strings = strings - self.dateTimeFormat = dateTimeFormat - self.nameSortOrder = nameSortOrder - self.nameDisplayOrder = nameDisplayOrder - self.disableAnimations = disableAnimations - } -} diff --git a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift index b4643abeec..d61b357811 100644 --- a/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatMessageItemView.swift @@ -7,6 +7,7 @@ import TelegramCore import AccountContext import LocalizedPeerData import ContextUI +import ChatListUI struct ChatMessageItemWidthFill { let compactInset: CGFloat diff --git a/submodules/TelegramUI/TelegramUI/ChatTitleView.swift b/submodules/TelegramUI/TelegramUI/ChatTitleView.swift index a06916499e..cd1ab18e93 100644 --- a/submodules/TelegramUI/TelegramUI/ChatTitleView.swift +++ b/submodules/TelegramUI/TelegramUI/ChatTitleView.swift @@ -11,6 +11,7 @@ import TelegramUIPreferences import ActivityIndicator import TelegramStringFormatting import PeerPresenceStatusManager +import ChatTitleActivityNode enum ChatTitleContent { case peer(peerView: PeerView, onlineMemberCount: Int32?, isScheduledMessages: Bool) diff --git a/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift b/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift index 9bca752963..cd74bdc14a 100644 --- a/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift +++ b/submodules/TelegramUI/TelegramUI/DeclareEncodables.swift @@ -3,6 +3,7 @@ import TemporaryCachedPeerDataManager import TelegramUIPreferences import TelegramNotices import InstantPageUI +import AccountContext private var telegramUIDeclaredEncodables: Void = { declareEncodable(InAppNotificationSettings.self, f: { InAppNotificationSettings(decoder: $0) }) diff --git a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift index aa2171b736..77da42fb97 100644 --- a/submodules/TelegramUI/TelegramUI/GroupInfoController.swift +++ b/submodules/TelegramUI/TelegramUI/GroupInfoController.swift @@ -23,6 +23,7 @@ import LegacyUI import LocationUI import ItemListPeerItem import ContactListUI +import ChatListUI private final class GroupInfoArguments { let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/HashtagSearchController.swift b/submodules/TelegramUI/TelegramUI/HashtagSearchController.swift index ce2caf5d2b..46acae68f3 100644 --- a/submodules/TelegramUI/TelegramUI/HashtagSearchController.swift +++ b/submodules/TelegramUI/TelegramUI/HashtagSearchController.swift @@ -7,6 +7,7 @@ import SwiftSignalKit import TelegramPresentationData import TelegramBaseController import AccountContext +import ChatListUI final class HashtagSearchController: TelegramBaseController { private let queue = Queue() diff --git a/submodules/TelegramUI/TelegramUI/HashtagSearchControllerNode.swift b/submodules/TelegramUI/TelegramUI/HashtagSearchControllerNode.swift index a9b7cf2313..7fa785a382 100644 --- a/submodules/TelegramUI/TelegramUI/HashtagSearchControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/HashtagSearchControllerNode.swift @@ -5,6 +5,7 @@ import Postbox import TelegramCore import TelegramPresentationData import AccountContext +import ChatListUI final class HashtagSearchControllerNode: ASDisplayNode { private let toolbarBackgroundNode: ASDisplayNode diff --git a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift index 965d436ebd..6f4615c083 100644 --- a/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift +++ b/submodules/TelegramUI/TelegramUI/NavigateToChatController.swift @@ -6,6 +6,7 @@ import Postbox import AccountContext import GalleryUI import InstantPageUI +import ChatListUI public func navigateToChatControllerImpl(_ params: NavigateToChatControllerParams) { var found = false diff --git a/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift b/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift index 3c566623b4..de32a97c3a 100644 --- a/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/NotificationExceptionControllerNode.swift @@ -15,6 +15,7 @@ import SearchUI import ItemListPeerItem import ContactsPeerItem import ChatListSearchItemHeader +import ChatListUI private final class NotificationExceptionState : Equatable { let mode:NotificationExceptionMode diff --git a/submodules/TelegramUI/TelegramUI/OpenAddContact.swift b/submodules/TelegramUI/TelegramUI/OpenAddContact.swift index c3dbe4f197..22a56ed5a9 100644 --- a/submodules/TelegramUI/TelegramUI/OpenAddContact.swift +++ b/submodules/TelegramUI/TelegramUI/OpenAddContact.swift @@ -6,7 +6,7 @@ import DeviceAccess import AccountContext import AlertUI -func openAddContact(context: AccountContext, firstName: String = "", lastName: String = "", phoneNumber: String, label: String = "_$!!$_", present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, completed: @escaping () -> Void = {}) { +func openAddContactImpl(context: AccountContext, firstName: String = "", lastName: String = "", phoneNumber: String, label: String = "_$!!$_", present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, completed: @escaping () -> Void = {}) { let _ = (DeviceAccess.authorizationStatus(subject: .contacts) |> take(1) |> deliverOnMainQueue).start(next: { value in diff --git a/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift b/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift index cd97dfd1cf..75b41c4ef3 100644 --- a/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift +++ b/submodules/TelegramUI/TelegramUI/PeerSelectionController.swift @@ -8,6 +8,7 @@ import TelegramPresentationData import ProgressNavigationButtonNode import AccountContext import SearchUI +import ChatListUI public final class PeerSelectionController: ViewController { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift b/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift index 54a5addd0b..48c6e23346 100644 --- a/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/PeerSelectionControllerNode.swift @@ -10,6 +10,7 @@ import AccountContext import SearchBarNode import SearchUI import ContactListUI +import ChatListUI final class PeerSelectionControllerNode: ASDisplayNode { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI/SettingsController.swift b/submodules/TelegramUI/TelegramUI/SettingsController.swift index 9bd97cc6ac..1e9ffb4884 100644 --- a/submodules/TelegramUI/TelegramUI/SettingsController.swift +++ b/submodules/TelegramUI/TelegramUI/SettingsController.swift @@ -26,6 +26,7 @@ import PassportUI import SearchUI import ItemListPeerItem import CallListUI +import ChatListUI private let maximumNumberOfAccounts = 3 @@ -1178,12 +1179,7 @@ public func settingsController(context: AccountContext, accountManager: AccountM actionsDisposable.dispose() } - let icon: UIImage? - if (useSpecialTabBarIcons()) { - icon = UIImage(bundleImageName: "Chat List/Tabs/NY/IconSettings") - } else { - icon = UIImage(bundleImageName: "Chat List/Tabs/IconSettings") - } + let icon = UIImage(bundleImageName: "Chat List/Tabs/IconSettings") let notificationsFromAllAccounts = accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.inAppNotificationSettings]) |> map { sharedData -> Bool in @@ -1388,7 +1384,7 @@ public func settingsController(context: AccountContext, accountManager: AccountM }) if let selectedAccount = selectedAccount, let sharedContext = sharedContext { let accountContext = sharedContext.makeTempAccountContext(account: selectedAccount) - let chatListController = ChatListController(context: accountContext, groupId: .root, controlsHistoryPreload: false, hideNetworkActivityStatus: true) + let chatListController = ChatListController(context: accountContext, groupId: .root, controlsHistoryPreload: false, hideNetworkActivityStatus: true, enableDebugActions: !GlobalExperimentalSettings.isAppStoreBuild) return chatListController } } diff --git a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift index 074767f9f6..48722fff9b 100644 --- a/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift +++ b/submodules/TelegramUI/TelegramUI/SharedAccountContext.swift @@ -9,6 +9,7 @@ import TelegramUIPreferences import AccountContext import DeviceLocationManager import LegacyUI +import ChatListUI private enum CallStatusText: Equatable { case none @@ -979,4 +980,20 @@ public final class SharedAccountContextImpl: SharedAccountContext { public func makeContactSelectionController(_ params: ContactSelectionControllerParams) -> ContactSelectionController { return ContactSelectionControllerImpl(params) } + + public func makeComposeController(context: AccountContext) -> ViewController { + return ComposeController(context: context) + } + + public func makeProxySettingsController(context: AccountContext) -> ViewController { + return proxySettingsController(context: context) + } + + public func makeLocalizationListController(context: AccountContext) -> ViewController { + return LocalizationListController(context: context) + } + + public func openAddContact(context: AccountContext, firstName: String, lastName: String, phoneNumber: String, label: String, present: @escaping (ViewController, Any?) -> Void, pushController: @escaping (ViewController) -> Void, completed: @escaping () -> Void) { + openAddContactImpl(context: context, firstName: firstName, lastName: lastName, phoneNumber: phoneNumber, label: label, present: present, pushController: pushController, completed: completed) + } } diff --git a/submodules/TelegramUI/TelegramUI/TelegramRootController.swift b/submodules/TelegramUI/TelegramUI/TelegramRootController.swift index 66eea1b12d..6e66991fa2 100644 --- a/submodules/TelegramUI/TelegramUI/TelegramRootController.swift +++ b/submodules/TelegramUI/TelegramUI/TelegramRootController.swift @@ -9,6 +9,7 @@ import TelegramUIPrivateModule import AccountContext import ContactListUI import CallListUI +import ChatListUI public final class TelegramRootController: NavigationController { private let context: AccountContext @@ -83,7 +84,7 @@ public final class TelegramRootController: NavigationController { public func addRootControllers(showCallsTab: Bool) { let tabBarController = TabBarController(navigationBarPresentationData: NavigationBarPresentationData(presentationData: self.presentationData), theme: TabBarControllerTheme(rootControllerTheme: self.presentationData.theme)) - let chatListController = ChatListController(context: self.context, groupId: .root, controlsHistoryPreload: true) + let chatListController = ChatListController(context: self.context, groupId: .root, controlsHistoryPreload: true, enableDebugActions: !GlobalExperimentalSettings.isAppStoreBuild) if let sharedContext = self.context.sharedContext as? SharedAccountContextImpl { chatListController.tabBarItem.badgeValue = sharedContext.switchingData.chatListBadge } diff --git a/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift b/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift index c41669e930..9b9628c012 100644 --- a/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ThemePreviewControllerNode.swift @@ -8,6 +8,7 @@ import TelegramCore import TelegramPresentationData import TelegramUIPreferences import AccountContext +import ChatListUI class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate { private let context: AccountContext diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index 9da046b6ac..b3605721bd 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -90,13 +90,6 @@ 09D304152173C0E900C00567 /* WatchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D304142173C0E900C00567 /* WatchManager.swift */; }; 09D304182173C15700C00567 /* WatchSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D304172173C15700C00567 /* WatchSettingsController.swift */; }; 09D96899221DE92600B1458A /* ID3ArtworkReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D96898221DE92600B1458A /* ID3ArtworkReader.swift */; }; - 09D9689D221F74F000B1458A /* ChatTitleActivityNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D9689C221F74F000B1458A /* ChatTitleActivityNode.swift */; }; - 09D9689F221F760900B1458A /* ChatTitleActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D9689E221F760900B1458A /* ChatTitleActivityContentNode.swift */; }; - 09D968A1221F7FF100B1458A /* ChatTypingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D968A0221F7FF100B1458A /* ChatTypingActivityContentNode.swift */; }; - 09D968A3221F800A00B1458A /* ChatUploadingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D968A2221F800A00B1458A /* ChatUploadingActivityContentNode.swift */; }; - 09D968A5221F801A00B1458A /* ChatPlayingActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D968A4221F801A00B1458A /* ChatPlayingActivityContentNode.swift */; }; - 09D968A7221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D968A6221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift */; }; - 09D968A9221F804700B1458A /* ChatRecordingVideoActivityContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09D968A8221F804700B1458A /* ChatRecordingVideoActivityContentNode.swift */; }; 09DD5D5021ECC3C400D7007A /* SuppressContactsWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */; }; 09DD5D5221ED175300D7007A /* WallpaperColorPickerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD5D5121ED175300D7007A /* WallpaperColorPickerNode.swift */; }; 09DD88E921BAF65E000766BC /* ItemListAddressItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09DD88E821BAF65E000766BC /* ItemListAddressItem.swift */; }; @@ -117,8 +110,6 @@ 09EDAD2C2211552F0012A50B /* AutodownloadMediaCategoryController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD2B2211552F0012A50B /* AutodownloadMediaCategoryController.swift */; }; 09EDAD2E221164440012A50B /* AutodownloadSizeLimitItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD2D221164440012A50B /* AutodownloadSizeLimitItem.swift */; }; 09EDAD30221164530012A50B /* AutodownloadDataUsagePickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09EDAD2F221164530012A50B /* AutodownloadDataUsagePickerItem.swift */; }; - 09F21563225C776100AEDF6D /* ChatListBadgeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F21562225C776000AEDF6D /* ChatListBadgeNode.swift */; }; - 09F21565225C83E100AEDF6D /* ChatListStatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F21564225C83E100AEDF6D /* ChatListStatusNode.swift */; }; 09F2158D225CF5BC00AEDF6D /* Pasteboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */; }; 09F664C021EAAFAF00AB7E26 /* ThemeColorsGridController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F664BF21EAAFAF00AB7E26 /* ThemeColorsGridController.swift */; }; 09F664C221EAAFCB00AB7E26 /* ThemeColorsGridControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09F664C121EAAFCB00AB7E26 /* ThemeColorsGridControllerNode.swift */; }; @@ -142,7 +133,6 @@ 9F06830B21A404C4001D8EDB /* NotificationExceptionSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F06830A21A404C4001D8EDB /* NotificationExceptionSettingsController.swift */; }; D000CABA21EE130D0011B15D /* MapResourceToAvatarSizes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CAB921EE130D0011B15D /* MapResourceToAvatarSizes.swift */; }; D000CABC21F158AD0011B15D /* PrepareSecretThumbnailData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D000CABB21F158AD0011B15D /* PrepareSecretThumbnailData.swift */; }; - D00580B321E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00580B221E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift */; }; D0068FA821760FA300D1B315 /* StoreDownloadedMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */; }; D007019C2029E8F2006B9E34 /* LegacyICloudFileController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D007019B2029E8F2006B9E34 /* LegacyICloudFileController.swift */; }; D007019E2029EFDD006B9E34 /* ICloudResources.swift in Sources */ = {isa = PBXBuildFile; fileRef = D007019D2029EFDD006B9E34 /* ICloudResources.swift */; }; @@ -207,7 +197,6 @@ D015E04F225D2E5900CB9E8A /* WebP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D015E04E225D2E5900CB9E8A /* WebP.framework */; }; D017734C22049BF800DA06A7 /* UpgradedAccounts.swift in Sources */ = {isa = PBXBuildFile; fileRef = D017734B22049BF800DA06A7 /* UpgradedAccounts.swift */; }; D01776BE1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01776BD1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift */; }; - D01847801FFBD12E00075256 /* ChatListPresentationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = D018477F1FFBD12E00075256 /* ChatListPresentationData.swift */; }; D01848E821A03BDA00B6DEBD /* ChatSearchState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01848E721A03BDA00B6DEBD /* ChatSearchState.swift */; }; D0185E882089ED5F005E1A6C /* ProxyListSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0185E872089ED5F005E1A6C /* ProxyListSettingsController.swift */; }; D0185E8A208A01AF005E1A6C /* ProxySettingsActionItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0185E89208A01AF005E1A6C /* ProxySettingsActionItem.swift */; }; @@ -284,11 +273,9 @@ D06350AE2229A7F800FA2B32 /* InChatPrefetchManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06350AD2229A7F800FA2B32 /* InChatPrefetchManager.swift */; }; D0642EFC1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0642EFB1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift */; }; D0671F2D2145AB28000A8AE7 /* LegacyAvatarPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0671F2C2145AB28000A8AE7 /* LegacyAvatarPicker.swift */; }; - D0684A041F6C3AD50059F570 /* ChatListTypingNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0684A031F6C3AD50059F570 /* ChatListTypingNode.swift */; }; D069F5D0212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D069F5CF212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift */; }; D06BB8821F58994B0084FC30 /* LegacyInstantVideoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06BB8811F58994B0084FC30 /* LegacyInstantVideoController.swift */; }; D06E0F8E1F79ABFB003CF3DD /* ChatLoadingNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E0F8D1F79ABFB003CF3DD /* ChatLoadingNode.swift */; }; - D06E4C312134910400088087 /* ChatListEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E4C302134910400088087 /* ChatListEmptyNode.swift */; }; D06E4C332134A59700088087 /* ThemeAccentColorActionSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E4C322134A59700088087 /* ThemeAccentColorActionSheet.swift */; }; D06E4C352134AE3C00088087 /* ThemeAutoNightSettingsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06E4C342134AE3C00088087 /* ThemeAutoNightSettingsController.swift */; }; D06F1EA41F6C0A5D00FE8B74 /* ChatHistorySearchContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D06F1EA31F6C0A5D00FE8B74 /* ChatHistorySearchContainerNode.swift */; }; @@ -309,7 +296,6 @@ D07ABBA5202A14BC003671DE /* LegacyImagePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07ABBA4202A14BC003671DE /* LegacyImagePicker.swift */; }; D07ABBAB202A1BD1003671DE /* LegacyWallpaperPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07ABBAA202A1BD1003671DE /* LegacyWallpaperPicker.swift */; }; D07BCBFE1F2B792300ED97AA /* LegacyComponents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D07BCBFD1F2B792300ED97AA /* LegacyComponents.framework */; }; - D07E413B208A432100FCA8F0 /* ChatListTitleProxyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E413A208A432100FCA8F0 /* ChatListTitleProxyNode.swift */; }; D07E413D208A494D00FCA8F0 /* ProxyServerActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07E413C208A494D00FCA8F0 /* ProxyServerActionSheetController.swift */; }; D081A9A922EB26AE0069C449 /* PhoneLabelController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081A9A822EB26AE0069C449 /* PhoneLabelController.swift */; }; D081E104217F57D2003CD921 /* LanguageLinkPreviewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D081E103217F57D2003CD921 /* LanguageLinkPreviewController.swift */; }; @@ -371,7 +357,6 @@ D09E77AB22FA5CEA00B9CCA7 /* Tuples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AA22FA5CEA00B9CCA7 /* Tuples.framework */; }; D09E77AD22FA5CEA00B9CCA7 /* UrlEscaping.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D09E77AC22FA5CEA00B9CCA7 /* UrlEscaping.framework */; }; D0A8998D217A294100759EE6 /* SaveIncomingMediaController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A8998C217A294100759EE6 /* SaveIncomingMediaController.swift */; }; - D0AA29AE1F72770D00C050AC /* ChatListItemStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA29AD1F72770D00C050AC /* ChatListItemStrings.swift */; }; D0AA840C1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */; }; D0AB262921C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB262821C307D7008F6685 /* ChatMessagePollBubbleContentNode.swift */; }; D0AB269E21D56A12008F6685 /* ChannelPermissionsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0AB269D21D56A12008F6685 /* ChannelPermissionsController.swift */; }; @@ -458,7 +443,6 @@ D0C12EB01F9A8D1300600BB2 /* ListMessageDateHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C12EAF1F9A8D1300600BB2 /* ListMessageDateHeader.swift */; }; D0C26D571FDF2388004ABF18 /* OpenChatMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C26D561FDF2388004ABF18 /* OpenChatMessage.swift */; }; D0C45E9F213FFAFD00988156 /* Lottie.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C45E9E213FFAFD00988156 /* Lottie.framework */; }; - D0C683FC21AD797F00A6CAD5 /* ChatListSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0C683FB21AD797F00A6CAD5 /* ChatListSelection.swift */; }; D0C9BFAD22FE316E00FAB518 /* ComposePollUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9BFAC22FE316E00FAB518 /* ComposePollUI.framework */; }; D0C9BFDF22FE349C00FAB518 /* AlertUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9BFDE22FE349C00FAB518 /* AlertUI.framework */; }; D0C9C00322FE37A500FAB518 /* TouchDownGesture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C00222FE37A500FAB518 /* TouchDownGesture.framework */; }; @@ -505,6 +489,11 @@ D0C9C9DE2302267200FAB518 /* SolidRoundedButtonNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9C9DD2302267200FAB518 /* SolidRoundedButtonNode.framework */; }; D0C9CA192302297C00FAB518 /* PasscodeUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CA182302297C00FAB518 /* PasscodeUI.framework */; }; D0C9CA8223022E3900FAB518 /* CallListUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CA8123022E3900FAB518 /* CallListUI.framework */; }; + D0C9CAFD2302370900FAB518 /* ChatListUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CAFC2302370900FAB518 /* ChatListUI.framework */; }; + D0C9CB422302B15500FAB518 /* ChatTitleActivityNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB412302B15500FAB518 /* ChatTitleActivityNode.framework */; }; + D0C9CB822302B38A00FAB518 /* DeleteChatPeerActionSheetItem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CB812302B38A00FAB518 /* DeleteChatPeerActionSheetItem.framework */; }; + D0C9CBB62302B65600FAB518 /* LanguageSuggestionUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBB52302B65600FAB518 /* LanguageSuggestionUI.framework */; }; + D0C9CBD72302C09000FAB518 /* TextSelectionNode.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0C9CBD62302C09000FAB518 /* TextSelectionNode.framework */; }; D0CAD90120AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CAD90020AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift */; }; D0CB27CF20C17A4A001ACF93 /* TermsOfServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CB27CE20C17A4A001ACF93 /* TermsOfServiceController.swift */; }; D0CB27D220C17A7F001ACF93 /* TermsOfServiceControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0CB27D120C17A7F001ACF93 /* TermsOfServiceControllerNode.swift */; }; @@ -590,7 +579,6 @@ D0EC6CCD1EB9F58800EBF1C3 /* DeclareEncodables.swift in Sources */ = {isa = PBXBuildFile; fileRef = D073CE701DCBF23F007511FD /* DeclareEncodables.swift */; }; D0EC6CCE1EB9F58800EBF1C3 /* AccountContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05811931DD5F9380057C769 /* AccountContext.swift */; }; D0EC6CD11EB9F58800EBF1C3 /* UrlHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = D023836F1DDF0462004018B6 /* UrlHandling.swift */; }; - D0EC6CD51EB9F58800EBF1C3 /* StoredMessageFromSearchPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749541E1082770057C89A /* StoredMessageFromSearchPeer.swift */; }; D0EC6CD71EB9F58800EBF1C3 /* EmojiUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01D6BFB1E42AB3C006151C6 /* EmojiUtils.swift */; }; D0EC6CD91EB9F58800EBF1C3 /* ValidateAddressNameInteractive.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E305A41E5B2BFB00D7A3A2 /* ValidateAddressNameInteractive.swift */; }; D0EC6CDC1EB9F58800EBF1C3 /* TelegramAccountAuxiliaryMethods.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A8AA1E82D83E00B4C64C /* TelegramAccountAuxiliaryMethods.swift */; }; @@ -621,12 +609,6 @@ D0EC6D311EB9F58800EBF1C3 /* RadialTimeoutNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00C7CE51E378FD00080C3D5 /* RadialTimeoutNode.swift */; }; D0EC6D3A1EB9F58800EBF1C3 /* AudioWaveformNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0568AAC1DF198130022E7DA /* AudioWaveformNode.swift */; }; D0EC6D3B1EB9F58800EBF1C3 /* EditableTokenListNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BC38621E3F9EFA0044D6FE /* EditableTokenListNode.swift */; }; - D0EC6D4B1EB9F58800EBF1C3 /* ChatListNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF781DCA226F00761F81 /* ChatListNode.swift */; }; - D0EC6D4D1EB9F58800EBF1C3 /* ChatListHoleItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DFB1D6B8A880046BCD6 /* ChatListHoleItem.swift */; }; - D0EC6D4E1EB9F58800EBF1C3 /* ChatListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DFC1D6B8A880046BCD6 /* ChatListItem.swift */; }; - D0EC6D501EB9F58800EBF1C3 /* ChatListNodeEntries.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF7A1DCA24BF00761F81 /* ChatListNodeEntries.swift */; }; - D0EC6D511EB9F58800EBF1C3 /* ChatListViewTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF7C1DCA273400761F81 /* ChatListViewTransition.swift */; }; - D0EC6D521EB9F58800EBF1C3 /* ChatListNodeLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D07CFF7E1DCA308500761F81 /* ChatListNodeLocation.swift */; }; D0EC6D531EB9F58800EBF1C3 /* ChatHistoryViewForLocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E7A1BE1D8C24B900C37A6F /* ChatHistoryViewForLocation.swift */; }; D0EC6D541EB9F58800EBF1C3 /* ChatHistoryEntriesForView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E7A1C01D8C258D00C37A6F /* ChatHistoryEntriesForView.swift */; }; D0EC6D551EB9F58800EBF1C3 /* PreparedChatHistoryViewTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E7A1C21D8C25D600C37A6F /* PreparedChatHistoryViewTransition.swift */; }; @@ -654,12 +636,6 @@ D0EC6D731EB9F58800EBF1C3 /* AuthorizationSequenceSignUpController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF61E79593500117362 /* AuthorizationSequenceSignUpController.swift */; }; D0EC6D741EB9F58800EBF1C3 /* AuthorizationSequenceSignUpControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F53BF81E79593F00117362 /* AuthorizationSequenceSignUpControllerNode.swift */; }; D0EC6D751EB9F58800EBF1C3 /* TelegramRootController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05174C21EAE583800A1BF36 /* TelegramRootController.swift */; }; - D0EC6D761EB9F58800EBF1C3 /* ChatListController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DF81D6B8A880046BCD6 /* ChatListController.swift */; }; - D0EC6D771EB9F58800EBF1C3 /* ChatListControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69DF91D6B8A880046BCD6 /* ChatListControllerNode.swift */; }; - D0EC6D781EB9F58800EBF1C3 /* ChatListTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749611E11DB240057C89A /* ChatListTitleView.swift */; }; - D0EC6D791EB9F58800EBF1C3 /* ChatListTitleLockView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0575AEA1E9FD579006F2541 /* ChatListTitleLockView.swift */; }; - D0EC6D7A1EB9F58800EBF1C3 /* ChatListSearchContainerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E071D6B8A9C0046BCD6 /* ChatListSearchContainerNode.swift */; }; - D0EC6D7B1EB9F58800EBF1C3 /* ChatListRecentPeersListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D049EAED1E44BB3200A2CD3A /* ChatListRecentPeersListItem.swift */; }; D0EC6D7F1EB9F58800EBF1C3 /* HashtagSearchController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749501E1067E40057C89A /* HashtagSearchController.swift */; }; D0EC6D801EB9F58800EBF1C3 /* HashtagSearchControllerNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D01749521E1068820057C89A /* HashtagSearchControllerNode.swift */; }; D0EC6D811EB9F58800EBF1C3 /* ChatController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F69E0E1D6B8ACF0046BCD6 /* ChatController.swift */; }; @@ -866,7 +842,6 @@ D0FA08C8204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C7204982DC00DD23FC /* ChatTextInputActionButtonsNode.swift */; }; D0FA08CA2049BEAC00DD23FC /* ChatEmptyNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FA08C92049BEAC00DD23FC /* ChatEmptyNode.swift */; }; D0FAB13E22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB13D22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift */; }; - D0FBE84F2273395C00B33B52 /* ChatListArchiveInfoItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FBE84E2273395C00B33B52 /* ChatListArchiveInfoItem.swift */; }; D0FC194D201F82A000FEDBB2 /* OpenResolvedUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC194C201F82A000FEDBB2 /* OpenResolvedUrl.swift */; }; D0FC408E1D5B8E7500261D9D /* TelegramUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FC408D1D5B8E7500261D9D /* TelegramUITests.swift */; }; D0FE4DE41F0AEBB900E8A0B3 /* SharedVideoContextManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FE4DE31F0AEBB900E8A0B3 /* SharedVideoContextManager.swift */; }; @@ -955,13 +930,6 @@ 09D304142173C0E900C00567 /* WatchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchManager.swift; sourceTree = ""; }; 09D304172173C15700C00567 /* WatchSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchSettingsController.swift; sourceTree = ""; }; 09D96898221DE92600B1458A /* ID3ArtworkReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ID3ArtworkReader.swift; sourceTree = ""; }; - 09D9689C221F74F000B1458A /* ChatTitleActivityNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTitleActivityNode.swift; sourceTree = ""; }; - 09D9689E221F760900B1458A /* ChatTitleActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTitleActivityContentNode.swift; sourceTree = ""; }; - 09D968A0221F7FF100B1458A /* ChatTypingActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTypingActivityContentNode.swift; sourceTree = ""; }; - 09D968A2221F800A00B1458A /* ChatUploadingActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatUploadingActivityContentNode.swift; sourceTree = ""; }; - 09D968A4221F801A00B1458A /* ChatPlayingActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatPlayingActivityContentNode.swift; sourceTree = ""; }; - 09D968A6221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecordingVoiceActivityContentNode.swift; sourceTree = ""; }; - 09D968A8221F804700B1458A /* ChatRecordingVideoActivityContentNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRecordingVideoActivityContentNode.swift; sourceTree = ""; }; 09DD5D4F21ECC3C400D7007A /* SuppressContactsWarning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuppressContactsWarning.swift; sourceTree = ""; }; 09DD5D5121ED175300D7007A /* WallpaperColorPickerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WallpaperColorPickerNode.swift; sourceTree = ""; }; 09DD88E821BAF65E000766BC /* ItemListAddressItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemListAddressItem.swift; sourceTree = ""; }; @@ -982,8 +950,6 @@ 09EDAD2B2211552F0012A50B /* AutodownloadMediaCategoryController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadMediaCategoryController.swift; sourceTree = ""; }; 09EDAD2D221164440012A50B /* AutodownloadSizeLimitItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadSizeLimitItem.swift; sourceTree = ""; }; 09EDAD2F221164530012A50B /* AutodownloadDataUsagePickerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutodownloadDataUsagePickerItem.swift; sourceTree = ""; }; - 09F21562225C776000AEDF6D /* ChatListBadgeNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListBadgeNode.swift; sourceTree = ""; }; - 09F21564225C83E100AEDF6D /* ChatListStatusNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListStatusNode.swift; sourceTree = ""; }; 09F2158C225CF5BC00AEDF6D /* Pasteboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pasteboard.swift; sourceTree = ""; }; 09F664BF21EAAFAF00AB7E26 /* ThemeColorsGridController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeColorsGridController.swift; sourceTree = ""; }; 09F664C121EAAFCB00AB7E26 /* ThemeColorsGridControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeColorsGridControllerNode.swift; sourceTree = ""; }; @@ -1014,7 +980,6 @@ D002A0DA1E9C190700A81812 /* SoftwareVideoThumbnailLayer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SoftwareVideoThumbnailLayer.swift; sourceTree = ""; }; D002A0DC1E9CD52A00A81812 /* ChatMediaInputRecentGifsItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputRecentGifsItem.swift; sourceTree = ""; }; D003702D1DA43052004308D3 /* ItemListAvatarAndNameItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemListAvatarAndNameItem.swift; sourceTree = ""; }; - D00580B221E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteChatPeerActionSheetItem.swift; sourceTree = ""; }; D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreDownloadedMedia.swift; sourceTree = ""; }; D007019B2029E8F2006B9E34 /* LegacyICloudFileController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyICloudFileController.swift; sourceTree = ""; }; D007019D2029EFDD006B9E34 /* ICloudResources.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ICloudResources.swift; sourceTree = ""; }; @@ -1088,13 +1053,10 @@ D015E04E225D2E5900CB9E8A /* WebP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = WebP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D01749501E1067E40057C89A /* HashtagSearchController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchController.swift; sourceTree = ""; }; D01749521E1068820057C89A /* HashtagSearchControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HashtagSearchControllerNode.swift; sourceTree = ""; }; - D01749541E1082770057C89A /* StoredMessageFromSearchPeer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoredMessageFromSearchPeer.swift; sourceTree = ""; }; D01749561E1087CC0057C89A /* ChatBotStartInputPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBotStartInputPanelNode.swift; sourceTree = ""; }; - D01749611E11DB240057C89A /* ChatListTitleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListTitleView.swift; sourceTree = ""; }; D017734B22049BF800DA06A7 /* UpgradedAccounts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpgradedAccounts.swift; sourceTree = ""; }; D01776BD1F1E76920044446D /* PeerMediaCollectionSectionsNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerMediaCollectionSectionsNode.swift; sourceTree = ""; }; D0177B831DFB095000A5083A /* FileMediaResourceStatus.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FileMediaResourceStatus.swift; sourceTree = ""; }; - D018477F1FFBD12E00075256 /* ChatListPresentationData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListPresentationData.swift; sourceTree = ""; }; D01848E721A03BDA00B6DEBD /* ChatSearchState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSearchState.swift; sourceTree = ""; }; D0185E872089ED5F005E1A6C /* ProxyListSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyListSettingsController.swift; sourceTree = ""; }; D0185E89208A01AF005E1A6C /* ProxySettingsActionItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxySettingsActionItem.swift; sourceTree = ""; }; @@ -1194,7 +1156,6 @@ D048B338203C532800038D05 /* ChatMediaInputPane.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMediaInputPane.swift; sourceTree = ""; }; D049EAE11E447AD500A2CD3A /* StickersChatInputContextPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StickersChatInputContextPanelNode.swift; sourceTree = ""; }; D049EAE51E44AD5600A2CD3A /* ChatMediaInputMetaSectionItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputMetaSectionItemNode.swift; sourceTree = ""; }; - D049EAED1E44BB3200A2CD3A /* ChatListRecentPeersListItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListRecentPeersListItem.swift; sourceTree = ""; }; D049EAF21E44DE2500A2CD3A /* AuthorizationSequenceController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceController.swift; sourceTree = ""; }; D04B4D121EEA0A6500711AF6 /* ChatMessageMapBubbleContentNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageMapBubbleContentNode.swift; sourceTree = ""; }; D04BB2B21E44E56200650E93 /* AuthorizationSequenceSplashController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthorizationSequenceSplashController.swift; sourceTree = ""; }; @@ -1223,7 +1184,6 @@ D056CD751FF2A30900880D28 /* ChatSwipeToReplyRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatSwipeToReplyRecognizer.swift; sourceTree = ""; }; D056CD771FF2A6EE00880D28 /* ChatMessageSwipeToReplyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageSwipeToReplyNode.swift; sourceTree = ""; }; D056CD791FF3CC2A00880D28 /* ListMessagePlaybackOverlayNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListMessagePlaybackOverlayNode.swift; sourceTree = ""; }; - D0575AEA1E9FD579006F2541 /* ChatListTitleLockView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListTitleLockView.swift; sourceTree = ""; }; D0575AEC1E9FF1AD006F2541 /* ChatMediaInputTrendingPane.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputTrendingPane.swift; sourceTree = ""; }; D0575AEE1E9FF881006F2541 /* ChatMediaInputTrendingItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMediaInputTrendingItem.swift; sourceTree = ""; }; D0575AF61EA0ED4F006F2541 /* ChatMessageInstantVideoItemNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageInstantVideoItemNode.swift; sourceTree = ""; }; @@ -1251,13 +1211,11 @@ D06350AD2229A7F800FA2B32 /* InChatPrefetchManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InChatPrefetchManager.swift; sourceTree = ""; }; D0642EFB1F3E1E7B00792790 /* ChatHistoryNavigationButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatHistoryNavigationButtons.swift; sourceTree = ""; }; D0671F2C2145AB28000A8AE7 /* LegacyAvatarPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyAvatarPicker.swift; sourceTree = ""; }; - D0684A031F6C3AD50059F570 /* ChatListTypingNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListTypingNode.swift; sourceTree = ""; }; D06879561DB8F22200424BBD /* FetchCachedRepresentations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchCachedRepresentations.swift; sourceTree = ""; }; D069F5CF212700B90000565A /* StickerPanePeerSpecificSetupGridItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickerPanePeerSpecificSetupGridItem.swift; sourceTree = ""; }; D06BB8811F58994B0084FC30 /* LegacyInstantVideoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LegacyInstantVideoController.swift; sourceTree = ""; }; D06E0F8D1F79ABFB003CF3DD /* ChatLoadingNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatLoadingNode.swift; sourceTree = ""; }; D06E4AC31E84806300627D1D /* FetchPhotoLibraryImageResource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FetchPhotoLibraryImageResource.swift; sourceTree = ""; }; - D06E4C302134910400088087 /* ChatListEmptyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListEmptyNode.swift; sourceTree = ""; }; D06E4C322134A59700088087 /* ThemeAccentColorActionSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeAccentColorActionSheet.swift; sourceTree = ""; }; D06E4C342134AE3C00088087 /* ThemeAutoNightSettingsController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemeAutoNightSettingsController.swift; sourceTree = ""; }; D06F1EA31F6C0A5D00FE8B74 /* ChatHistorySearchContainerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatHistorySearchContainerNode.swift; sourceTree = ""; }; @@ -1290,12 +1248,7 @@ D07BCBFD1F2B792300ED97AA /* LegacyComponents.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = LegacyComponents.framework; path = "../LegacyComponents/build/Debug-iphoneos/LegacyComponents.framework"; sourceTree = ""; }; D07CFF731DCA207200761F81 /* PeerSelectionController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerSelectionController.swift; sourceTree = ""; }; D07CFF751DCA224100761F81 /* PeerSelectionControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PeerSelectionControllerNode.swift; sourceTree = ""; }; - D07CFF781DCA226F00761F81 /* ChatListNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListNode.swift; sourceTree = ""; }; - D07CFF7A1DCA24BF00761F81 /* ChatListNodeEntries.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListNodeEntries.swift; sourceTree = ""; }; - D07CFF7C1DCA273400761F81 /* ChatListViewTransition.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListViewTransition.swift; sourceTree = ""; }; - D07CFF7E1DCA308500761F81 /* ChatListNodeLocation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListNodeLocation.swift; sourceTree = ""; }; D07CFF861DCAAE5E00761F81 /* ForwardAccessoryPanelNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForwardAccessoryPanelNode.swift; sourceTree = ""; }; - D07E413A208A432100FCA8F0 /* ChatListTitleProxyNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListTitleProxyNode.swift; sourceTree = ""; }; D07E413C208A494D00FCA8F0 /* ProxyServerActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyServerActionSheetController.swift; sourceTree = ""; }; D081A9A822EB26AE0069C449 /* PhoneLabelController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneLabelController.swift; sourceTree = ""; }; D081E103217F57D2003CD921 /* LanguageLinkPreviewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageLinkPreviewController.swift; sourceTree = ""; }; @@ -1377,7 +1330,6 @@ D0A11BFD1E7840A50081CE03 /* ChangePhoneNumberControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChangePhoneNumberControllerNode.swift; sourceTree = ""; }; D0A749961E3AA25200AD786E /* NotificationSoundSelection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationSoundSelection.swift; sourceTree = ""; }; D0A8998C217A294100759EE6 /* SaveIncomingMediaController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveIncomingMediaController.swift; sourceTree = ""; }; - D0AA29AD1F72770D00C050AC /* ChatListItemStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListItemStrings.swift; sourceTree = ""; }; D0AA840B1FEB2BA3005C6E91 /* OverlayPlayerControlsNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayPlayerControlsNode.swift; sourceTree = ""; }; D0AB0BB01D6718DA002C78E7 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; }; D0AB0BB21D6718EB002C78E7 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; @@ -1492,7 +1444,6 @@ D0C50E3D1E93D09200F62E39 /* NotificationItemContainerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationItemContainerNode.swift; sourceTree = ""; }; D0C50E3F1E93D3B000F62E39 /* ChatMessageNotificationItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatMessageNotificationItem.swift; sourceTree = ""; }; D0C50E431E93FCD200F62E39 /* notification.caf */ = {isa = PBXFileReference; lastKnownFileType = file; name = notification.caf; path = TelegramUI/Sounds/notification.caf; sourceTree = ""; }; - D0C683FB21AD797F00A6CAD5 /* ChatListSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListSelection.swift; sourceTree = ""; }; D0C932351E0988C60074F044 /* ChatButtonKeyboardInputNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatButtonKeyboardInputNode.swift; sourceTree = ""; }; D0C932371E09E0EA0074F044 /* ChatBotInfoItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatBotInfoItem.swift; sourceTree = ""; }; D0C9323B1E0B4AE90074F044 /* DataAndStorageSettingsController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataAndStorageSettingsController.swift; sourceTree = ""; }; @@ -1543,6 +1494,11 @@ D0C9C9DD2302267200FAB518 /* SolidRoundedButtonNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = SolidRoundedButtonNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0C9CA182302297C00FAB518 /* PasscodeUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PasscodeUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0C9CA8123022E3900FAB518 /* CallListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = CallListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CAFC2302370900FAB518 /* ChatListUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ChatListUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB412302B15500FAB518 /* ChatTitleActivityNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ChatTitleActivityNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CB812302B38A00FAB518 /* DeleteChatPeerActionSheetItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DeleteChatPeerActionSheetItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBB52302B65600FAB518 /* LanguageSuggestionUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = LanguageSuggestionUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBD62302C09000FAB518 /* TextSelectionNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = TextSelectionNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D0CAD90020AEECAC00ACD96E /* ChatEditInterfaceMessageState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatEditInterfaceMessageState.swift; sourceTree = ""; }; D0CB27CE20C17A4A001ACF93 /* TermsOfServiceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceController.swift; sourceTree = ""; }; D0CB27D120C17A7F001ACF93 /* TermsOfServiceControllerNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TermsOfServiceControllerNode.swift; sourceTree = ""; }; @@ -1717,11 +1673,6 @@ D0F69CD61D6B87D30046BCD6 /* MediaManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MediaManager.swift; sourceTree = ""; }; D0F69DB91D6B88190046BCD6 /* TelegramUI.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = TelegramUI.xcconfig; path = TelegramUI/Config/TelegramUI.xcconfig; sourceTree = ""; }; D0F69DC41D6B89E10046BCD6 /* RadialProgressNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RadialProgressNode.swift; sourceTree = ""; }; - D0F69DF81D6B8A880046BCD6 /* ChatListController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListController.swift; sourceTree = ""; }; - D0F69DF91D6B8A880046BCD6 /* ChatListControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListControllerNode.swift; sourceTree = ""; }; - D0F69DFB1D6B8A880046BCD6 /* ChatListHoleItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListHoleItem.swift; sourceTree = ""; }; - D0F69DFC1D6B8A880046BCD6 /* ChatListItem.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListItem.swift; sourceTree = ""; }; - D0F69E071D6B8A9C0046BCD6 /* ChatListSearchContainerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatListSearchContainerNode.swift; sourceTree = ""; }; D0F69E0E1D6B8ACF0046BCD6 /* ChatController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatController.swift; sourceTree = ""; }; D0F69E0F1D6B8ACF0046BCD6 /* ChatControllerInteraction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatControllerInteraction.swift; sourceTree = ""; }; D0F69E101D6B8ACF0046BCD6 /* ChatControllerNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatControllerNode.swift; sourceTree = ""; }; @@ -1765,7 +1716,6 @@ D0FA0AC41E77431A005BB9B7 /* InstalledStickerPacksController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = InstalledStickerPacksController.swift; sourceTree = ""; }; D0FA35001EA6127000E56FFA /* StorageUsageController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageUsageController.swift; sourceTree = ""; }; D0FAB13D22EBC25300D8BED2 /* ChatMessageBubbleBackdrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageBubbleBackdrop.swift; sourceTree = ""; }; - D0FBE84E2273395C00B33B52 /* ChatListArchiveInfoItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListArchiveInfoItem.swift; sourceTree = ""; }; D0FC194C201F82A000FEDBB2 /* OpenResolvedUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenResolvedUrl.swift; sourceTree = ""; }; D0FC40821D5B8E7400261D9D /* TelegramUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TelegramUI.h; sourceTree = ""; }; D0FC40831D5B8E7400261D9D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -1780,6 +1730,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D0C9CBD72302C09000FAB518 /* TextSelectionNode.framework in Frameworks */, + D0C9CBB62302B65600FAB518 /* LanguageSuggestionUI.framework in Frameworks */, + D0C9CB822302B38A00FAB518 /* DeleteChatPeerActionSheetItem.framework in Frameworks */, + D0C9CB422302B15500FAB518 /* ChatTitleActivityNode.framework in Frameworks */, + D0C9CAFD2302370900FAB518 /* ChatListUI.framework in Frameworks */, D0C9CA8223022E3900FAB518 /* CallListUI.framework in Frameworks */, D0C9CA192302297C00FAB518 /* PasscodeUI.framework in Frameworks */, D0C9C9DE2302267200FAB518 /* SolidRoundedButtonNode.framework in Frameworks */, @@ -2045,13 +2000,6 @@ 09D9689B221F74AA00B1458A /* Title Activity Indicator */ = { isa = PBXGroup; children = ( - 09D9689C221F74F000B1458A /* ChatTitleActivityNode.swift */, - 09D9689E221F760900B1458A /* ChatTitleActivityContentNode.swift */, - 09D968A0221F7FF100B1458A /* ChatTypingActivityContentNode.swift */, - 09D968A2221F800A00B1458A /* ChatUploadingActivityContentNode.swift */, - 09D968A6221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift */, - 09D968A8221F804700B1458A /* ChatRecordingVideoActivityContentNode.swift */, - 09D968A4221F801A00B1458A /* ChatPlayingActivityContentNode.swift */, ); name = "Title Activity Indicator"; sourceTree = ""; @@ -2083,7 +2031,6 @@ isa = PBXGroup; children = ( D09250051FE5371D003F693F /* GlobalExperimentalSettings.swift */, - D01749541E1082770057C89A /* StoredMessageFromSearchPeer.swift */, D0068FA721760FA300D1B315 /* StoreDownloadedMedia.swift */, D0EC55A2210231D600D1992C /* SearchPeerMembers.swift */, 09CE950D2237E45E00A7D2C3 /* CachedFaqInstantPage.swift */, @@ -2156,13 +2103,6 @@ name = Share; sourceTree = ""; }; - D0104F261F471702004E4881 /* Instant Page Gallery */ = { - isa = PBXGroup; - children = ( - ); - name = "Instant Page Gallery"; - sourceTree = ""; - }; D01590A922BD46690017C33E /* Animation */ = { isa = PBXGroup; children = ( @@ -2608,25 +2548,6 @@ name = "Instant Page"; sourceTree = ""; }; - D07CFF771DCA226200761F81 /* Chat List Node */ = { - isa = PBXGroup; - children = ( - D07CFF781DCA226F00761F81 /* ChatListNode.swift */, - D0F69DFB1D6B8A880046BCD6 /* ChatListHoleItem.swift */, - D0F69DFC1D6B8A880046BCD6 /* ChatListItem.swift */, - D0FBE84E2273395C00B33B52 /* ChatListArchiveInfoItem.swift */, - D0AA29AD1F72770D00C050AC /* ChatListItemStrings.swift */, - D07CFF7A1DCA24BF00761F81 /* ChatListNodeEntries.swift */, - D07CFF7C1DCA273400761F81 /* ChatListViewTransition.swift */, - D07CFF7E1DCA308500761F81 /* ChatListNodeLocation.swift */, - D0684A031F6C3AD50059F570 /* ChatListTypingNode.swift */, - D018477F1FFBD12E00075256 /* ChatListPresentationData.swift */, - 09F21562225C776000AEDF6D /* ChatListBadgeNode.swift */, - 09F21564225C83E100AEDF6D /* ChatListStatusNode.swift */, - ); - name = "Chat List Node"; - sourceTree = ""; - }; D081E102217F57B2003CD921 /* Language Link Preview */ = { isa = PBXGroup; children = ( @@ -2659,6 +2580,11 @@ D08D45281D5E340200A7428A /* Frameworks */ = { isa = PBXGroup; children = ( + D0C9CBD62302C09000FAB518 /* TextSelectionNode.framework */, + D0C9CBB52302B65600FAB518 /* LanguageSuggestionUI.framework */, + D0C9CB812302B38A00FAB518 /* DeleteChatPeerActionSheetItem.framework */, + D0C9CB412302B15500FAB518 /* ChatTitleActivityNode.framework */, + D0C9CAFC2302370900FAB518 /* ChatListUI.framework */, D0C9CA8123022E3900FAB518 /* CallListUI.framework */, D0C9CA182302297C00FAB518 /* PasscodeUI.framework */, D0C9C9DD2302267200FAB518 /* SolidRoundedButtonNode.framework */, @@ -2798,13 +2724,6 @@ name = Frameworks; sourceTree = ""; }; - D093D81E20699A6000BC3599 /* Form */ = { - isa = PBXGroup; - children = ( - ); - name = Form; - sourceTree = ""; - }; D099EA1D1DE744EE001AF5A8 /* Horizontal List */ = { isa = PBXGroup; children = ( @@ -3415,7 +3334,6 @@ children = ( D0F69DBF1D6B89AE0046BCD6 /* Nodes */, D0F69DD31D6B8A160046BCD6 /* Controllers */, - D07CFF771DCA226200761F81 /* Chat List Node */, D0E7A1BB1D8C17EB00C37A6F /* Chat History Node */, ); name = Components; @@ -3435,7 +3353,6 @@ D0B2F76B2052A7D600D3BFB9 /* SinglePhoneInputNode.swift */, D056CD6F1FF147B000880D28 /* IconButtonNode.swift */, 09F85BA621E7DA5F00D73170 /* BlurredImageNode.swift */, - D00580B221E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift */, 09749BCE21F236F2008FDDE9 /* ModernCheckNode.swift */, ); name = Nodes; @@ -3452,7 +3369,6 @@ isa = PBXGroup; children = ( D01B27931E38F3920022A4C0 /* Item List */, - D093D81E20699A6000BC3599 /* Form */, ); name = Controllers; sourceTree = ""; @@ -3462,7 +3378,7 @@ children = ( D0F69DE71D6B8A590046BCD6 /* Authorization */, D05174C11EAE582A00A1BF36 /* Root */, - D0F69DF61D6B8A720046BCD6 /* Chat List */, + D017494F1E1067C00057C89A /* Hashtag Search */, D0F69E0D1D6B8AB90046BCD6 /* Chat */, D04281F2200E5A70009DDE36 /* Chat Recent Actions */, D00DE6961E8E8E21003F0D76 /* Share */, @@ -3495,39 +3411,6 @@ name = Authorization; sourceTree = ""; }; - D0F69DF61D6B8A720046BCD6 /* Chat List */ = { - isa = PBXGroup; - children = ( - D0F69DF81D6B8A880046BCD6 /* ChatListController.swift */, - D0F69DF91D6B8A880046BCD6 /* ChatListControllerNode.swift */, - D01749611E11DB240057C89A /* ChatListTitleView.swift */, - D0575AEA1E9FD579006F2541 /* ChatListTitleLockView.swift */, - D07E413A208A432100FCA8F0 /* ChatListTitleProxyNode.swift */, - D06E4C302134910400088087 /* ChatListEmptyNode.swift */, - D017494F1E1067C00057C89A /* Hashtag Search */, - D0C683FB21AD797F00A6CAD5 /* ChatListSelection.swift */, - D0F69E051D6B8A8B0046BCD6 /* Search */, - ); - name = "Chat List"; - sourceTree = ""; - }; - D0F69E051D6B8A8B0046BCD6 /* Search */ = { - isa = PBXGroup; - children = ( - D0F69E071D6B8A9C0046BCD6 /* ChatListSearchContainerNode.swift */, - D0F69E061D6B8A930046BCD6 /* Recent Peers */, - ); - name = Search; - sourceTree = ""; - }; - D0F69E061D6B8A930046BCD6 /* Recent Peers */ = { - isa = PBXGroup; - children = ( - D049EAED1E44BB3200A2CD3A /* ChatListRecentPeersListItem.swift */, - ); - name = "Recent Peers"; - sourceTree = ""; - }; D0F69E0D1D6B8AB90046BCD6 /* Chat */ = { isa = PBXGroup; children = ( @@ -3662,7 +3545,6 @@ D0F69E4F1D6B8BC40046BCD6 /* Gallery */, D0575AF81EA0FD94006F2541 /* Avatar Gallery */, D0EEE99F2165583B001292A6 /* Document */, - D0104F261F471702004E4881 /* Instant Page Gallery */, D07827CC1E03F32C00071108 /* Instant Page */, D0D748041E7AF62000F4B1F6 /* Stickers */, D020A9D81FEAE611008C66F7 /* Player */, @@ -4114,12 +3996,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D0684A041F6C3AD50059F570 /* ChatListTypingNode.swift in Sources */, D0383EE6207D299600C45548 /* EmojisChatInputPanelItem.swift in Sources */, D00817E322B47A14008A895F /* TGPresentationAutoNightPreferences.m in Sources */, D0E1199E229809B6008CAE3A /* ChannelDiscussionGroupActionSheetItem.swift in Sources */, 09EDAD2A220DA6A40012A50B /* VolumeButtons.swift in Sources */, - 09D968A9221F804700B1458A /* ChatRecordingVideoActivityContentNode.swift in Sources */, D0E1199A2297F9C6008CAE3A /* ChannelDiscussionGroupSetupController.swift in Sources */, D083491C209361DC008CFD52 /* AvatarGalleryItemFooterContentNode.swift in Sources */, 090E778A22A9F23C00CD99F5 /* ChannelOwnershipTransferController.swift in Sources */, @@ -4159,7 +4039,6 @@ D0EC6CCE1EB9F58800EBF1C3 /* AccountContext.swift in Sources */, D0EC6CD11EB9F58800EBF1C3 /* UrlHandling.swift in Sources */, 09F85BA521E7821500D73170 /* ThemeGridSelectionPanelNode.swift in Sources */, - D0EC6CD51EB9F58800EBF1C3 /* StoredMessageFromSearchPeer.swift in Sources */, 09CE950E2237E45E00A7D2C3 /* CachedFaqInstantPage.swift in Sources */, D0EC6CD71EB9F58800EBF1C3 /* EmojiUtils.swift in Sources */, D0EC6CD91EB9F58800EBF1C3 /* ValidateAddressNameInteractive.swift in Sources */, @@ -4178,8 +4057,6 @@ D0E8B8BF20447A4600605593 /* SecretChatKeyControllerNode.swift in Sources */, D02B2B9820810DA00062476B /* StickerPaneSearchStickerItem.swift in Sources */, D020A9DC1FEAE6E7008C66F7 /* OverlayPlayerControllerNode.swift in Sources */, - 09D968A1221F7FF100B1458A /* ChatTypingActivityContentNode.swift in Sources */, - 09D968A3221F800A00B1458A /* ChatUploadingActivityContentNode.swift in Sources */, 090E778622A9B95A00CD99F5 /* PeersNearbyController.swift in Sources */, D04ECD721FFBF22B00DE9029 /* OpenUrl.swift in Sources */, D056CD7A1FF3CC2A00880D28 /* ListMessagePlaybackOverlayNode.swift in Sources */, @@ -4215,7 +4092,6 @@ D0EC6D091EB9F58800EBF1C3 /* info.c in Sources */, D0EC6D0A1EB9F58800EBF1C3 /* internal.c in Sources */, D0EC6D0B1EB9F58800EBF1C3 /* opusfile.c in Sources */, - D01847801FFBD12E00075256 /* ChatListPresentationData.swift in Sources */, 09C500242142BA6400EF253E /* ItemListWebsiteItem.swift in Sources */, D0EC6D0C1EB9F58800EBF1C3 /* stream.c in Sources */, 09FFBCD72281BB2D00C33B4B /* ChatTextLinkEditController.swift in Sources */, @@ -4223,7 +4099,6 @@ D0AB269E21D56A12008F6685 /* ChannelPermissionsController.swift in Sources */, D0B69C3920EBB397003632C7 /* ChatMessageInteractiveInstantVideoNode.swift in Sources */, 09F79A0D21C88E8900820234 /* LegacyWebSearchEditor.swift in Sources */, - 09F21565225C83E100AEDF6D /* ChatListStatusNode.swift in Sources */, D056CD701FF147B000880D28 /* IconButtonNode.swift in Sources */, D0F760DB222034910074F7E5 /* ChannelStatsController.swift in Sources */, D0FA08CA2049BEAC00DD23FC /* ChatEmptyNode.swift in Sources */, @@ -4239,7 +4114,6 @@ D0CE67941F7DB45100FFB557 /* ChatMessageContactBubbleContentNode.swift in Sources */, 09749BCD21F23139008FDDE9 /* WallpaperGalleryDecorationNode.swift in Sources */, 09EDAD26220D30980012A50B /* AutodownloadConnectionTypeController.swift in Sources */, - 09D968A7221F803500B1458A /* ChatRecordingVoiceActivityContentNode.swift in Sources */, D05D8B3A2192FC460064586F /* LocalizationListController.swift in Sources */, D0943AFE1FDAE454001522CC /* ChatMultipleAvatarsNavigationNode.swift in Sources */, D0B21B15220D85DD003F741D /* TabBarAccountSwitchController.swift in Sources */, @@ -4283,15 +4157,9 @@ D0CE8CE51F6F354400AA2DB0 /* ChatTextInputAccessoryItem.swift in Sources */, D097C26820DD0A1D007BB4B8 /* PeerReportController.swift in Sources */, 09F664C621EB400A00AB7E26 /* ThemeGridSearchContentNode.swift in Sources */, - D0EC6D4B1EB9F58800EBF1C3 /* ChatListNode.swift in Sources */, - D0EC6D4D1EB9F58800EBF1C3 /* ChatListHoleItem.swift in Sources */, 0962E67921B67A9800245FD9 /* ChatMessageAnimatedStickerItemNode.swift in Sources */, - D0EC6D4E1EB9F58800EBF1C3 /* ChatListItem.swift in Sources */, D0B2F76A2052920D00D3BFB9 /* UserInfoEditingPhoneItem.swift in Sources */, D0AEAE272080D6970013176E /* PaneSearchBarNode.swift in Sources */, - D0EC6D501EB9F58800EBF1C3 /* ChatListNodeEntries.swift in Sources */, - D0EC6D511EB9F58800EBF1C3 /* ChatListViewTransition.swift in Sources */, - D0EC6D521EB9F58800EBF1C3 /* ChatListNodeLocation.swift in Sources */, D0EC6D531EB9F58800EBF1C3 /* ChatHistoryViewForLocation.swift in Sources */, D06BB8821F58994B0084FC30 /* LegacyInstantVideoController.swift in Sources */, D0EC6D541EB9F58800EBF1C3 /* ChatHistoryEntriesForView.swift in Sources */, @@ -4316,7 +4184,6 @@ D0EC6D5D1EB9F58800EBF1C3 /* ListMessageSnippetItemNode.swift in Sources */, D0EC6D5E1EB9F58800EBF1C3 /* ListMessageHoleItem.swift in Sources */, D0EC6D5F1EB9F58800EBF1C3 /* GridMessageItem.swift in Sources */, - 09F21563225C776100AEDF6D /* ChatListBadgeNode.swift in Sources */, D00817CB22B47A14008A895F /* WatchBridge.swift in Sources */, D0EC6D601EB9F58800EBF1C3 /* GridHoleItem.swift in Sources */, D0EC6D611EB9F58800EBF1C3 /* GridMessageSelectionNode.swift in Sources */, @@ -4333,7 +4200,6 @@ D0EC6D691EB9F58800EBF1C3 /* AuthorizationSequenceSplashController.swift in Sources */, 09E4A805223D4A5A0038140F /* OpenSettings.swift in Sources */, D0EC6D6A1EB9F58800EBF1C3 /* AuthorizationSequenceSplashControllerNode.swift in Sources */, - D0C683FC21AD797F00A6CAD5 /* ChatListSelection.swift in Sources */, D0EC6D6D1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryController.swift in Sources */, D0EC6D6E1EB9F58800EBF1C3 /* AuthorizationSequencePhoneEntryControllerNode.swift in Sources */, D0B85C211FF70BEC00E795B4 /* AuthorizationSequenceAwaitingAccountResetControllerNode.swift in Sources */, @@ -4349,15 +4215,9 @@ 091954792294754E00E11046 /* AnimatedStickerUtils.swift in Sources */, D0EC6D741EB9F58800EBF1C3 /* AuthorizationSequenceSignUpControllerNode.swift in Sources */, D0EC6D751EB9F58800EBF1C3 /* TelegramRootController.swift in Sources */, - D0EC6D761EB9F58800EBF1C3 /* ChatListController.swift in Sources */, - D0EC6D771EB9F58800EBF1C3 /* ChatListControllerNode.swift in Sources */, - D0EC6D781EB9F58800EBF1C3 /* ChatListTitleView.swift in Sources */, D0F6800A1EE750EE000E5906 /* ChannelBannedMemberController.swift in Sources */, - D0EC6D791EB9F58800EBF1C3 /* ChatListTitleLockView.swift in Sources */, D03AA4DF202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift in Sources */, D00817D622B47A14008A895F /* TGProxyItem.m in Sources */, - D0EC6D7A1EB9F58800EBF1C3 /* ChatListSearchContainerNode.swift in Sources */, - D0EC6D7B1EB9F58800EBF1C3 /* ChatListRecentPeersListItem.swift in Sources */, 0910B0ED21FA178C00F8F87D /* WallpaperPreviewMedia.swift in Sources */, D0EC6D7F1EB9F58800EBF1C3 /* HashtagSearchController.swift in Sources */, D0EC6D801EB9F58800EBF1C3 /* HashtagSearchControllerNode.swift in Sources */, @@ -4410,7 +4270,6 @@ 09D304152173C0E900C00567 /* WatchManager.swift in Sources */, 9F06830921A404AB001D8EDB /* NotificationExceptionControllerNode.swift in Sources */, D035734B22B5CCCA00F0920D /* LegacyBuffer.swift in Sources */, - 09D9689D221F74F000B1458A /* ChatTitleActivityNode.swift in Sources */, D0EC6D991EB9F58900EBF1C3 /* ChatMessageMediaBubbleContentNode.swift in Sources */, D0EC6D9A1EB9F58900EBF1C3 /* ChatMessageReplyInfoNode.swift in Sources */, D0FE4DE41F0AEBB900E8A0B3 /* SharedVideoContextManager.swift in Sources */, @@ -4420,7 +4279,6 @@ D0750C8222B2E4EE00BE5F6E /* SharedWakeupManager.swift in Sources */, D0EC6D9D1EB9F58900EBF1C3 /* ChatMessageTextBubbleContentNode.swift in Sources */, D00817DE22B47A14008A895F /* TGBridgeServer.m in Sources */, - D0FBE84F2273395C00B33B52 /* ChatListArchiveInfoItem.swift in Sources */, 09F664D021EBCFB900AB7E26 /* WallpaperCropNode.swift in Sources */, D0EC6D9E1EB9F58900EBF1C3 /* ChatMessageWebpageBubbleContentNode.swift in Sources */, D0750C8722B2E76300BE5F6E /* ShareExtensionContext.swift in Sources */, @@ -4440,7 +4298,6 @@ D0EC6DAB1EB9F58900EBF1C3 /* ChatInterfaceStateAccessoryPanels.swift in Sources */, D0EC6DAC1EB9F58900EBF1C3 /* ChatInterfaceStateInputPanels.swift in Sources */, D056CD761FF2A30900880D28 /* ChatSwipeToReplyRecognizer.swift in Sources */, - D00580B321E4B51600CB7CD3 /* DeleteChatPeerActionSheetItem.swift in Sources */, D091C7A41F8EBB1E00D7DE13 /* ChatPresentationData.swift in Sources */, 09A218F522A15F1400DE6898 /* ThemeSettingsAppIconItem.swift in Sources */, D0EC6DAD1EB9F58900EBF1C3 /* ChatInterfaceStateNavigationButtons.swift in Sources */, @@ -4458,7 +4315,6 @@ D0EC6DB51EB9F58900EBF1C3 /* ReplyAccessoryPanelNode.swift in Sources */, D0EC6DB61EB9F58900EBF1C3 /* ForwardAccessoryPanelNode.swift in Sources */, D0EC6DB71EB9F58900EBF1C3 /* EditAccessoryPanelNode.swift in Sources */, - D06E4C312134910400088087 /* ChatListEmptyNode.swift in Sources */, D0EC6DB81EB9F58900EBF1C3 /* WebpagePreviewAccessoryPanelNode.swift in Sources */, D0EC6DB91EB9F58900EBF1C3 /* ChatInputNode.swift in Sources */, 099529AC21CDBBB200805E13 /* QRCode.swift in Sources */, @@ -4551,14 +4407,12 @@ D0EC6DF91EB9F58900EBF1C3 /* PeerMediaCollectionInterfaceStateButtons.swift in Sources */, 09F664C821EB4A2600AB7E26 /* ThemeGridSearchItem.swift in Sources */, 09A218D9229EE1B600DE6898 /* HorizontalStickerGridItem.swift in Sources */, - D07E413B208A432100FCA8F0 /* ChatListTitleProxyNode.swift in Sources */, 09EC0DED22CB583C00E7185B /* TextLinkHandling.swift in Sources */, D08984F02114AE0C00918162 /* DataPrivacySettingsController.swift in Sources */, D0EC6DFB1EB9F58900EBF1C3 /* AvatarGalleryController.swift in Sources */, D00817DB22B47A14008A895F /* LegacyChatImport.swift in Sources */, 09EDAD2C2211552F0012A50B /* AutodownloadMediaCategoryController.swift in Sources */, 090B48C82200BCA8005083FA /* WallpaperUploadManager.swift in Sources */, - 09D968A5221F801A00B1458A /* ChatPlayingActivityContentNode.swift in Sources */, D0E8B8BB2044780600605593 /* ItemListSecretChatKeyItem.swift in Sources */, D06F31E62135A41C001A0F12 /* ThemeSettingsBrightnessItem.swift in Sources */, D01590BD22BDAEBC0017C33E /* DDSImage.cpp in Sources */, @@ -4611,7 +4465,6 @@ D0EC6E321EB9F58900EBF1C3 /* CreateGroupController.swift in Sources */, D0EC55A3210231D600D1992C /* SearchPeerMembers.swift in Sources */, D0EC6E331EB9F58900EBF1C3 /* CreateChannelController.swift in Sources */, - D0AA29AE1F72770D00C050AC /* ChatListItemStrings.swift in Sources */, D0EC6E351EB9F58900EBF1C3 /* ItemListAvatarAndNameItem.swift in Sources */, D00ACA5A2022897D0045D427 /* ProcessedPeerRestrictionText.swift in Sources */, D04203152037162700490EA5 /* MediaInputPaneTrendingItem.swift in Sources */, @@ -4730,7 +4583,6 @@ 09F664C221EAAFCB00AB7E26 /* ThemeColorsGridControllerNode.swift in Sources */, D0BCC3D420404CC7008126C2 /* ChatMessageActionSheetController.swift in Sources */, 0957DE2322DE28FB001B4D57 /* ThemePreviewController.swift in Sources */, - 09D9689F221F760900B1458A /* ChatTitleActivityContentNode.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/submodules/TextSelectionNode/TextSelectionNode/Info.plist b/submodules/TextSelectionNode/TextSelectionNode/Info.plist new file mode 100644 index 0000000000..e1fe4cfb7b --- /dev/null +++ b/submodules/TextSelectionNode/TextSelectionNode/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + + diff --git a/submodules/TextSelectionNode/TextSelectionNode/TextSelectionNode.h b/submodules/TextSelectionNode/TextSelectionNode/TextSelectionNode.h new file mode 100644 index 0000000000..4f7466a61b --- /dev/null +++ b/submodules/TextSelectionNode/TextSelectionNode/TextSelectionNode.h @@ -0,0 +1,19 @@ +// +// TextSelectionNode.h +// TextSelectionNode +// +// Created by Peter on 8/13/19. +// Copyright © 2019 Telegram Messenger LLP. All rights reserved. +// + +#import + +//! Project version number for TextSelectionNode. +FOUNDATION_EXPORT double TextSelectionNodeVersionNumber; + +//! Project version string for TextSelectionNode. +FOUNDATION_EXPORT const unsigned char TextSelectionNodeVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/submodules/TextSelectionNode/TextSelectionNode_Xcode.xcodeproj/project.pbxproj b/submodules/TextSelectionNode/TextSelectionNode_Xcode.xcodeproj/project.pbxproj new file mode 100644 index 0000000000..b9dcb875f4 --- /dev/null +++ b/submodules/TextSelectionNode/TextSelectionNode_Xcode.xcodeproj/project.pbxproj @@ -0,0 +1,520 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + D0C9CBCC2302C00600FAB518 /* TextSelectionNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C9CBCA2302C00600FAB518 /* TextSelectionNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + D0C9CBC72302C00600FAB518 /* TextSelectionNode.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = TextSelectionNode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0C9CBCA2302C00600FAB518 /* TextSelectionNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TextSelectionNode.h; sourceTree = ""; }; + D0C9CBCB2302C00600FAB518 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D0C9CBC42302C00600FAB518 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + D0C9CBBD2302C00600FAB518 = { + isa = PBXGroup; + children = ( + D0C9CBC92302C00600FAB518 /* TextSelectionNode */, + D0C9CBC82302C00600FAB518 /* Products */, + ); + sourceTree = ""; + }; + D0C9CBC82302C00600FAB518 /* Products */ = { + isa = PBXGroup; + children = ( + D0C9CBC72302C00600FAB518 /* TextSelectionNode.framework */, + ); + name = Products; + sourceTree = ""; + }; + D0C9CBC92302C00600FAB518 /* TextSelectionNode */ = { + isa = PBXGroup; + children = ( + D0C9CBCA2302C00600FAB518 /* TextSelectionNode.h */, + D0C9CBCB2302C00600FAB518 /* Info.plist */, + ); + path = TextSelectionNode; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + D0C9CBC22302C00600FAB518 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D0C9CBCC2302C00600FAB518 /* TextSelectionNode.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + D0C9CBC62302C00600FAB518 /* TextSelectionNode */ = { + isa = PBXNativeTarget; + buildConfigurationList = D0C9CBCF2302C00600FAB518 /* Build configuration list for PBXNativeTarget "TextSelectionNode" */; + buildPhases = ( + D0C9CBC22302C00600FAB518 /* Headers */, + D0C9CBC32302C00600FAB518 /* Sources */, + D0C9CBC42302C00600FAB518 /* Frameworks */, + D0C9CBC52302C00600FAB518 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = TextSelectionNode; + productName = TextSelectionNode; + productReference = D0C9CBC72302C00600FAB518 /* TextSelectionNode.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D0C9CBBE2302C00600FAB518 /* Project object */ = { + isa = PBXProject; + attributes = { + DefaultBuildSystemTypeForWorkspace = Latest; + LastUpgradeCheck = 1030; + ORGANIZATIONNAME = "Telegram Messenger LLP"; + TargetAttributes = { + D0C9CBC62302C00600FAB518 = { + CreatedOnToolsVersion = 10.3; + }; + }; + }; + buildConfigurationList = D0C9CBC12302C00600FAB518 /* Build configuration list for PBXProject "TextSelectionNode_Xcode" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = D0C9CBBD2302C00600FAB518; + productRefGroup = D0C9CBC82302C00600FAB518 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + D0C9CBC62302C00600FAB518 /* TextSelectionNode */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + D0C9CBC52302C00600FAB518 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + D0C9CBC32302C00600FAB518 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + D0C9CBCD2302C00600FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugAppStoreLLC; + }; + D0C9CBCE2302C00600FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CBD02302C00600FAB518 /* DebugAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TextSelectionNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugAppStoreLLC; + }; + D0C9CBD12302C00600FAB518 /* ReleaseAppStoreLLC */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TextSelectionNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseAppStoreLLC; + }; + D0C9CBD22302C06100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = DebugHockeyapp; + }; + D0C9CBD32302C06100FAB518 /* DebugHockeyapp */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TextSelectionNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = DebugHockeyapp; + }; + D0C9CBD42302C06E00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = ReleaseHockeyappInternal; + }; + D0C9CBD52302C06E00FAB518 /* ReleaseHockeyappInternal */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Manual; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = ""; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + PRODUCT_BUNDLE_IDENTIFIER = org.telegram.TextSelectionNode; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = ReleaseHockeyappInternal; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D0C9CBC12302C00600FAB518 /* Build configuration list for PBXProject "TextSelectionNode_Xcode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CBCD2302C00600FAB518 /* DebugAppStoreLLC */, + D0C9CBD22302C06100FAB518 /* DebugHockeyapp */, + D0C9CBCE2302C00600FAB518 /* ReleaseAppStoreLLC */, + D0C9CBD42302C06E00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; + D0C9CBCF2302C00600FAB518 /* Build configuration list for PBXNativeTarget "TextSelectionNode" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D0C9CBD02302C00600FAB518 /* DebugAppStoreLLC */, + D0C9CBD32302C06100FAB518 /* DebugHockeyapp */, + D0C9CBD12302C00600FAB518 /* ReleaseAppStoreLLC */, + D0C9CBD52302C06E00FAB518 /* ReleaseHockeyappInternal */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = ReleaseAppStoreLLC; + }; +/* End XCConfigurationList section */ + }; + rootObject = D0C9CBBE2302C00600FAB518 /* Project object */; +}