From 0b781d977ec8a994d1856dad8cfa08c286a0dd19 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 3 Jun 2022 21:16:22 +0400 Subject: [PATCH] Various improvements --- Telegram/BUILD | 6 +- .../Premium.alticon/Premium@2x.png | Bin 0 -> 6639 bytes .../Premium.alticon/Premium@3x.png | Bin 0 -> 10965 bytes .../PremiumBlack.alticon/PremiumBlack@2x.png | Bin 0 -> 9767 bytes .../PremiumBlack.alticon/PremiumBlack@3x.png | Bin 0 -> 18173 bytes .../PremiumCherry@2x.png | Bin 20928 -> 0 bytes .../PremiumCherry@3x.png | Bin 35243 -> 0 bytes .../PremiumCosmic@2x.png | Bin 24354 -> 0 bytes .../PremiumCosmic@3x.png | Bin 49163 -> 0 bytes .../PremiumDuck.alticon/PremiumDuck@2x.png | Bin 19921 -> 0 bytes .../PremiumDuck.alticon/PremiumDuck@3x.png | Bin 33622 -> 0 bytes .../PremiumTurbo.alticon/PremiumTurbo@2x.png | Bin 0 -> 8740 bytes .../PremiumTurbo.alticon/PremiumTurbo@3x.png | Bin 0 -> 16405 bytes .../Telegram-iOS/en.lproj/Localizable.strings | 5 +- submodules/AuthTransferUI/BUILD | 1 - .../AuthTransferConfirmationScreen.swift | 1 - .../ChatListUI/Sources/ChatContextMenus.swift | 33 +- .../Sources/ChatListController.swift | 17 +- .../Sources/Node/ChatListItem.swift | 7 +- .../Sources/SheetComponent.swift | 6 + ...tControllerExtractedPresentationNode.swift | 16 +- .../GameUI/Sources/GameControllerNode.swift | 4 +- .../Sources/InAppPurchaseManager.swift | 1 - .../Sources/TGMediaPickerGalleryVideoItem.m | 8 + submodules/PremiumUI/BUILD | 1 + .../Sources/PageIndicatorComponent.swift | 2 +- .../Sources/PhoneDemoComponent.swift | 2 +- .../PremiumUI/Sources/PremiumDemoScreen.swift | 12 +- .../Sources/PremiumIntroScreen.swift | 36 +- .../Sources/PremiumLimitScreen.swift | 16 +- .../Sources/PremiumLimitsListScreen.swift | 1 + .../Sources/PremiumStarComponent.swift | 2 +- .../Sources/ReactionsCarouselComponent.swift | 14 +- .../Sources/StickersCarouselComponent.swift | 65 ++- submodules/PromptUI/BUILD | 24 + .../PromptUI/Sources/PromptController.swift | 424 ++++++++++++++++++ .../ReactionContextBackgroundNode.swift | 37 +- .../Sources/ReactionContextNode.swift | 48 +- .../Sources/ReactionSelectionNode.swift | 29 +- .../Themes/ThemeSettingsAppIconItem.swift | 37 +- .../Sources/ShareController.swift | 14 +- .../Sources/ShareControllerNode.swift | 3 +- .../ShareItems/Sources/ShareItems.swift | 65 +-- submodules/StickerPackPreviewUI/BUILD | 1 + .../Sources/StickerPackScreen.swift | 98 +++- .../Peers/ChatListFiltering.swift | 3 - .../Stickers/SearchStickers.swift | 27 +- .../Resources/PresentationResourceKey.swift | 1 - .../Resources/PresentationResourcesChat.swift | 34 -- .../Contents.json | 12 + .../ReactionsBg.pdf | 344 ++++++++++++++ .../Contents.json | 12 + .../ReactionsFg.pdf | 127 ++++++ .../TelegramUI/Sources/AppDelegate.swift | 6 +- .../TelegramUI/Sources/LegacyCamera.swift | 9 +- .../Sources/ShareExtensionContext.swift | 16 +- submodules/WebUI/BUILD | 1 + .../WebUI/Sources/WebAppController.swift | 28 ++ 58 files changed, 1488 insertions(+), 168 deletions(-) create mode 100644 Telegram/Telegram-iOS/Premium.alticon/Premium@2x.png create mode 100644 Telegram/Telegram-iOS/Premium.alticon/Premium@3x.png create mode 100644 Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@2x.png create mode 100644 Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@3x.png delete mode 100644 Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@2x.png delete mode 100644 Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@3x.png delete mode 100644 Telegram/Telegram-iOS/PremiumCosmic.alticon/PremiumCosmic@2x.png delete mode 100644 Telegram/Telegram-iOS/PremiumCosmic.alticon/PremiumCosmic@3x.png delete mode 100644 Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@2x.png delete mode 100644 Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@3x.png create mode 100644 Telegram/Telegram-iOS/PremiumTurbo.alticon/PremiumTurbo@2x.png create mode 100644 Telegram/Telegram-iOS/PremiumTurbo.alticon/PremiumTurbo@3x.png create mode 100644 submodules/PromptUI/BUILD create mode 100644 submodules/PromptUI/Sources/PromptController.swift create mode 100644 submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/ReactionsBg.pdf create mode 100644 submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/Contents.json create mode 100644 submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/ReactionsFg.pdf diff --git a/Telegram/BUILD b/Telegram/BUILD index 83f04b0dcf..c8c41abea2 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -298,9 +298,9 @@ alternate_icon_folders = [ "WhiteFilledIcon", "New1", "New2", - "PremiumCosmic", - "PremiumCherry", - "PremiumDuck", + "Premium", + "PremiumBlack", + "PremiumTurbo", ] [ diff --git a/Telegram/Telegram-iOS/Premium.alticon/Premium@2x.png b/Telegram/Telegram-iOS/Premium.alticon/Premium@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..00ea76d714b1934f27bcf50ca429c2a233640aa9 GIT binary patch literal 6639 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 literal 0 HcmV?d00001 diff --git a/Telegram/Telegram-iOS/Premium.alticon/Premium@3x.png b/Telegram/Telegram-iOS/Premium.alticon/Premium@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1a67519593f5fea187a459d5038b33fe020401f2 GIT binary patch literal 10965 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 literal 0 HcmV?d00001 diff --git a/Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@2x.png b/Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb953d3546c3117950e08ce8855b1c91d8b97db3 GIT binary patch literal 9767 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 B)K35a literal 0 HcmV?d00001 diff --git a/Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@3x.png b/Telegram/Telegram-iOS/PremiumBlack.alticon/PremiumBlack@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a3833ef0c77f2fd658fc72368aa1d95f505617ad GIT binary patch literal 18173 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 literal 0 HcmV?d00001 diff --git a/Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@2x.png b/Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@2x.png deleted file mode 100644 index 1552a49b63c381e6b7d97f6425af3a22a6c35eb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20928 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 diff --git a/Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@3x.png b/Telegram/Telegram-iOS/PremiumCherry.alticon/PremiumCherry@3x.png deleted file mode 100644 index 78b61d2481b49cdcf1fd9c27dc84c6c21a92439d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35243 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 Hu0mjfb6Zgs diff --git a/Telegram/Telegram-iOS/PremiumCosmic.alticon/PremiumCosmic@2x.png b/Telegram/Telegram-iOS/PremiumCosmic.alticon/PremiumCosmic@2x.png deleted file mode 100644 index e077e61bf4a40c6d271f1170c3bfc35dc7491a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24354 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 h9m%eL103A3e*KTNNNAJi91f5htIm@ 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 diff --git a/Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@2x.png b/Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@2x.png deleted file mode 100644 index d50c51620357c160ed05ed492b8b6145e44b0257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19921 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 UOM-x?2><{907*qoM6N<$f*>CrmH+?% diff --git a/Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@3x.png b/Telegram/Telegram-iOS/PremiumDuck.alticon/PremiumDuck@3x.png deleted file mode 100644 index c24790716f5e6b5f613321efad8b36ed5574d58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33622 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�e1{VLd(%b1v*-Vs!;Vsab=;bn8#hJw@iYs+UHJ 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 take(1) + context.engine.peers.recentlySearchedPeers() |> take(1), + context.engine.data.get( + TelegramEngine.EngineData.Item.Peer.Peer(id: context.account.peerId), + TelegramEngine.EngineData.Item.Configuration.UserLimits(isPremium: false), + TelegramEngine.EngineData.Item.Configuration.UserLimits(isPremium: true) + ) ) - |> mapToSignal { peerGroup, recentlySearchedPeers -> Signal<[ContextMenuItem], NoError> in + |> mapToSignal { peerGroup, recentlySearchedPeers, limitsData -> Signal<[ContextMenuItem], NoError> in let location: TogglePeerChatPinnedLocation var chatListFilter: ChatListFilter? if case let .chatList(filter) = source, let chatFilter = filter { @@ -243,6 +248,30 @@ func chatContextMenuItems(context: AccountContext, peerId: PeerId, promoInfo: Ch return generateTintedImage(image: UIImage(bundleImageName: imageName), color: theme.contextMenu.primaryColor) }, action: { c, f in c.dismiss(completion: { + let isPremium = limitsData.0?.isPremium ?? false + let (_, limits, premiumLimits) = limitsData + + let limit = limits.maxFolderChatsCount + let premiumLimit = premiumLimits.maxFolderChatsCount + + let count = data.includePeers.peers.count - 1 + if count >= premiumLimit { + let controller = PremiumLimitScreen(context: context, subject: .chatsPerFolder, count: Int32(count), action: {}) + chatListController?.push(controller) + return + } else if count >= limit && !isPremium { + var replaceImpl: ((ViewController) -> Void)? + let controller = PremiumLimitScreen(context: context, subject: .chatsPerFolder, count: Int32(count), action: { + let controller = PremiumIntroScreen(context: context, source: .chatsPerFolder) + replaceImpl?(controller) + }) + replaceImpl = { [weak controller] c in + controller?.replace(with: c) + } + chatListController?.push(controller) + return + } + let _ = (context.engine.peers.updateChatListFiltersInteractively { filters in var filters = filters for i in 0 ..< filters.count { diff --git a/submodules/ChatListUI/Sources/ChatListController.swift b/submodules/ChatListUI/Sources/ChatListController.swift index 49736d94ae..7fbf92b2c0 100644 --- a/submodules/ChatListUI/Sources/ChatListController.swift +++ b/submodules/ChatListUI/Sources/ChatListController.swift @@ -265,7 +265,22 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController strongSelf.chatListDisplayNode.containerNode.currentItemNode.scrollToPosition(.top) case let .known(offset): if offset <= navigationBarSearchContentHeight + 1.0 && strongSelf.chatListDisplayNode.containerNode.currentItemNode.chatListFilter != nil { - strongSelf.selectTab(id: .all) + let _ = (strongSelf.context.engine.peers.currentChatListFilters() + |> deliverOnMainQueue).start(next: { [weak self] filters in + guard let strongSelf = self else { + return + } + let targetTab: ChatListFilterTabEntryId + let firstFilter = filters.first ?? .allChats + switch firstFilter { + case .allChats: + targetTab = .all + case let .filter(id, _, _, _): + targetTab = .filter(id) + } + + strongSelf.selectTab(id: targetTab) + }) } else { if let searchContentNode = strongSelf.searchContentNode { searchContentNode.updateExpansionProgress(1.0, animated: true) diff --git a/submodules/ChatListUI/Sources/Node/ChatListItem.swift b/submodules/ChatListUI/Sources/Node/ChatListItem.swift index a9ee17e93e..313f0ff86e 100644 --- a/submodules/ChatListUI/Sources/Node/ChatListItem.swift +++ b/submodules/ChatListUI/Sources/Node/ChatListItem.swift @@ -2169,7 +2169,8 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { videoNode.canAttachContent = true videoNode.play() - self.contextContainer.insertSubnode(videoNode, aboveSubnode: self.avatarNode) +// self.contextContainer.insertSubnode(videoNode, aboveSubnode: self.avatarNode) + self.avatarNode.addSubnode(videoNode) self.videoNode = videoNode } } else if let videoNode = self.videoNode { @@ -2179,7 +2180,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { if let videoNode = self.videoNode { videoNode.updateLayout(size: self.avatarNode.frame.size, transition: .immediate) - videoNode.frame = self.avatarNode.frame + videoNode.frame = self.avatarNode.bounds } } @@ -2218,7 +2219,7 @@ class ChatListItemNode: ItemListRevealOptionsItemNode { avatarFrame.origin.x = leftInset - avatarLeftInset + editingOffset + 10.0 + offset transition.updateFrame(node: self.avatarNode, frame: avatarFrame) if let videoNode = self.videoNode { - transition.updateFrame(node: videoNode, frame: avatarFrame) + transition.updateFrame(node: videoNode, frame: CGRect(origin: .zero, size: avatarFrame.size)) } var onlineFrame = self.onlineNode.frame diff --git a/submodules/Components/SheetComponent/Sources/SheetComponent.swift b/submodules/Components/SheetComponent/Sources/SheetComponent.swift index bb79db3b77..80bdfc3a67 100644 --- a/submodules/Components/SheetComponent/Sources/SheetComponent.swift +++ b/submodules/Components/SheetComponent/Sources/SheetComponent.swift @@ -173,6 +173,7 @@ public final class SheetComponent: Component { } } + private var currentAvailableSize: CGSize? func update(component: SheetComponent, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { component.animateOut.connect { [weak self] completion in guard let strongSelf = self else { @@ -206,6 +207,11 @@ public final class SheetComponent: Component { self.scrollView.contentInset = UIEdgeInsets(top: max(0.0, availableSize.height - contentSize.height) + contentSize.height, left: 0.0, bottom: 0.0, right: 0.0) self.ignoreScrolling = false + if let currentAvailableSize = self.currentAvailableSize, currentAvailableSize.height != availableSize.height { + self.scrollView.contentOffset = CGPoint(x: 0.0, y: -(availableSize.height - contentSize.height)) + } + self.currentAvailableSize = availableSize + if environment[SheetComponentEnvironment.self].value.isDisplaying, !self.previousIsDisplaying, let _ = transition.userData(ViewControllerComponentContainer.AnimateInTransition.self) { self.animateIn() } else if !environment[SheetComponentEnvironment.self].value.isDisplaying, self.previousIsDisplaying, let _ = transition.userData(ViewControllerComponentContainer.AnimateOutTransition.self) { diff --git a/submodules/ContextUI/Sources/ContextControllerExtractedPresentationNode.swift b/submodules/ContextUI/Sources/ContextControllerExtractedPresentationNode.swift index d54c82f468..aecd585a1e 100644 --- a/submodules/ContextUI/Sources/ContextControllerExtractedPresentationNode.swift +++ b/submodules/ContextUI/Sources/ContextControllerExtractedPresentationNode.swift @@ -555,8 +555,16 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo var actionsFrame = CGRect(origin: CGPoint(x: actionsSideInset, y: contentRect.maxY + contentActionsSpacing), size: actionsSize) + var contentVerticalOffset: CGFloat = 0.0 if keepInPlace, case .extracted = self.source { actionsFrame.origin.y = contentRect.minY - contentActionsSpacing - actionsFrame.height + let statusBarHeight = (layout.statusBarHeight ?? 0.0) + if actionsFrame.origin.y < statusBarHeight { + let updatedActionsOriginY = statusBarHeight + contentActionsSpacing + let delta = updatedActionsOriginY - actionsFrame.origin.y + actionsFrame.origin.y = updatedActionsOriginY + contentVerticalOffset = delta + } } if centerActionsHorizontally { actionsFrame.origin.x = floor(contentParentGlobalFrame.minX + contentRect.midX - actionsFrame.width / 2.0) @@ -593,14 +601,18 @@ final class ContextControllerExtractedPresentationNode: ASDisplayNode, ContextCo transition.updateFrame(node: self.actionsStackNode, frame: actionsFrame, beginWithCurrentState: true) if let contentNode = contentNode { - contentTransition.updateFrame(node: contentNode, frame: CGRect(origin: CGPoint(x: contentParentGlobalFrame.minX + contentRect.minX - contentNode.containingItem.contentRect.minX, y: contentRect.minY - contentNode.containingItem.contentRect.minY), size: contentNode.containingItem.view.bounds.size), beginWithCurrentState: true) + contentTransition.updateFrame(node: contentNode, frame: CGRect(origin: CGPoint(x: contentParentGlobalFrame.minX + contentRect.minX - contentNode.containingItem.contentRect.minX, y: contentRect.minY - contentNode.containingItem.contentRect.minY + contentVerticalOffset), size: contentNode.containingItem.view.bounds.size), beginWithCurrentState: true) } let contentHeight: CGFloat if self.actionsStackNode.topPositionLock != nil { contentHeight = layout.size.height } else { - contentHeight = actionsFrame.maxY + bottomInset + layout.intrinsicInsets.bottom + if keepInPlace, case .extracted = self.source { + contentHeight = (layout.statusBarHeight ?? 0.0) + actionsFrame.height + abs(actionsFrame.minY) + bottomInset + layout.intrinsicInsets.bottom + } else { + contentHeight = actionsFrame.maxY + bottomInset + layout.intrinsicInsets.bottom + } } let contentSize = CGSize(width: layout.size.width, height: contentHeight) diff --git a/submodules/GameUI/Sources/GameControllerNode.swift b/submodules/GameUI/Sources/GameControllerNode.swift index 5ef9eab990..f86105cecf 100644 --- a/submodules/GameUI/Sources/GameControllerNode.swift +++ b/submodules/GameUI/Sources/GameControllerNode.swift @@ -150,9 +150,11 @@ final class GameControllerNode: ViewControllerTracingNode { if let strongSelf = self, let message = strongSelf.message { let signals = peerIds.map { TelegramEngine(account: account).messages.forwardGameWithScore(messageId: message.id, to: $0, as: nil) } return .single(.preparing(false)) + |> castError(ShareControllerError.self) |> then( combineLatest(signals) - |> mapToSignal { _ -> Signal in return .complete() } + |> castError(ShareControllerError.self) + |> mapToSignal { _ -> Signal in return .complete() } ) |> then(.single(.done)) } else { diff --git a/submodules/InAppPurchaseManager/Sources/InAppPurchaseManager.swift b/submodules/InAppPurchaseManager/Sources/InAppPurchaseManager.swift index a00809bbd9..dc4a8ab663 100644 --- a/submodules/InAppPurchaseManager/Sources/InAppPurchaseManager.swift +++ b/submodules/InAppPurchaseManager/Sources/InAppPurchaseManager.swift @@ -80,7 +80,6 @@ public final class InAppPurchaseManager: NSObject { self.productRequest = productRequest } - public var availableProducts: Signal<[Product], NoError> { if self.products.isEmpty && self.productRequest == nil { self.requestProducts() diff --git a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItem.m b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItem.m index fd6ca066a1..42b91ab52f 100644 --- a/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItem.m +++ b/submodules/LegacyComponents/Sources/TGMediaPickerGalleryVideoItem.m @@ -169,6 +169,14 @@ return self.backingItem.asset; } +- (SSignal *)avAsset +{ + if ([self.asset isKindOfClass:[TGCameraCapturedVideo class]]) + return ((TGCameraCapturedVideo *)self.asset).avAsset; + + return nil; +} + - (NSString *)uniqueId { if (self.asset != nil) diff --git a/submodules/PremiumUI/BUILD b/submodules/PremiumUI/BUILD index 956e69ada8..7cf7d94251 100644 --- a/submodules/PremiumUI/BUILD +++ b/submodules/PremiumUI/BUILD @@ -48,6 +48,7 @@ swift_library( "//submodules/MediaPlayer:UniversalMediaPlayer", "//submodules/TelegramUniversalVideoContent:TelegramUniversalVideoContent", "//submodules/RadialStatusNode:RadialStatusNode", + "//submodules/ShimmerEffect:ShimmerEffect", ], visibility = [ "//visibility:public", diff --git a/submodules/PremiumUI/Sources/PageIndicatorComponent.swift b/submodules/PremiumUI/Sources/PageIndicatorComponent.swift index ed4af59f87..d48c9e08b1 100644 --- a/submodules/PremiumUI/Sources/PageIndicatorComponent.swift +++ b/submodules/PremiumUI/Sources/PageIndicatorComponent.swift @@ -81,7 +81,7 @@ public final class PageIndicatorComponent: Component { private final class PageIndicatorView: UIView { var displayCount: Int { - return min(9, self.pageCount) + return min(11, self.pageCount) } var dotSize: CGFloat = 8.0 var dotSpace: CGFloat = 10.0 diff --git a/submodules/PremiumUI/Sources/PhoneDemoComponent.swift b/submodules/PremiumUI/Sources/PhoneDemoComponent.swift index 6e062a5d76..40837302ab 100644 --- a/submodules/PremiumUI/Sources/PhoneDemoComponent.swift +++ b/submodules/PremiumUI/Sources/PhoneDemoComponent.swift @@ -76,7 +76,7 @@ private final class PhoneView: UIView { self.borderView = UIImageView(image: phoneBorderImage) self.statusNode = RadialStatusNode(backgroundNodeColor: UIColor(white: 0.0, alpha: 0.6), enableBlur: false) - self.statusNode.transitionToState(.progress(color: .white, lineWidth: nil, value: nil, cancelEnabled: false, animateRotation: true)) + self.statusNode.transitionToState(.none) self.statusNode.isUserInteractionEnabled = false super.init(frame: frame) diff --git a/submodules/PremiumUI/Sources/PremiumDemoScreen.swift b/submodules/PremiumUI/Sources/PremiumDemoScreen.swift index a0b0fae0ec..1673f25a0c 100644 --- a/submodules/PremiumUI/Sources/PremiumDemoScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumDemoScreen.swift @@ -634,7 +634,7 @@ private final class DemoSheetContent: CombinedComponent { content: AnyComponent(PhoneDemoComponent( context: component.context, position: .bottom, - videoFile: configuration.videos["double_limits"] + videoFile: configuration.videos["more_upload"] )), title: strings.Premium_UploadSize, text: strings.Premium_UploadSizeInfo, @@ -740,7 +740,7 @@ private final class DemoSheetContent: CombinedComponent { content: AnyComponent(PhoneDemoComponent( context: component.context, position: .top, - videoFile: configuration.videos["chat_management"] + videoFile: configuration.videos["advanced_chat_management"] )), title: strings.Premium_ChatManagement, text: strings.Premium_ChatManagementInfo, @@ -774,7 +774,7 @@ private final class DemoSheetContent: CombinedComponent { content: AnyComponent(PhoneDemoComponent( context: component.context, position: .top, - videoFile: configuration.videos["userpics"] + videoFile: configuration.videos["animated_userpics"] )), title: strings.Premium_Avatar, text: strings.Premium_AvatarInfo, @@ -899,12 +899,14 @@ private final class DemoSheetContent: CombinedComponent { animationName: isStandalone && component.subject == .uniqueReactions ? "premium_unlock" : nil, iconPosition: .right, iconSpacing: 4.0, - action: { [weak component] in + action: { [weak component, weak state] in guard let component = component else { return } component.dismiss() - component.action() + if let state = state, state.isPremium == false { + component.action() + } } ), availableSize: CGSize(width: context.availableSize.width - sideInset * 2.0, height: 50.0), diff --git a/submodules/PremiumUI/Sources/PremiumIntroScreen.swift b/submodules/PremiumUI/Sources/PremiumIntroScreen.swift index f4cdd18c5e..75072a76af 100644 --- a/submodules/PremiumUI/Sources/PremiumIntroScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumIntroScreen.swift @@ -1158,7 +1158,9 @@ private final class PremiumIntroScreenContentComponent: CombinedComponent { tapAction: { attributes, _ in if let url = attributes[NSAttributedString.Key(rawValue: TelegramTextAttributes.URL)] as? String, let controller = environment.controller() as? PremiumIntroScreen, let navigationController = controller.navigationController as? NavigationController { - if url == "cancel" { + if url.hasPrefix("https://") { + controller.context.sharedContext.openExternalUrl(context: controller.context, urlContext: .generic, url: url, forceExternal: true, presentationData: controller.context.sharedContext.currentPresentationData.with({$0}), navigationController: nil, dismissInput: {}) + } else if url == "cancel" { } else { let context = controller.context @@ -1362,6 +1364,8 @@ private final class PremiumIntroScreenComponent: CombinedComponent { }, completed: { [weak self] in if let strongSelf = self { + strongSelf.isPremium = true + strongSelf.updated(transition: .easeInOut(duration: 0.25)) strongSelf.completion() } })) @@ -1631,13 +1635,40 @@ private final class PremiumIntroScreenComponent: CombinedComponent { context.add(bottomPanel .position(CGPoint(x: context.availableSize.width / 2.0, y: context.availableSize.height - bottomPanel.size.height / 2.0)) .opacity(bottomPanelAlpha) + .disappear(Transition.Disappear { view, transition, completion in + if case .none = transition.animation { + completion() + return + } + view.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: bottomPanel.size.height), duration: 0.2, removeOnCompletion: false, additive: true, completion: { _ in + completion() + }) + }) ) context.add(bottomSeparator .position(CGPoint(x: context.availableSize.width / 2.0, y: context.availableSize.height - bottomPanel.size.height)) .opacity(bottomPanelAlpha) + .disappear(Transition.Disappear { view, transition, completion in + if case .none = transition.animation { + completion() + return + } + view.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: bottomPanel.size.height), duration: 0.2, removeOnCompletion: false, additive: true, completion: { _ in + completion() + }) + }) ) context.add(button .position(CGPoint(x: context.availableSize.width / 2.0, y: context.availableSize.height - bottomPanel.size.height + bottomPanelPadding + button.size.height / 2.0)) + .disappear(Transition.Disappear { view, transition, completion in + if case .none = transition.animation { + completion() + return + } + view.layer.animatePosition(from: CGPoint(), to: CGPoint(x: 0.0, y: bottomPanel.size.height), duration: 0.2, removeOnCompletion: false, additive: true, completion: { _ in + completion() + }) + }) ) } @@ -1704,9 +1735,6 @@ public final class PremiumIntroScreen: ViewControllerComponentContainer { completionImpl = { [weak self] in if let strongSelf = self { strongSelf.view.addSubview(ConfettiView(frame: strongSelf.view.bounds)) - Queue.mainQueue().after(2.0, { - self?.dismiss() - }) } } } diff --git a/submodules/PremiumUI/Sources/PremiumLimitScreen.swift b/submodules/PremiumUI/Sources/PremiumLimitScreen.swift index 258025b7eb..4499c8d429 100644 --- a/submodules/PremiumUI/Sources/PremiumLimitScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumLimitScreen.swift @@ -258,6 +258,8 @@ private class PremiumLimitAnimationComponent: Component { countWidth = 35.0 case 3: countWidth = 51.0 + case 4: + countWidth = 60.0 default: countWidth = 51.0 } @@ -549,7 +551,7 @@ public final class PremiumLimitDisplayComponent: CombinedComponent { ) context.add(inactiveValue - .position(CGPoint(x: context.availableSize.width / 2.0 - activeValue.size.width / 2.0 - 12.0, y: height - lineHeight / 2.0)) + .position(CGPoint(x: context.availableSize.width / 2.0 - inactiveValue.size.width / 2.0 - 12.0, y: height - lineHeight / 2.0)) ) context.add(activeTitle @@ -693,7 +695,7 @@ private final class LimitSheetContent: CombinedComponent { let premiumLimit = state.premiumLimits.maxFoldersCount iconName = "Premium/Folder" badgeText = "\(component.count)" - string = strings.Premium_MaxFoldersCountText("\(limit)", "\(premiumLimit)").string + string = component.count >= premiumLimit ? strings.Premium_MaxFoldersCountFinalText("\(premiumLimit)").string : strings.Premium_MaxFoldersCountText("\(limit)", "\(premiumLimit)").string defaultValue = component.count > limit ? "\(limit)" : "" premiumValue = component.count >= premiumLimit ? "" : "\(premiumLimit)" badgePosition = CGFloat(component.count) / CGFloat(premiumLimit) @@ -702,7 +704,7 @@ private final class LimitSheetContent: CombinedComponent { let premiumLimit = state.premiumLimits.maxFolderChatsCount iconName = "Premium/Chat" badgeText = "\(component.count)" - string = strings.Premium_MaxChatsInFolderText("\(limit)", "\(premiumLimit)").string + string = component.count >= premiumLimit ? strings.Premium_MaxChatsInFolderFinalText("\(premiumLimit)").string : strings.Premium_MaxChatsInFolderText("\(limit)", "\(premiumLimit)").string defaultValue = component.count > limit ? "\(limit)" : "" premiumValue = component.count >= premiumLimit ? "" : "\(premiumLimit)" badgePosition = CGFloat(component.count) / CGFloat(premiumLimit) @@ -711,7 +713,7 @@ private final class LimitSheetContent: CombinedComponent { let premiumLimit = state.premiumLimits.maxPinnedChatCount iconName = "Premium/Pin" badgeText = "\(component.count)" - string = strings.Premium_MaxPinsText("\(limit)", "\(premiumLimit)").string + string = component.count >= premiumLimit ? strings.Premium_MaxPinsFinalText("\(premiumLimit)").string : strings.Premium_MaxPinsText("\(limit)", "\(premiumLimit)").string defaultValue = component.count > limit ? "\(limit)" : "" premiumValue = component.count >= premiumLimit ? "" : "\(premiumLimit)" badgePosition = CGFloat(component.count) / CGFloat(premiumLimit) @@ -719,8 +721,8 @@ private final class LimitSheetContent: CombinedComponent { let limit = Int64(state.limits.maxUploadFileParts) * 512 * 1024 + 1024 * 1024 * 100 let premiumLimit = Int64(state.premiumLimits.maxUploadFileParts) * 512 * 1024 + 1024 * 1024 * 100 iconName = "Premium/File" - badgeText = dataSizeString(limit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator)) - string = strings.Premium_MaxFileSizeText(dataSizeString(premiumLimit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator))).string + badgeText = dataSizeString(component.count == 4 ? premiumLimit : limit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator)) + string = component.count == 4 ? strings.Premium_MaxFileSizeFinalText(dataSizeString(premiumLimit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator))).string : strings.Premium_MaxFileSizeText(dataSizeString(premiumLimit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator))).string defaultValue = component.count == 4 ? dataSizeString(limit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator)) : "" premiumValue = component.count != 4 ? dataSizeString(premiumLimit, formatting: DataSizeStringFormatting(strings: environment.strings, decimalSeparator: environment.dateTimeFormat.decimalSeparator)) : "" badgePosition = component.count == 4 ? 1.0 : 0.5 @@ -730,7 +732,7 @@ private final class LimitSheetContent: CombinedComponent { let premiumLimit = component.count + 1 iconName = "Premium/Account" badgeText = "\(component.count)" - string = strings.Premium_MaxAccountsText("\(component.count)").string + string = component.count >= premiumLimit ? strings.Premium_MaxAccountsFinalText("\(premiumLimit)").string : strings.Premium_MaxAccountsText("\(limit)").string defaultValue = component.count > limit ? "\(limit)" : "" premiumValue = component.count >= premiumLimit ? "" : "\(premiumLimit)" if component.count == limit { diff --git a/submodules/PremiumUI/Sources/PremiumLimitsListScreen.swift b/submodules/PremiumUI/Sources/PremiumLimitsListScreen.swift index 0748e9b586..26c8b0e3c4 100644 --- a/submodules/PremiumUI/Sources/PremiumLimitsListScreen.swift +++ b/submodules/PremiumUI/Sources/PremiumLimitsListScreen.swift @@ -928,6 +928,7 @@ public class PremimLimitsListScreen: ViewController { super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationData: context.sharedContext.currentPresentationData.with { $0 })) self.navigationPresentation = .flatModal + self.statusBar.statusBarStyle = .Ignore } required public init(coder aDecoder: NSCoder) { diff --git a/submodules/PremiumUI/Sources/PremiumStarComponent.swift b/submodules/PremiumUI/Sources/PremiumStarComponent.swift index d645de56c3..9f5532e27b 100644 --- a/submodules/PremiumUI/Sources/PremiumStarComponent.swift +++ b/submodules/PremiumUI/Sources/PremiumStarComponent.swift @@ -7,7 +7,7 @@ import SceneKit import GZip import AppBundle -private let sceneVersion: Int = 2 +private let sceneVersion: Int = 3 private func deg2rad(_ number: Float) -> Float { return number * .pi / 180 diff --git a/submodules/PremiumUI/Sources/ReactionsCarouselComponent.swift b/submodules/PremiumUI/Sources/ReactionsCarouselComponent.swift index 937875a754..1973691b64 100644 --- a/submodules/PremiumUI/Sources/ReactionsCarouselComponent.swift +++ b/submodules/PremiumUI/Sources/ReactionsCarouselComponent.swift @@ -133,6 +133,10 @@ private class ReactionCarouselNode: ASDisplayNode, UIScrollViewDelegate { } } + for reaction in reactions { + sortedReactions.append(reaction) + } + self.reactions = sortedReactions self.scrollNode = ASScrollNode() @@ -537,19 +541,21 @@ private class ReactionCarouselNode: ASDisplayNode, UIScrollViewDelegate { let relativeAngle = calculateRelativeAngle(angle) let distance = abs(relativeAngle) / CGFloat.pi + var updatedAngle = angle + updatedAngle += 10 * cos(updatedAngle) + let point = CGPoint( - x: cos(angle), - y: sin(angle) + x: cos(updatedAngle), + y: sin(updatedAngle) ) let itemFrame = CGRect(origin: CGPoint(x: size.width * 0.5 + point.x * areaSize.width * 0.5 - itemSize.width * 0.5, y: size.height * 0.5 + point.y * areaSize.height * 0.5 - itemSize.height * 0.5), size: itemSize) containerNode.bounds = CGRect(origin: CGPoint(), size: itemFrame.size) containerNode.position = CGPoint(x: itemFrame.midX, y: itemFrame.midY) - transition.updateTransformScale(node: containerNode, scale: 1.0 - distance * 0.65) + transition.updateTransformScale(node: containerNode, scale: 1.0 - distance * 0.8) itemNode.frame = CGRect(origin: CGPoint(), size: itemFrame.size) itemNode.updateLayout(size: itemFrame.size, isExpanded: false, largeExpanded: false, isPreviewing: false, transition: transition) - } } } diff --git a/submodules/PremiumUI/Sources/StickersCarouselComponent.swift b/submodules/PremiumUI/Sources/StickersCarouselComponent.swift index 8b430cd17b..ab904965bc 100644 --- a/submodules/PremiumUI/Sources/StickersCarouselComponent.swift +++ b/submodules/PremiumUI/Sources/StickersCarouselComponent.swift @@ -11,6 +11,7 @@ import TelegramPresentationData import AccountContext import AnimatedStickerNode import TelegramAnimatedStickerNode +import ShimmerEffect final class StickersCarouselComponent: Component { public typealias EnvironmentType = DemoPageEnvironment @@ -88,15 +89,19 @@ private class StickerNode: ASDisplayNode { public var animationNode: AnimatedStickerNode? public var additionalAnimationNode: AnimatedStickerNode? + private var placeholderNode: StickerShimmerEffectNode + private let disposable = MetaDisposable() private let effectDisposable = MetaDisposable() + private var setupTimestamp: Double? + init(context: AccountContext, file: TelegramMediaFile) { self.context = context self.file = file self.imageNode = TransformImageNode() - + if file.isPremiumSticker { let animationNode = AnimatedStickerNode() self.animationNode = animationNode @@ -123,6 +128,8 @@ private class StickerNode: ASDisplayNode { self.animationNode = nil } + self.placeholderNode = StickerShimmerEffectNode() + super.init() self.isUserInteractionEnabled = false @@ -136,6 +143,38 @@ private class StickerNode: ASDisplayNode { if let additionalAnimationNode = self.additionalAnimationNode { self.addSubnode(additionalAnimationNode) } + + self.addSubnode(self.placeholderNode) + + var firstTime = true + self.imageNode.imageUpdated = { [weak self] image in + guard let strongSelf = self else { + return + } + if image != nil { + strongSelf.removePlaceholder(animated: !firstTime) + } + firstTime = false + } + + if let animationNode = self.animationNode { + animationNode.started = { [weak self] in + guard let strongSelf = self else { + return + } + + strongSelf.imageNode.alpha = 0.0 + + let current = CACurrentMediaTime() + if let setupTimestamp = strongSelf.setupTimestamp, current - setupTimestamp > 0.3 { + if !strongSelf.placeholderNode.alpha.isZero { + strongSelf.removePlaceholder(animated: true) + } + } else { + strongSelf.removePlaceholder(animated: false) + } + } + } } deinit { @@ -143,6 +182,18 @@ private class StickerNode: ASDisplayNode { self.effectDisposable.dispose() } + + private func removePlaceholder(animated: Bool) { + if !animated { + self.placeholderNode.removeFromSupernode() + } else { + self.placeholderNode.alpha = 0.0 + self.placeholderNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, completion: { [weak self] _ in + self?.placeholderNode.removeFromSupernode() + }) + } + } + private var visibility: Bool = false private var centrality: Bool = false @@ -154,6 +205,12 @@ private class StickerNode: ASDisplayNode { public func setVisible(_ visible: Bool) { self.visibility = visible self.updatePlayback() + + self.setupTimestamp = CACurrentMediaTime() + } + + func updateAbsoluteRect(_ rect: CGRect, within containerSize: CGSize) { + self.placeholderNode.updateAbsoluteRect(rect, within: containerSize) } private func updatePlayback() { @@ -196,6 +253,11 @@ private class StickerNode: ASDisplayNode { additionalAnimationNode.updateLayout(size: additionalAnimationNode.frame.size) } } + + let placeholderFrame = CGRect(origin: .zero, size: size) + let thumbnailDimensions = PixelDimensions(width: 512, height: 512) + self.placeholderNode.update(backgroundColor: nil, foregroundColor: UIColor(rgb: 0xffffff, alpha: 0.2), shimmeringColor: UIColor(rgb: 0xffffff, alpha: 0.3), data: self.file.immediateThumbnailData, size: placeholderFrame.size, imageSize: thumbnailDimensions.cgSize) + self.placeholderNode.frame = placeholderFrame } } } @@ -527,6 +589,7 @@ private class StickersCarouselNode: ASDisplayNode, UIScrollViewDelegate { containerNode.position = CGPoint(x: itemFrame.midX, y: itemFrame.midY) transition.updateTransformScale(node: containerNode, scale: 1.0 - distance * 0.75) transition.updateAlpha(node: containerNode, alpha: 1.0 - distance * 0.6) + itemNode.updateAbsoluteRect(itemFrame, within: size) let isVisible = self.visibility && itemFrame.intersects(bounds) itemNode.setVisible(isVisible) diff --git a/submodules/PromptUI/BUILD b/submodules/PromptUI/BUILD new file mode 100644 index 0000000000..aec3f5594f --- /dev/null +++ b/submodules/PromptUI/BUILD @@ -0,0 +1,24 @@ +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +swift_library( + name = "PromptUI", + module_name = "PromptUI", + srcs = glob([ + "Sources/**/*.swift", + ]), + copts = [ + "-warnings-as-errors", + ], + deps = [ + "//submodules/SSignalKit/SwiftSignalKit:SwiftSignalKit", + "//submodules/AsyncDisplayKit:AsyncDisplayKit", + "//submodules/Display:Display", + "//submodules/Postbox:Postbox", + "//submodules/TelegramCore:TelegramCore", + "//submodules/AccountContext:AccountContext", + "//submodules/TelegramPresentationData:TelegramPresentationData", + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/submodules/PromptUI/Sources/PromptController.swift b/submodules/PromptUI/Sources/PromptController.swift new file mode 100644 index 0000000000..ae86e0ba03 --- /dev/null +++ b/submodules/PromptUI/Sources/PromptController.swift @@ -0,0 +1,424 @@ +import Foundation +import UIKit +import SwiftSignalKit +import AsyncDisplayKit +import Display +import Postbox +import TelegramCore +import TelegramPresentationData +import AccountContext + +private final class PromptInputFieldNode: ASDisplayNode, ASEditableTextNodeDelegate { + private var theme: PresentationTheme + private let backgroundNode: ASImageNode + private let textInputNode: EditableTextNode + private let placeholderNode: ASTextNode + + var updateHeight: (() -> Void)? + var complete: (() -> Void)? + var textChanged: ((String) -> Void)? + + private let backgroundInsets = UIEdgeInsets(top: 8.0, left: 16.0, bottom: 15.0, right: 16.0) + private let inputInsets = UIEdgeInsets(top: 5.0, left: 12.0, bottom: 5.0, right: 12.0) + + var text: String { + get { + return self.textInputNode.attributedText?.string ?? "" + } + set { + self.textInputNode.attributedText = NSAttributedString(string: newValue, font: Font.regular(17.0), textColor: self.theme.actionSheet.inputTextColor) + self.placeholderNode.isHidden = !newValue.isEmpty + } + } + + var placeholder: String = "" { + didSet { + self.placeholderNode.attributedText = NSAttributedString(string: self.placeholder, font: Font.regular(17.0), textColor: self.theme.actionSheet.inputPlaceholderColor) + } + } + + init(theme: PresentationTheme, placeholder: String) { + self.theme = theme + + self.backgroundNode = ASImageNode() + self.backgroundNode.isLayerBacked = true + self.backgroundNode.displaysAsynchronously = false + self.backgroundNode.displayWithoutProcessing = true + self.backgroundNode.image = generateStretchableFilledCircleImage(diameter: 12.0, color: theme.actionSheet.inputHollowBackgroundColor, strokeColor: theme.actionSheet.inputBorderColor, strokeWidth: 1.0) + + self.textInputNode = EditableTextNode() + self.textInputNode.typingAttributes = [NSAttributedString.Key.font.rawValue: Font.regular(17.0), NSAttributedString.Key.foregroundColor.rawValue: theme.actionSheet.inputTextColor] + self.textInputNode.clipsToBounds = true + self.textInputNode.hitTestSlop = UIEdgeInsets(top: -5.0, left: -5.0, bottom: -5.0, right: -5.0) + self.textInputNode.textContainerInset = UIEdgeInsets(top: self.inputInsets.top, left: 0.0, bottom: self.inputInsets.bottom, right: 0.0) + self.textInputNode.keyboardAppearance = theme.rootController.keyboardColor.keyboardAppearance + self.textInputNode.keyboardType = .default + self.textInputNode.autocapitalizationType = .sentences + self.textInputNode.returnKeyType = .done + self.textInputNode.autocorrectionType = .default + self.textInputNode.tintColor = theme.actionSheet.controlAccentColor + + self.placeholderNode = ASTextNode() + self.placeholderNode.isUserInteractionEnabled = false + self.placeholderNode.displaysAsynchronously = false + self.placeholderNode.attributedText = NSAttributedString(string: placeholder, font: Font.regular(17.0), textColor: self.theme.actionSheet.inputPlaceholderColor) + + super.init() + + self.textInputNode.delegate = self + + self.addSubnode(self.backgroundNode) + self.addSubnode(self.textInputNode) + self.addSubnode(self.placeholderNode) + } + + func updateTheme(_ theme: PresentationTheme) { + self.theme = theme + + self.backgroundNode.image = generateStretchableFilledCircleImage(diameter: 12.0, color: self.theme.actionSheet.inputHollowBackgroundColor, strokeColor: self.theme.actionSheet.inputBorderColor, strokeWidth: 1.0) + self.textInputNode.keyboardAppearance = self.theme.rootController.keyboardColor.keyboardAppearance + self.placeholderNode.attributedText = NSAttributedString(string: self.placeholderNode.attributedText?.string ?? "", font: Font.regular(17.0), textColor: self.theme.actionSheet.inputPlaceholderColor) + self.textInputNode.tintColor = self.theme.actionSheet.controlAccentColor + } + + func updateLayout(width: CGFloat, transition: ContainedViewLayoutTransition) -> CGFloat { + let backgroundInsets = self.backgroundInsets + let inputInsets = self.inputInsets + + let textFieldHeight = self.calculateTextFieldMetrics(width: width) + let panelHeight = textFieldHeight + backgroundInsets.top + backgroundInsets.bottom + + let backgroundFrame = CGRect(origin: CGPoint(x: backgroundInsets.left, y: backgroundInsets.top), size: CGSize(width: width - backgroundInsets.left - backgroundInsets.right, height: panelHeight - backgroundInsets.top - backgroundInsets.bottom)) + transition.updateFrame(node: self.backgroundNode, frame: backgroundFrame) + + let placeholderSize = self.placeholderNode.measure(backgroundFrame.size) + transition.updateFrame(node: self.placeholderNode, frame: CGRect(origin: CGPoint(x: backgroundFrame.minX + inputInsets.left, y: backgroundFrame.minY + floor((backgroundFrame.size.height - placeholderSize.height) / 2.0)), size: placeholderSize)) + + transition.updateFrame(node: self.textInputNode, frame: CGRect(origin: CGPoint(x: backgroundFrame.minX + inputInsets.left, y: backgroundFrame.minY), size: CGSize(width: backgroundFrame.size.width - inputInsets.left - inputInsets.right, height: backgroundFrame.size.height))) + + return panelHeight + } + + func activateInput() { + self.textInputNode.becomeFirstResponder() + } + + func deactivateInput() { + self.textInputNode.resignFirstResponder() + } + + @objc func editableTextNodeDidUpdateText(_ editableTextNode: ASEditableTextNode) { + self.updateTextNodeText(animated: true) + self.textChanged?(editableTextNode.textView.text) + self.placeholderNode.isHidden = !(editableTextNode.textView.text ?? "").isEmpty + } + + func editableTextNode(_ editableTextNode: ASEditableTextNode, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { + if text == "\n" { + self.complete?() + return false + } + return true + } + + private func calculateTextFieldMetrics(width: CGFloat) -> CGFloat { + let backgroundInsets = self.backgroundInsets + let inputInsets = self.inputInsets + + let unboundTextFieldHeight = max(33.0, ceil(self.textInputNode.measure(CGSize(width: width - backgroundInsets.left - backgroundInsets.right - inputInsets.left - inputInsets.right, height: CGFloat.greatestFiniteMagnitude)).height)) + + return min(61.0, max(33.0, unboundTextFieldHeight)) + } + + private func updateTextNodeText(animated: Bool) { + let backgroundInsets = self.backgroundInsets + + let textFieldHeight = self.calculateTextFieldMetrics(width: self.bounds.size.width) + + let panelHeight = textFieldHeight + backgroundInsets.top + backgroundInsets.bottom + if !self.bounds.size.height.isEqual(to: panelHeight) { + self.updateHeight?() + } + } + + @objc func clearPressed() { + self.textInputNode.attributedText = nil + self.deactivateInput() + } +} + +private final class PromptAlertContentNode: AlertContentNode { + private let strings: PresentationStrings + private let text: String + + private let textNode: ASTextNode + let inputFieldNode: PromptInputFieldNode + + private let actionNodesSeparator: ASDisplayNode + private let actionNodes: [TextAlertContentActionNode] + private let actionVerticalSeparators: [ASDisplayNode] + + private let disposable = MetaDisposable() + + private var validLayout: CGSize? + + private let hapticFeedback = HapticFeedback() + + var complete: (() -> Void)? { + didSet { + self.inputFieldNode.complete = self.complete + } + } + + override var dismissOnOutsideTap: Bool { + return self.isUserInteractionEnabled + } + + init(theme: AlertControllerTheme, ptheme: PresentationTheme, strings: PresentationStrings, actions: [TextAlertAction], text: String, value: String?) { + self.strings = strings + self.text = text + + self.textNode = ASTextNode() + self.textNode.maximumNumberOfLines = 2 + + self.inputFieldNode = PromptInputFieldNode(theme: ptheme, placeholder: "") + self.inputFieldNode.text = value ?? "" + + self.actionNodesSeparator = ASDisplayNode() + self.actionNodesSeparator.isLayerBacked = true + + self.actionNodes = actions.map { action -> TextAlertContentActionNode in + return TextAlertContentActionNode(theme: theme, action: action) + } + + var actionVerticalSeparators: [ASDisplayNode] = [] + if actions.count > 1 { + for _ in 0 ..< actions.count - 1 { + let separatorNode = ASDisplayNode() + separatorNode.isLayerBacked = true + actionVerticalSeparators.append(separatorNode) + } + } + self.actionVerticalSeparators = actionVerticalSeparators + + super.init() + + self.addSubnode(self.textNode) + + self.addSubnode(self.inputFieldNode) + + self.addSubnode(self.actionNodesSeparator) + + for actionNode in self.actionNodes { + self.addSubnode(actionNode) + } + self.actionNodes.last?.actionEnabled = true + + for separatorNode in self.actionVerticalSeparators { + self.addSubnode(separatorNode) + } + + self.inputFieldNode.updateHeight = { [weak self] in + if let strongSelf = self { + if let _ = strongSelf.validLayout { + strongSelf.requestLayout?(.animated(duration: 0.15, curve: .spring)) + } + } + } + +// self.inputFieldNode.textChanged = { [weak self] text in +// if let strongSelf = self, let lastNode = strongSelf.actionNodes.last { +// lastNode.actionEnabled = !text.isEmpty +// } +// } + + self.updateTheme(theme) + } + + deinit { + self.disposable.dispose() + } + + var value: String { + return self.inputFieldNode.text + } + + override func updateTheme(_ theme: AlertControllerTheme) { + self.textNode.attributedText = NSAttributedString(string: self.text, font: Font.regular(13.0), textColor: theme.primaryColor, paragraphAlignment: .center) + + self.actionNodesSeparator.backgroundColor = theme.separatorColor + for actionNode in self.actionNodes { + actionNode.updateTheme(theme) + } + for separatorNode in self.actionVerticalSeparators { + separatorNode.backgroundColor = theme.separatorColor + } + + if let size = self.validLayout { + _ = self.updateLayout(size: size, transition: .immediate) + } + } + + override func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) -> CGSize { + var size = size + size.width = min(size.width, 270.0) + let measureSize = CGSize(width: size.width - 16.0 * 2.0, height: CGFloat.greatestFiniteMagnitude) + + let hadValidLayout = self.validLayout != nil + + self.validLayout = size + + var origin: CGPoint = CGPoint(x: 0.0, y: 20.0) + let spacing: CGFloat = 5.0 + + let titleSize = CGSize() +// 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 + 4.0 + + let textSize = self.textNode.measure(measureSize) + transition.updateFrame(node: self.textNode, frame: CGRect(origin: CGPoint(x: floorToScreenPixels((size.width - textSize.width) / 2.0), y: origin.y), size: textSize)) + origin.y += textSize.height + 6.0 + spacing + + let actionButtonHeight: CGFloat = 44.0 + var minActionsWidth: CGFloat = 0.0 + let maxActionWidth: CGFloat = floor(size.width / CGFloat(self.actionNodes.count)) + let actionTitleInsets: CGFloat = 8.0 + + var effectiveActionLayout = TextAlertContentActionLayout.horizontal + for actionNode in self.actionNodes { + let actionTitleSize = actionNode.titleNode.updateLayout(CGSize(width: maxActionWidth, height: actionButtonHeight)) + if case .horizontal = effectiveActionLayout, actionTitleSize.height > actionButtonHeight * 0.6667 { + effectiveActionLayout = .vertical + } + switch effectiveActionLayout { + case .horizontal: + minActionsWidth += actionTitleSize.width + actionTitleInsets + case .vertical: + minActionsWidth = max(minActionsWidth, actionTitleSize.width + actionTitleInsets) + } + } + + let insets = UIEdgeInsets(top: 18.0, left: 18.0, bottom: 9.0, right: 18.0) + + var contentWidth = max(titleSize.width, minActionsWidth) + contentWidth = max(contentWidth, 234.0) + + var actionsHeight: CGFloat = 0.0 + switch effectiveActionLayout { + case .horizontal: + actionsHeight = actionButtonHeight + case .vertical: + actionsHeight = actionButtonHeight * CGFloat(self.actionNodes.count) + } + + let resultWidth = contentWidth + insets.left + insets.right + + let inputFieldWidth = resultWidth + let inputFieldHeight = self.inputFieldNode.updateLayout(width: inputFieldWidth, transition: transition) + let inputHeight = inputFieldHeight + transition.updateFrame(node: self.inputFieldNode, frame: CGRect(x: 0.0, y: origin.y, width: resultWidth, height: inputFieldHeight)) + transition.updateAlpha(node: self.inputFieldNode, alpha: inputHeight > 0.0 ? 1.0 : 0.0) + + let resultSize = CGSize(width: resultWidth, height: titleSize.height + textSize.height + spacing + inputHeight + actionsHeight + insets.top + insets.bottom) + + transition.updateFrame(node: self.actionNodesSeparator, frame: CGRect(origin: CGPoint(x: 0.0, y: resultSize.height - actionsHeight - UIScreenPixel), size: CGSize(width: resultSize.width, height: UIScreenPixel))) + + var actionOffset: CGFloat = 0.0 + let actionWidth: CGFloat = floor(resultSize.width / CGFloat(self.actionNodes.count)) + var separatorIndex = -1 + var nodeIndex = 0 + for actionNode in self.actionNodes { + if separatorIndex >= 0 { + let separatorNode = self.actionVerticalSeparators[separatorIndex] + switch effectiveActionLayout { + case .horizontal: + transition.updateFrame(node: separatorNode, frame: CGRect(origin: CGPoint(x: actionOffset - UIScreenPixel, y: resultSize.height - actionsHeight), size: CGSize(width: UIScreenPixel, height: actionsHeight - UIScreenPixel))) + case .vertical: + transition.updateFrame(node: separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: resultSize.height - actionsHeight + actionOffset - UIScreenPixel), size: CGSize(width: resultSize.width, height: UIScreenPixel))) + } + } + separatorIndex += 1 + + let currentActionWidth: CGFloat + switch effectiveActionLayout { + case .horizontal: + if nodeIndex == self.actionNodes.count - 1 { + currentActionWidth = resultSize.width - actionOffset + } else { + currentActionWidth = actionWidth + } + case .vertical: + currentActionWidth = resultSize.width + } + + let actionNodeFrame: CGRect + switch effectiveActionLayout { + case .horizontal: + actionNodeFrame = CGRect(origin: CGPoint(x: actionOffset, y: resultSize.height - actionsHeight), size: CGSize(width: currentActionWidth, height: actionButtonHeight)) + actionOffset += currentActionWidth + case .vertical: + actionNodeFrame = CGRect(origin: CGPoint(x: 0.0, y: resultSize.height - actionsHeight + actionOffset), size: CGSize(width: currentActionWidth, height: actionButtonHeight)) + actionOffset += actionButtonHeight + } + + transition.updateFrame(node: actionNode, frame: actionNodeFrame) + + nodeIndex += 1 + } + + if !hadValidLayout { + self.inputFieldNode.activateInput() + } + + return resultSize + } + + func animateError() { + self.inputFieldNode.layer.addShakeAnimation() + self.hapticFeedback.error() + } +} + +public func promptController(sharedContext: SharedAccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal)? = nil, text: String, value: String?, apply: @escaping (String?) -> Void) -> AlertController { + let presentationData = updatedPresentationData?.initial ?? sharedContext.currentPresentationData.with { $0 } + + var dismissImpl: ((Bool) -> Void)? + var applyImpl: (() -> Void)? + + let actions: [TextAlertAction] = [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: { + dismissImpl?(true) + apply(nil) + }), TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_Done, action: { + dismissImpl?(true) + applyImpl?() + })] + + let contentNode = PromptAlertContentNode(theme: AlertControllerTheme(presentationData: presentationData), ptheme: presentationData.theme, strings: presentationData.strings, actions: actions, text: text, value: value) + contentNode.complete = { + applyImpl?() + } + applyImpl = { [weak contentNode] in + guard let contentNode = contentNode else { + return + } + apply(contentNode.value) + } + + let controller = AlertController(theme: AlertControllerTheme(presentationData: presentationData), contentNode: contentNode) + let presentationDataDisposable = (updatedPresentationData?.signal ?? sharedContext.presentationData).start(next: { [weak controller, weak contentNode] presentationData in + controller?.theme = AlertControllerTheme(presentationData: presentationData) + contentNode?.inputFieldNode.updateTheme(presentationData.theme) + }) + controller.dismissed = { + presentationDataDisposable.dispose() + } + dismissImpl = { [weak controller] animated in + contentNode.inputFieldNode.deactivateInput() + if animated { + controller?.dismissAnimated() + } else { + controller?.dismiss() + } + } + return controller +} diff --git a/submodules/ReactionSelectionNode/Sources/ReactionContextBackgroundNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionContextBackgroundNode.swift index 0b73fb9202..8db843527c 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionContextBackgroundNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionContextBackgroundNode.swift @@ -42,7 +42,8 @@ final class ReactionContextBackgroundNode: ASDisplayNode { private let backgroundNode: NavigationBackgroundNode private let maskLayer: SimpleLayer - private let backgroundLayer: SimpleLayer + private let backgroundClippingLayer: SimpleLayer + private let backgroundMaskNode: ASDisplayNode private let backgroundShadowLayer: SimpleLayer private let largeCircleLayer: SimpleLayer private let largeCircleShadowLayer: SimpleLayer @@ -51,23 +52,24 @@ final class ReactionContextBackgroundNode: ASDisplayNode { private var theme: PresentationTheme? - init(largeCircleSize: CGFloat, smallCircleSize: CGFloat) { + init(largeCircleSize: CGFloat, smallCircleSize: CGFloat, maskNode: ASDisplayNode) { self.largeCircleSize = largeCircleSize self.smallCircleSize = smallCircleSize self.backgroundNode = NavigationBackgroundNode(color: .clear, enableBlur: true) self.maskLayer = SimpleLayer() - self.backgroundLayer = SimpleLayer() + self.backgroundClippingLayer = SimpleLayer() + self.backgroundClippingLayer.cornerRadius = 52.0 + self.backgroundClippingLayer.masksToBounds = true + self.backgroundMaskNode = maskNode + self.backgroundShadowLayer = SimpleLayer() self.largeCircleLayer = SimpleLayer() self.largeCircleShadowLayer = SimpleLayer() self.smallCircleLayer = SimpleLayer() self.smallCircleShadowLayer = SimpleLayer() - self.backgroundLayer.backgroundColor = UIColor.black.cgColor - self.backgroundLayer.masksToBounds = true - self.largeCircleLayer.backgroundColor = UIColor.black.cgColor self.largeCircleLayer.masksToBounds = true self.largeCircleLayer.cornerRadius = largeCircleSize / 2.0 @@ -77,7 +79,7 @@ final class ReactionContextBackgroundNode: ASDisplayNode { self.smallCircleLayer.cornerRadius = smallCircleSize / 2.0 if #available(iOS 13.0, *) { - self.backgroundLayer.cornerCurve = .circular +// self.backgroundLayer.cornerCurve = .circular self.largeCircleLayer.cornerCurve = .circular self.smallCircleLayer.cornerCurve = .circular } @@ -96,7 +98,9 @@ final class ReactionContextBackgroundNode: ASDisplayNode { self.maskLayer.addSublayer(self.smallCircleLayer) self.maskLayer.addSublayer(self.largeCircleLayer) - self.maskLayer.addSublayer(self.backgroundLayer) + self.maskLayer.addSublayer(self.backgroundClippingLayer) + + self.backgroundClippingLayer.addSublayer(self.backgroundMaskNode.layer) self.backgroundNode.layer.mask = self.maskLayer } @@ -137,12 +141,14 @@ final class ReactionContextBackgroundNode: ASDisplayNode { } var backgroundFrame = CGRect(origin: CGPoint(), size: size) + var backgroundMaskNodeFrame = backgroundFrame if isMinimized { let updatedHeight = floor(size.height * 0.9) backgroundFrame = CGRect(origin: CGPoint(x: 0.0, y: size.height - updatedHeight), size: CGSize(width: size.width, height: updatedHeight)) + backgroundMaskNodeFrame = backgroundMaskNodeFrame.offsetBy(dx: 0.0, dy: (updatedHeight - backgroundMaskNodeFrame.height) * 0.5) } - transition.updateCornerRadius(layer: self.backgroundLayer, cornerRadius: backgroundFrame.height / 2.0) + transition.updateCornerRadius(layer: self.backgroundClippingLayer, cornerRadius: backgroundFrame.height / 2.0) let largeCircleFrame: CGRect let smallCircleFrame: CGRect @@ -156,7 +162,8 @@ final class ReactionContextBackgroundNode: ASDisplayNode { let contentBounds = backgroundFrame.insetBy(dx: -10.0, dy: -10.0).union(largeCircleFrame).union(smallCircleFrame) - transition.updateFrame(layer: self.backgroundLayer, frame: backgroundFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true) + transition.updateFrame(node: self.backgroundMaskNode, frame: backgroundMaskNodeFrame, beginWithCurrentState: true) + transition.updateFrame(layer: self.backgroundClippingLayer, frame: backgroundFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true) transition.updateFrame(layer: self.largeCircleLayer, frame: largeCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true) transition.updateFrame(layer: self.smallCircleLayer, frame: smallCircleFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY), beginWithCurrentState: true) @@ -181,8 +188,8 @@ final class ReactionContextBackgroundNode: ASDisplayNode { self.largeCircleLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay) self.largeCircleShadowLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: largeCircleDuration, delay: largeCircleDelay) - self.backgroundLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: mainCircleDelay) - self.backgroundLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: mainCircleDuration, delay: mainCircleDelay) + self.backgroundClippingLayer.animateAlpha(from: 0.0, to: 1.0, duration: 0.01, delay: mainCircleDelay) + self.backgroundClippingLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: mainCircleDuration, delay: mainCircleDelay) self.backgroundShadowLayer.animateSpring(from: 0.01 as NSNumber, to: 1.0 as NSNumber, keyPath: "transform.scale", duration: mainCircleDuration, delay: mainCircleDelay) } @@ -197,14 +204,14 @@ final class ReactionContextBackgroundNode: ASDisplayNode { let visualSourceBackgroundFrame = sourceBackgroundFrame.offsetBy(dx: -contentBounds.minX, dy: -contentBounds.minY) let sourceShadowFrame = visualSourceBackgroundFrame.insetBy(dx: -shadowInset, dy: -shadowInset) - self.backgroundLayer.animateSpring(from: NSValue(cgPoint: CGPoint(x: visualSourceBackgroundFrame.midX - size.width / 2.0, y: 0.0)), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping, additive: true) - self.backgroundLayer.animateSpring(from: NSValue(cgRect: CGRect(origin: CGPoint(), size: visualSourceBackgroundFrame.size)), to: NSValue(cgRect: self.backgroundLayer.bounds), keyPath: "bounds", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping) + self.backgroundClippingLayer.animateSpring(from: NSValue(cgPoint: CGPoint(x: visualSourceBackgroundFrame.midX - size.width / 2.0, y: 0.0)), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping, additive: true) + self.backgroundClippingLayer.animateSpring(from: NSValue(cgRect: CGRect(origin: CGPoint(), size: visualSourceBackgroundFrame.size)), to: NSValue(cgRect: self.backgroundClippingLayer.bounds), keyPath: "bounds", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping) self.backgroundShadowLayer.animateSpring(from: NSValue(cgPoint: CGPoint(x: sourceShadowFrame.midX - size.width / 2.0, y: 0.0)), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping, additive: true) self.backgroundShadowLayer.animateSpring(from: NSValue(cgRect: CGRect(origin: CGPoint(), size: sourceShadowFrame.size)), to: NSValue(cgRect: self.backgroundShadowLayer.bounds), keyPath: "bounds", duration: springDuration, delay: springDelay, initialVelocity: 0.0, damping: springDamping) } func animateOut() { - self.backgroundLayer.animateAlpha(from: CGFloat(self.backgroundLayer.opacity), to: 0.0, duration: 0.2, removeOnCompletion: false) + self.backgroundClippingLayer.animateAlpha(from: CGFloat(self.backgroundClippingLayer.opacity), to: 0.0, duration: 0.2, removeOnCompletion: false) self.backgroundShadowLayer.animateAlpha(from: CGFloat(self.backgroundShadowLayer.opacity), to: 0.0, duration: 0.1, removeOnCompletion: false) self.largeCircleLayer.animateAlpha(from: CGFloat(self.largeCircleLayer.opacity), to: 0.0, duration: 0.2, removeOnCompletion: false) self.largeCircleShadowLayer.animateAlpha(from: CGFloat(self.largeCircleShadowLayer.opacity), to: 0.0, duration: 0.1, removeOnCompletion: false) diff --git a/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift index 0a6a09a083..12692c3fa4 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionContextNode.swift @@ -73,9 +73,13 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { private let contentContainer: ASDisplayNode private let contentContainerMask: UIImageView + private let leftBackgroundMaskNode: ASDisplayNode + private let rightBackgroundMaskNode: ASDisplayNode + private let backgroundMaskNode: ASDisplayNode private let scrollNode: ASScrollNode private let previewingItemContainer: ASDisplayNode private var visibleItemNodes: [Int: ReactionItemNode] = [:] + private var visibleItemMaskNodes: [Int: ASDisplayNode] = [:] private var longPressRecognizer: UILongPressGestureRecognizer? private var longPressTimer: SwiftSignalKit.Timer? @@ -101,7 +105,14 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { self.theme = theme self.items = items - self.backgroundNode = ReactionContextBackgroundNode(largeCircleSize: largeCircleSize, smallCircleSize: smallCircleSize) + self.backgroundMaskNode = ASDisplayNode() + self.backgroundNode = ReactionContextBackgroundNode(largeCircleSize: largeCircleSize, smallCircleSize: smallCircleSize, maskNode: self.backgroundMaskNode) + self.leftBackgroundMaskNode = ASDisplayNode() + self.leftBackgroundMaskNode.backgroundColor = .black + self.rightBackgroundMaskNode = ASDisplayNode() + self.rightBackgroundMaskNode.backgroundColor = .black + self.backgroundMaskNode.addSubnode(self.leftBackgroundMaskNode) + self.backgroundMaskNode.addSubnode(self.rightBackgroundMaskNode) self.scrollNode = ASScrollNode() self.scrollNode.view.disablesInteractiveTransitionGestureRecognizer = true @@ -275,6 +286,9 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { highlightedReactionIndex = nil } + var currentMaskFrame: CGRect? + var maskTransition: ContainedViewLayoutTransition? + var validIndices = Set() var nextX: CGFloat = sideInset for i in 0 ..< self.items.count { @@ -324,21 +338,38 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { var animateIn = false + let maskNode: ASDisplayNode? let itemNode: ReactionItemNode var itemTransition = transition if let current = self.visibleItemNodes[i] { itemNode = current + maskNode = self.visibleItemMaskNodes[i] } else { animateIn = self.didAnimateIn itemTransition = .immediate if case let .reaction(item) = self.items[i] { itemNode = ReactionNode(context: self.context, theme: self.theme, item: item) + maskNode = nil } else { itemNode = PremiumReactionsNode(theme: self.theme) + maskNode = itemNode.maskNode } self.visibleItemNodes[i] = itemNode + self.scrollNode.addSubnode(itemNode) + + if let maskNode = maskNode { + self.visibleItemMaskNodes[i] = maskNode + self.backgroundMaskNode.addSubnode(maskNode) + } + } + maskTransition = itemTransition + + if let maskNode = maskNode { + let maskFrame = CGRect(origin: CGPoint(x: -self.scrollNode.view.contentOffset.x + itemFrame.minX, y: 0.0), size: CGSize(width: itemFrame.width, height: itemFrame.height + 12.0)) + itemTransition.updateFrame(node: maskNode, frame: maskFrame) + currentMaskFrame = maskFrame } if !itemNode.isExtracted { @@ -370,6 +401,15 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { } } + if let currentMaskFrame = currentMaskFrame { + let transition = maskTransition ?? transition + transition.updateFrame(node: self.leftBackgroundMaskNode, frame: CGRect(x: -1000.0 + currentMaskFrame.minX, y: 0.0, width: 1000.0, height: 52.0)) + transition.updateFrame(node: self.rightBackgroundMaskNode, frame: CGRect(x: currentMaskFrame.maxX, y: 0.0, width: 1000.0, height: 52.0)) + } else { + self.leftBackgroundMaskNode.frame = CGRect(x: 0.0, y: 0.0, width: 1000.0, height: 52.0) + self.rightBackgroundMaskNode.frame = CGRect(origin: .zero, size: .zero) + } + var removedIndices: [Int] = [] for (index, itemNode) in self.visibleItemNodes { if !validIndices.contains(index) { @@ -377,8 +417,14 @@ public final class ReactionContextNode: ASDisplayNode, UIScrollViewDelegate { itemNode.removeFromSupernode() } } + for (index, maskNode) in self.visibleItemMaskNodes { + if !validIndices.contains(index) { + maskNode.removeFromSupernode() + } + } for index in removedIndices { self.visibleItemNodes.removeValue(forKey: index) + self.visibleItemMaskNodes.removeValue(forKey: index) } } diff --git a/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift b/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift index 0fa71707a6..989b7b81f5 100644 --- a/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift +++ b/submodules/ReactionSelectionNode/Sources/ReactionSelectionNode.swift @@ -38,6 +38,8 @@ private let font = Font.medium(13.0) protocol ReactionItemNode: ASDisplayNode { var isExtracted: Bool { get } + var maskNode: ASDisplayNode? { get } + func appear(animated: Bool) func updateLayout(size: CGSize, isExpanded: Bool, largeExpanded: Bool, isPreviewing: Bool, transition: ContainedViewLayoutTransition) } @@ -107,6 +109,10 @@ public final class ReactionNode: ASDisplayNode, ReactionItemNode { self.fetchFullAnimationDisposable?.dispose() } + var maskNode: ASDisplayNode? { + return nil + } + func appear(animated: Bool) { if animated { self.animateInAnimationNode?.visibility = true @@ -351,13 +357,29 @@ final class PremiumReactionsNode: ASDisplayNode, ReactionItemNode { var isExtracted: Bool = false let imageNode: ASImageNode + let maskImageNode: ASImageNode init(theme: PresentationTheme) { self.imageNode = ASImageNode() self.imageNode.contentMode = .center self.imageNode.displaysAsynchronously = false self.imageNode.isUserInteractionEnabled = false - self.imageNode.image = generatePremiumReactionIcon() + self.imageNode.image = UIImage(bundleImageName: "Premium/ReactionsForeground") + + self.maskImageNode = ASImageNode() + if let backgroundImage = UIImage(bundleImageName: "Premium/ReactionsBackground") { + self.maskImageNode.image = generateImage(CGSize(width: 40.0, height: 52.0), contextGenerator: { size, context in + context.setFillColor(UIColor.black.cgColor) + context.fill(CGRect(origin: .zero, size: size)) + + if let cgImage = backgroundImage.cgImage { + let maskFrame = CGRect(origin: .zero, size: size).insetBy(dx: 4.0, dy: 10.0) + context.clip(to: maskFrame, mask: cgImage) + } + context.setBlendMode(.clear) + context.fill(CGRect(origin: .zero, size: size)) + }) + } super.init() @@ -371,4 +393,9 @@ final class PremiumReactionsNode: ASDisplayNode, ReactionItemNode { func updateLayout(size: CGSize, isExpanded: Bool, largeExpanded: Bool, isPreviewing: Bool, transition: ContainedViewLayoutTransition) { self.imageNode.frame = CGRect(origin: CGPoint(), size: size) } + + + var maskNode: ASDisplayNode? { + return self.maskImageNode + } } diff --git a/submodules/SettingsUI/Sources/Themes/ThemeSettingsAppIconItem.swift b/submodules/SettingsUI/Sources/Themes/ThemeSettingsAppIconItem.swift index 2ccdd27dee..ea6d3fa44d 100644 --- a/submodules/SettingsUI/Sources/Themes/ThemeSettingsAppIconItem.swift +++ b/submodules/SettingsUI/Sources/Themes/ThemeSettingsAppIconItem.swift @@ -99,9 +99,11 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { private let iconNode: ASImageNode private let overlayNode: ASImageNode private let lockNode: ASImageNode - private let textNode: ASTextNode + private let textNode: ImmediateTextNode private var action: (() -> Void)? + private var locked = false + override init() { self.iconNode = ASImageNode() self.iconNode.frame = CGRect(origin: CGPoint(), size: CGSize(width: 62.0, height: 62.0)) @@ -112,10 +114,11 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { self.overlayNode.isLayerBacked = true self.lockNode = ASImageNode() + self.lockNode.contentMode = .scaleAspectFit self.lockNode.displaysAsynchronously = false self.lockNode.isUserInteractionEnabled = false - self.textNode = ASTextNode() + self.textNode = ImmediateTextNode() self.textNode.isUserInteractionEnabled = false self.textNode.displaysAsynchronously = false @@ -128,6 +131,7 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { } func setup(theme: PresentationTheme, icon: UIImage, title: NSAttributedString, locked: Bool, color: UIColor, bordered: Bool, selected: Bool, action: @escaping () -> Void) { + self.locked = locked self.iconNode.image = icon self.textNode.attributedText = title self.overlayNode.image = generateBorderImage(theme: theme, bordered: bordered, selected: selected) @@ -135,6 +139,8 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { self.action = { action() } + + self.setNeedsLayout() } override func didLoad() { @@ -154,10 +160,17 @@ private final class ThemeSettingsAppIconNode : ASDisplayNode { let bounds = self.bounds - self.iconNode.frame = CGRect(origin: CGPoint(x: 10.0, y: 14.0), size: CGSize(width: 62.0, height: 62.0)) - self.overlayNode.frame = CGRect(origin: CGPoint(x: 10.0, y: 14.0), size: CGSize(width: 62.0, height: 62.0)) - self.textNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 87.0), size: CGSize(width: bounds.size.width, height: 16.0)) - self.lockNode.frame = CGRect(x: 9.0, y: 90.0, width: 6.0, height: 8.0) + self.iconNode.frame = CGRect(origin: CGPoint(x: 9.0, y: 14.0), size: CGSize(width: 62.0, height: 62.0)) + self.overlayNode.frame = CGRect(origin: CGPoint(x: 9.0, y: 14.0), size: CGSize(width: 62.0, height: 62.0)) + + let textSize = self.textNode.updateLayout(bounds.size) + var textFrame = CGRect(origin: CGPoint(x: floorToScreenPixels((bounds.width - textSize.width)) / 2.0, y: 87.0), size: textSize) + if self.locked { + textFrame = textFrame.offsetBy(dx: 5.0, dy: 0.0) + } + self.textNode.frame = textFrame + + self.lockNode.frame = CGRect(x: self.textNode.frame.minX - 10.0, y: 90.0, width: 6.0, height: 8.0) } } @@ -331,12 +344,12 @@ class ThemeSettingsAppIconItemNode: ListViewItemNode, ItemListItemNode { name = item.strings.Appearance_AppIconNew1 case "New2": name = item.strings.Appearance_AppIconNew2 - case "PremiumCosmic": - name = "Cosmic" - case "PremiumCherry": - name = "Cherry" - case "PremiumDuck": - name = "Duck" + case "Premium": + name = "Premium" + case "PremiumBlack": + name = "Black" + case "PremiumTurbo": + name = "Turbo" default: name = icon.name } diff --git a/submodules/ShareController/Sources/ShareController.swift b/submodules/ShareController/Sources/ShareController.swift index db524dc28e..9055ca93b5 100644 --- a/submodules/ShareController/Sources/ShareController.swift +++ b/submodules/ShareController/Sources/ShareController.swift @@ -39,6 +39,10 @@ public enum ShareControllerExternalStatus { case done } +public enum ShareControllerError { + case fileTooBig(Int64) +} + public struct ShareControllerSegmentedValue { let title: String let subject: ShareControllerSubject @@ -61,7 +65,7 @@ public enum ShareControllerSubject { case image([ImageRepresentationWithReference]) case media(AnyMediaReference) case mapMedia(TelegramMediaMap) - case fromExternal(([PeerId], String, Account, Bool) -> Signal) + case fromExternal(([PeerId], String, Account, Bool) -> Signal) } private enum ExternalShareItem { @@ -657,18 +661,20 @@ public final class ShareController: ViewController { let queue = Queue.mainQueue() var displayedError = false return combineLatest(queue: queue, shareSignals) - |> mapToSignal { messageIdSets -> Signal in - var statuses: [Signal<(MessageId, PendingMessageStatus?, PendingMessageFailureReason?), NoError>] = [] + |> castError(ShareControllerError.self) + |> mapToSignal { messageIdSets -> Signal in + var statuses: [Signal<(MessageId, PendingMessageStatus?, PendingMessageFailureReason?), ShareControllerError>] = [] for messageIds in messageIdSets { for case let id? in messageIds { statuses.append(account.pendingMessageManager.pendingMessageStatus(id) + |> castError(ShareControllerError.self) |> map { status, error -> (MessageId, PendingMessageStatus?, PendingMessageFailureReason?) in return (id, status, error) }) } } return combineLatest(queue: queue, statuses) - |> mapToSignal { statuses -> Signal in + |> mapToSignal { statuses -> Signal in var hasStatuses = false for (id, status, error) in statuses { if let error = error { diff --git a/submodules/ShareController/Sources/ShareControllerNode.swift b/submodules/ShareController/Sources/ShareControllerNode.swift index 64ccea13ea..fd5f9b8214 100644 --- a/submodules/ShareController/Sources/ShareControllerNode.swift +++ b/submodules/ShareController/Sources/ShareControllerNode.swift @@ -59,7 +59,7 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate var dismiss: ((Bool) -> Void)? var cancel: (() -> Void)? - var share: ((String, [PeerId], Bool, Bool) -> Signal)? + var share: ((String, [PeerId], Bool, Bool) -> Signal)? var shareExternal: ((Bool) -> Signal)? var switchToAnotherAccount: (() -> Void)? var debugAction: (() -> Void)? @@ -673,7 +673,6 @@ final class ShareControllerNode: ViewControllerTracingNode, UIScrollViewDelegate }) } - // if !self.fromForeignApp { self.animateOut(shared: true, completion: { }) diff --git a/submodules/ShareItems/Sources/ShareItems.swift b/submodules/ShareItems/Sources/ShareItems.swift index 33ddb6af04..d0bad3b932 100644 --- a/submodules/ShareItems/Sources/ShareItems.swift +++ b/submodules/ShareItems/Sources/ShareItems.swift @@ -47,16 +47,21 @@ private func scalePhotoImage(_ image: UIImage, dimensions: CGSize) -> UIImage? { } } -private func preparedShareItem(account: Account, to peerId: PeerId, value: [String: Any]) -> Signal { +public enum PreparedShareItemError { + case generic + case fileTooBig(Int64) +} + +private func preparedShareItem(account: Account, to peerId: PeerId, value: [String: Any]) -> Signal { if let imageData = value["scaledImageData"] as? Data, let dimensions = value["scaledImageDimensions"] as? NSValue { let diminsionsSize = dimensions.cgSizeValue return .single(.preparing(false)) |> then( standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(diminsionsSize.width), height: Int32(diminsionsSize.height))) - |> mapError { _ -> Void in - return Void() + |> mapError { _ -> PreparedShareItemError in + return .generic } - |> mapToSignal { event -> Signal in + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -72,10 +77,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(false)) |> then( standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(dimensions.width), height: Int32(dimensions.height))) - |> mapError { _ -> Void in - return Void() + |> mapError { _ -> PreparedShareItemError in + return .generic } - |> mapToSignal { event -> Signal in + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -111,7 +116,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri } var finalDuration: Double = CMTimeGetSeconds(asset.duration) - func loadValues(_ avAsset: AVURLAsset) -> Signal { + func loadValues(_ avAsset: AVURLAsset) -> Signal { return Signal { subscriber in avAsset.loadValuesAsynchronously(forKeys: ["tracks", "duration", "playable"]) { subscriber.putNext(avAsset) @@ -123,7 +128,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(true)) |> then( loadValues(asset) - |> mapToSignal { asset -> Signal in + |> mapToSignal { asset -> Signal in let preset = adjustments?.preset ?? TGMediaVideoConversionPresetCompressedMedium let finalDimensions = TGMediaVideoConverter.dimensions(for: asset.originalSize, adjustments: adjustments, preset: preset) @@ -142,10 +147,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri let resource = LocalFileVideoMediaResource(randomId: Int64.random(in: Int64.min ... Int64.max), path: asset.url.path, adjustments: resourceAdjustments) return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .resource(.standalone(resource: resource)), mimeType: "video/mp4", attributes: [.Video(duration: Int(finalDuration), size: PixelDimensions(width: Int32(finalDimensions.width), height: Int32(finalDimensions.height)), flags: flags)], hintFileIsLarge: estimatedSize > 10 * 1024 * 1024) - |> mapError { _ -> Void in - return Void() + |> mapError { _ -> PreparedShareItemError in + return .generic } - |> mapToSignal { event -> Signal in + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -201,7 +206,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(true)) |> then( convertedData - |> castError(Void.self) + |> castError(PreparedShareItemError.self) |> mapToSignal { data, dimensions, duration, converted in var attributes: [TelegramMediaFileAttribute] = [] let mimeType: String @@ -213,8 +218,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri attributes = [.ImageSize(size: PixelDimensions(width: Int32(dimensions.width), height: Int32(dimensions.height))), .Animated, .FileName(fileName: fileName ?? "animation.gif")] } return standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(data), mimeType: mimeType, attributes: attributes, hintFileIsLarge: data.count > 10 * 1024 * 1024) - |> mapError { _ -> Void in return Void() } - |> mapToSignal { event -> Signal in + |> mapError { _ -> PreparedShareItemError in + return .generic + } + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -230,8 +237,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(false)) |> then( standaloneUploadedImage(account: account, peerId: peerId, text: "", data: imageData, dimensions: PixelDimensions(width: Int32(scaledImage.size.width), height: Int32(scaledImage.size.height))) - |> mapError { _ -> Void in return Void() } - |> mapToSignal { event -> Signal in + |> mapError { _ -> PreparedShareItemError in + return .generic + } + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -251,8 +260,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(long)) |> then( standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(data), thumbnailData: thumbnailData, mimeType: mimeType, attributes: [.FileName(fileName: fileName ?? "file")], hintFileIsLarge: data.count > 10 * 1024 * 1024) - |> mapError { _ -> Void in return Void() } - |> mapToSignal { event -> Signal in + |> mapError { _ -> PreparedShareItemError in + return .generic + } + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -280,8 +291,10 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri return .single(.preparing(long)) |> then( standaloneUploadedFile(account: account, peerId: peerId, text: "", source: .data(audioData), mimeType: mimeType, attributes: [.Audio(isVoice: isVoice, duration: Int(duration), title: title, performer: artist, waveform: waveform?.makeData()), .FileName(fileName: fileName)], hintFileIsLarge: audioData.count > 10 * 1024 * 1024) - |> mapError { _ -> Void in return Void() } - |> mapToSignal { event -> Signal in + |> mapError { _ -> PreparedShareItemError in + return .generic + } + |> mapToSignal { event -> Signal in switch event { case let .progress(value): return .single(.progress(value)) @@ -300,7 +313,7 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri ) } else if let url = value["url"] as? URL { if TGShareLocationSignals.isLocationURL(url) { - return Signal { subscriber in + return Signal { subscriber in subscriber.putNext(.preparing(false)) let disposable = TGShareLocationSignals.locationMessageContent(for: url).start(next: { value in if let value = value as? TGShareLocationResult { @@ -332,8 +345,8 @@ private func preparedShareItem(account: Account, to peerId: PeerId, value: [Stri } } -public func preparedShareItems(account: Account, to peerId: PeerId, dataItems: [MTSignal], additionalText: String) -> Signal { - var dataSignals: Signal<[String: Any], Void> = .complete() +public func preparedShareItems(account: Account, to peerId: PeerId, dataItems: [MTSignal], additionalText: String) -> Signal { + var dataSignals: Signal<[String: Any], PreparedShareItemError> = .complete() for dataItem in dataItems { let wrappedSignal: Signal<[String: Any], NoError> = Signal { subscriber in let disposable = dataItem.start(next: { value in @@ -349,7 +362,7 @@ public func preparedShareItems(account: Account, to peerId: PeerId, dataItems: [ dataSignals = dataSignals |> then( wrappedSignal - |> castError(Void.self) + |> castError(PreparedShareItemError.self) |> take(1) ) } @@ -359,7 +372,7 @@ public func preparedShareItems(account: Account, to peerId: PeerId, dataItems: [ |> reduceLeft(value: [[String: Any]](), f: { list, rest in return list + rest }) - |> mapToSignal { items -> Signal<[PreparedShareItem], Void> in + |> mapToSignal { items -> Signal<[PreparedShareItem], PreparedShareItemError> in return combineLatest(items.map { preparedShareItem(account: account, to: peerId, value: $0) }) diff --git a/submodules/StickerPackPreviewUI/BUILD b/submodules/StickerPackPreviewUI/BUILD index 827381143e..78d84217e6 100644 --- a/submodules/StickerPackPreviewUI/BUILD +++ b/submodules/StickerPackPreviewUI/BUILD @@ -34,6 +34,7 @@ swift_library( "//submodules/MoreButtonNode:MoreButtonNode", "//submodules/SolidRoundedButtonNode:SolidRoundedButtonNode", "//submodules/PremiumUI:PremiumUI", + "//submodules/OverlayStatusController:OverlayStatusController", ], visibility = [ "//visibility:public", diff --git a/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift b/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift index afbc4aeef8..443f256dda 100644 --- a/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift +++ b/submodules/StickerPackPreviewUI/Sources/StickerPackScreen.swift @@ -16,6 +16,8 @@ import UndoUI import ShareController import TextFormat import PremiumUI +import OverlayStatusController +import PresentationDataUtils private enum StickerPackPreviewGridEntry: Comparable, Identifiable { case sticker(index: Int, stableId: Int, stickerItem: StickerPackItem?, isEmpty: Bool, isPremium: Bool, isLocked: Bool) @@ -577,6 +579,10 @@ private final class StickerPackContainer: ASDisplayNode { self.actionAreaSeparatorNode.alpha = backgroundAlpha } + var onLoading: () -> Void = {} + var onReady: () -> Void = {} + var onError: () -> Void = {} + private var currentContents: LoadedStickerPack? private func updateStickerPackContents(_ contents: LoadedStickerPack, hasPremium: Bool) { self.currentContents = contents @@ -590,6 +596,7 @@ private final class StickerPackContainer: ASDisplayNode { switch contents { case .fetching: + self.onLoading() entries = [] self.buttonNode.setTitle(self.presentationData.strings.Channel_NotificationLoading, with: Font.semibold(17.0), with: self.presentationData.theme.list.itemDisabledTextColor, for: .normal) self.buttonNode.setBackgroundImage(nil, for: []) @@ -620,20 +627,11 @@ private final class StickerPackContainer: ASDisplayNode { self.titleContainer.addSubnode(titlePlaceholderNode) } case .none: - entries = [] - self.buttonNode.setTitle(self.presentationData.strings.Common_Close, with: Font.semibold(17.0), with: self.presentationData.theme.list.itemAccentColor, for: .normal) - self.buttonNode.setBackgroundImage(nil, for: []) - - for _ in 0 ..< 16 { - let resolvedStableId = self.nextStableId - self.nextStableId += 1 - entries.append(.sticker(index: entries.count, stableId: resolvedStableId, stickerItem: nil, isEmpty: true, isPremium: false, isLocked: false)) - } - if let titlePlaceholderNode = self.titlePlaceholderNode { - self.titlePlaceholderNode = nil - titlePlaceholderNode.removeFromSupernode() - } + self.onError() + self.controller?.present(textAlertController(context: self.context, title: nil, text: self.presentationData.strings.StickerPack_ErrorNotFound, actions: [TextAlertAction(type: .defaultAction, title: presentationData.strings.Common_OK, action: {})]), in: .window(.root)) + self.controller?.dismiss(animated: true, completion: nil) case let .result(info, items, installed): + self.onReady() if !items.isEmpty && self.currentStickerPack == nil { if let _ = self.validLayout, abs(self.expandScrollProgress - 1.0) < .ulpOfOne { scrollToItem = GridNodeScrollToItem(index: 0, position: .top(0.0), transition: .immediate, directionHint: .up, adjustForSection: false) @@ -978,6 +976,10 @@ private final class StickerPackScreenNode: ViewControllerTracingNode { return self._ready } + var onLoading: () -> Void = {} + var onReady: () -> Void = {} + var onError: () -> Void = {} + init(context: AccountContext, controller: StickerPackScreenImpl, stickerPacks: [StickerPackReference], initialSelectedStickerPackIndex: Int, modalProgressUpdated: @escaping (CGFloat, ContainedViewLayoutTransition) -> Void, dismissed: @escaping () -> Void, presentInGlobalOverlay: @escaping (ViewController, Any?) -> Void, sendSticker: ((FileMediaReference, ASDisplayNode, CGRect) -> Bool)?, openMention: @escaping (String) -> Void) { self.context = context self.controller = controller @@ -1104,6 +1106,15 @@ private final class StickerPackScreenNode: ViewControllerTracingNode { } } }, presentInGlobalOverlay: presentInGlobalOverlay, sendSticker: sendSticker, openMention: openMention, controller: self.controller) + container.onReady = { [weak self] in + self?.onReady() + } + container.onLoading = { [weak self] in + self?.onLoading() + } + container.onError = { [weak self] in + self?.onError() + } self.containerContainingNode.addSubnode(container) self.containers[i] = container } @@ -1380,17 +1391,76 @@ public final class StickerPackScreenImpl: ViewController { })) }) + var loaded = false + var dismissed = false + + var overlayStatusController: ViewController? + let cancelImpl: (() -> Void)? = { [weak self] in + dismissed = true + overlayStatusController?.dismiss() + self?.dismiss() + } + + self.controllerNode.onReady = { [weak self] in + loaded = true + + if let strongSelf = self { + if !dismissed { + if let overlayStatusController = overlayStatusController { + overlayStatusController.dismiss() + } + + if strongSelf.alreadyDidAppear { + strongSelf.controllerNode.animateIn() + } else { + strongSelf.isReady = true + } + + self?.controllerNode.isHidden = false + self?.controllerNode.animateIn() + } + } + } + + let presentationData = self.presentationData + self.controllerNode.onLoading = { [weak self] in + Queue.mainQueue().after(0.15, { + if !loaded { + let controller = OverlayStatusController(theme: presentationData.theme, type: .loading(cancelled: { + cancelImpl?() + })) + self?.present(controller, in: .window(.root)) + overlayStatusController = controller + } + }) + } + + self.controllerNode.onError = { + loaded = true + + if let overlayStatusController = overlayStatusController { + overlayStatusController.dismiss() + } + } + + self.controllerNode.isHidden = true + self._ready.set(self.controllerNode.ready.get()) super.displayNodeDidLoad() } + private var isReady = false + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if !self.alreadyDidAppear { self.alreadyDidAppear = true - self.controllerNode.animateIn() + + if self.isReady { + self.controllerNode.animateIn() + } } } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Peers/ChatListFiltering.swift b/submodules/TelegramCore/Sources/TelegramEngine/Peers/ChatListFiltering.swift index 2cb2f5f900..8afc0dd85f 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Peers/ChatListFiltering.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Peers/ChatListFiltering.swift @@ -147,9 +147,6 @@ public struct ChatListFilterIncludePeers: Equatable, Hashable { return false } - if self.peers.count + self.pinnedPeers.count >= 100 { - return false - } self.peers.insert(peerId, at: 0) return true } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift index 7060d8e146..7d61a5a8f3 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift @@ -85,7 +85,9 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic if query == "\u{2764}" { query = "\u{2764}\u{FE0F}" } - return account.postbox.transaction { transaction -> ([FoundStickerItem], CachedStickerQueryResult?) in + return account.postbox.transaction { transaction -> ([FoundStickerItem], CachedStickerQueryResult?, Bool) in + let isPremium = transaction.getPeer(account.peerId)?.isPremium ?? false + var result: [FoundStickerItem] = [] if scope.contains(.installed) { for entry in transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudSavedStickers) { @@ -108,6 +110,9 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic for entry in transaction.getOrderedListItems(collectionId: Namespaces.OrderedItemList.CloudRecentStickers) { if let item = entry.contents.get(RecentMediaItem.self) { let file = item.media + if file.isPremiumSticker && !isPremium { + continue + } if !currentItems.contains(file.fileId) { for case let .Sticker(displayText, _, _) in file.attributes { @@ -135,6 +140,10 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic var installedAnimatedItems: [FoundStickerItem] = [] for item in transaction.searchItemCollection(namespace: Namespaces.ItemCollection.CloudStickerPacks, query: searchQuery) { if let item = item as? StickerPackItem { + if item.file.isPremiumSticker && !isPremium { + continue + } + if !currentItems.contains(item.file.fileId) { var stringRepresentations: [String] = [] for key in item.indexKeys { @@ -158,12 +167,18 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic } for file in recentAnimatedItems { + if file.isPremiumSticker && !isPremium { + continue + } if matchingRecentItemsIds.contains(file.fileId) { result.append(FoundStickerItem(file: file, stringRepresentations: [query])) } } for file in recentItems { + if file.isPremiumSticker && !isPremium { + continue + } if matchingRecentItemsIds.contains(file.fileId) { result.append(FoundStickerItem(file: file, stringRepresentations: [query])) } @@ -183,8 +198,8 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic cached = nil } - return (result, cached) - } |> mapToSignal { localItems, cached -> Signal<[FoundStickerItem], NoError> in + return (result, cached, isPremium) + } |> mapToSignal { localItems, cached, isPremium -> Signal<[FoundStickerItem], NoError> in var tempResult: [FoundStickerItem] = localItems if !scope.contains(.remote) { return .single(tempResult) @@ -196,6 +211,9 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic var cachedAnimatedItems: [FoundStickerItem] = [] for file in cached.items { + if file.isPremiumSticker && !isPremium { + continue + } if !currentItemIds.contains(file.fileId) { if file.isAnimatedSticker || file.isVideoSticker { cachedAnimatedItems.append(FoundStickerItem(file: file, stringRepresentations: [])) @@ -226,6 +244,9 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic var files: [TelegramMediaFile] = [] for sticker in stickers { if let file = telegramMediaFileFromApiDocument(sticker), let id = file.id { + if file.isPremiumSticker && !isPremium { + continue + } files.append(file) if !currentItemIds.contains(id) { if file.isAnimatedSticker || file.isVideoSticker { diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift index 0a11af13f9..da1c28b02e 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourceKey.swift @@ -167,7 +167,6 @@ public enum PresentationResourceKey: Int32 { case chatInputMediaPanelTrendingGifsIcon case chatInputMediaPanelStickersModeIcon case chatInputMediaPanelPremiumIcon - case chatInputMediaStickerGridPremiumIcon case chatInputButtonPanelButtonImage case chatInputButtonPanelButtonHighlightedImage diff --git a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift index 58778dfbb2..e569f326f5 100644 --- a/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift +++ b/submodules/TelegramPresentationData/Sources/Resources/PresentationResourcesChat.swift @@ -319,40 +319,6 @@ public struct PresentationResourcesChat { }) } - public static func chatInputMediaStickerGridPremiumIcon(_ theme: PresentationTheme) -> UIImage? { - return theme.image(PresentationResourceKey.chatInputMediaStickerGridPremiumIcon.rawValue, { theme in - return generateImage(CGSize(width: 32.0, height: 32.0), contextGenerator: { size, context in - context.clear(CGRect(origin: CGPoint(), size: size)) - if let backgroundImage = UIImage(bundleImageName: "Premium/BackgroundIcon"), let foregroundImage = UIImage(bundleImageName: "Premium/ForegroundIcon") { - context.saveGState() - if let cgImage = backgroundImage.cgImage { - context.clip(to: CGRect(origin: .zero, size: size), mask: cgImage) - } - - let colorsArray: [CGColor] = [ - UIColor(rgb: 0x6B93FF).cgColor, - UIColor(rgb: 0x6B93FF).cgColor, - UIColor(rgb: 0x976FFF).cgColor, - UIColor(rgb: 0xE46ACE).cgColor, - UIColor(rgb: 0xE46ACE).cgColor - ] - var locations: [CGFloat] = [0.0, 0.15, 0.5, 0.85, 1.0] - let gradient = CGGradient(colorsSpace: deviceColorSpace, colors: colorsArray as CFArray, locations: &locations)! - - context.drawLinearGradient(gradient, start: CGPoint(x: 0.0, y: 0.0), end: CGPoint(x: size.width, y: size.height), options: CGGradientDrawingOptions()) - - context.restoreGState() - - if let cgImage = foregroundImage.cgImage { - context.clip(to: CGRect(origin: .zero, size: size), mask: cgImage) - } - context.setFillColor(UIColor.white.cgColor) - context.fill(CGRect(origin: CGPoint(), size: size)) - } - }) - }) - } - public static func chatInputMediaPanelRecentStickersIcon(_ theme: PresentationTheme) -> UIImage? { return theme.image(PresentationResourceKey.chatInputMediaPanelRecentStickersIconImage.rawValue, { theme in return generateImage(CGSize(width: 42.0, height: 42.0), contextGenerator: { size, context in diff --git a/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/Contents.json new file mode 100644 index 0000000000..2e34907284 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ReactionsBg.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/ReactionsBg.pdf b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/ReactionsBg.pdf new file mode 100644 index 0000000000..833557c50b --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsBackground.imageset/ReactionsBg.pdf @@ -0,0 +1,344 @@ +%PDF-1.7 + +1 0 obj + << >> +endobj + +2 0 obj + << /Length 3 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 0.000000 0.022736 cm +0.000000 0.000000 0.000000 scn +32.000000 16.000000 m +32.000000 7.163445 24.836555 0.000000 16.000000 0.000000 c +7.163444 0.000000 0.000000 7.163445 0.000000 16.000000 c +0.000000 24.836555 7.163444 32.000000 16.000000 32.000000 c +24.836555 32.000000 32.000000 24.836555 32.000000 16.000000 c +h +f +n +Q +q +1.000000 0.000000 -0.000000 1.000000 21.500017 1.022857 cm +0.000000 0.000000 0.000000 scn +2.663995 8.499941 m +2.663995 9.513936 3.486000 10.335941 4.499994 10.335941 c +5.513990 10.335941 6.335995 9.513936 6.335995 8.499941 c +6.335995 6.998853 l +6.172779 7.000001 5.994865 7.000001 5.800001 7.000001 c +3.200000 7.000001 l +3.005131 7.000001 2.827214 7.000001 2.663995 6.998853 c +2.663995 8.499941 l +h +1.335994 6.879089 m +1.335994 8.499941 l +1.335994 10.247370 2.752566 11.663941 4.499994 11.663941 c +6.247424 11.663941 7.663995 10.247370 7.663995 8.499941 c +7.663995 6.879093 l +7.751150 6.852844 7.831669 6.820897 7.907982 6.782014 c +8.284306 6.590267 8.590266 6.284306 8.782013 5.907981 c +9.000000 5.480158 9.000000 4.920106 9.000000 3.800001 c +9.000000 3.200002 l +9.000000 2.079896 9.000000 1.519843 8.782013 1.092020 c +8.590266 0.715696 8.284306 0.409734 7.907982 0.217987 c +7.480158 0.000000 6.920105 0.000000 5.800001 0.000000 c +3.200000 0.000000 l +2.079895 0.000000 1.519843 0.000000 1.092019 0.217987 c +0.715695 0.409734 0.409734 0.715696 0.217987 1.092020 c +0.000000 1.519843 0.000000 2.079895 0.000000 3.200000 c +0.000000 3.800000 l +0.000000 4.920106 0.000000 5.480158 0.217987 5.907981 c +0.409734 6.284306 0.715695 6.590267 1.092019 6.782014 c +1.168328 6.820895 1.248844 6.852841 1.335994 6.879089 c +h +f* +n +Q +q +1.000000 0.000000 -0.000000 1.000000 21.500017 -1.023652 cm +0.000000 0.000000 0.000000 scn +6.335995 9.045362 m +6.328803 8.022530 l +7.358852 8.015287 l +7.358852 9.045362 l +6.335995 9.045362 l +h +2.663995 9.045362 m +1.641138 9.045362 l +1.641138 8.015287 l +2.671187 8.022530 l +2.663995 9.045362 l +h +1.335994 8.925598 m +1.630970 7.946198 l +2.358852 8.165421 l +2.358852 8.925598 l +1.335994 8.925598 l +h +7.663995 8.925602 m +6.641138 8.925602 l +6.641138 8.165421 l +7.369023 7.946200 l +7.663995 8.925602 l +h +7.907982 8.828523 m +7.443614 7.917150 l +7.443614 7.917150 l +7.907982 8.828523 l +h +8.782013 7.954490 m +7.870641 7.490123 l +7.870641 7.490123 l +8.782013 7.954490 l +h +8.782013 3.138529 m +7.870641 3.602897 l +7.870641 3.602897 l +8.782013 3.138529 l +h +7.907982 2.264496 m +7.443614 3.175869 l +7.443614 3.175869 l +7.907982 2.264496 l +h +1.092019 2.264496 m +1.556386 3.175869 l +1.556386 3.175869 l +1.092019 2.264496 l +h +0.217987 3.138529 m +-0.693385 2.674161 l +-0.693385 2.674161 l +0.217987 3.138529 l +h +0.217987 7.954490 m +-0.693385 8.418858 l +0.217987 7.954490 l +h +1.092019 8.828523 m +0.627653 9.739895 l +0.627652 9.739895 l +1.092019 8.828523 l +h +4.499994 13.405307 m +2.921091 13.405307 1.641138 12.125353 1.641138 10.546450 c +3.686852 10.546450 l +3.686852 10.995537 4.050909 11.359593 4.499994 11.359593 c +4.499994 13.405307 l +h +7.358852 10.546450 m +7.358852 12.125353 6.078898 13.405307 4.499994 13.405307 c +4.499994 11.359593 l +4.949081 11.359593 5.313138 10.995537 5.313138 10.546450 c +7.358852 10.546450 l +h +7.358852 9.045362 m +7.358852 10.546450 l +5.313138 10.546450 l +5.313138 9.045362 l +7.358852 9.045362 l +h +5.800001 8.023653 m +5.995777 8.023653 6.169879 8.023647 6.328803 8.022530 c +6.343188 10.068193 l +6.175677 10.069371 5.993953 10.069366 5.800001 10.069366 c +5.800001 8.023653 l +h +3.200000 8.023653 m +5.800001 8.023653 l +5.800001 10.069366 l +3.200000 10.069366 l +3.200000 8.023653 l +h +2.671187 8.022530 m +2.830113 8.023647 3.004220 8.023653 3.200000 8.023653 c +3.200000 10.069366 l +3.006043 10.069366 2.824316 10.069371 2.656802 10.068193 c +2.671187 8.022530 l +h +1.641138 10.546450 m +1.641138 9.045362 l +3.686852 9.045362 l +3.686852 10.546450 l +1.641138 10.546450 l +h +2.358852 8.925598 m +2.358852 10.546450 l +0.313137 10.546450 l +0.313137 8.925598 l +2.358852 8.925598 l +h +2.358852 10.546450 m +2.358852 11.728971 3.317474 12.687593 4.499994 12.687593 c +4.499994 14.733307 l +2.187657 14.733307 0.313137 12.858788 0.313137 10.546450 c +2.358852 10.546450 l +h +4.499994 12.687593 m +5.682515 12.687593 6.641138 11.728971 6.641138 10.546450 c +8.686852 10.546450 l +8.686852 12.858788 6.812332 14.733307 4.499994 14.733307 c +4.499994 12.687593 l +h +6.641138 10.546450 m +6.641138 8.925602 l +8.686852 8.925602 l +8.686852 10.546450 l +6.641138 10.546450 l +h +7.369023 7.946200 m +7.402400 7.936147 7.425747 7.926254 7.443614 7.917150 c +8.372350 9.739895 l +8.237591 9.808558 8.099900 9.862558 7.958967 9.905004 c +7.369023 7.946200 l +h +7.443614 7.917150 m +7.627475 7.823469 7.776959 7.673985 7.870641 7.490123 c +9.693386 8.418858 l +9.403575 8.987644 8.941136 9.450083 8.372349 9.739895 c +7.443614 7.917150 l +h +7.870641 7.490123 m +7.893919 7.444438 7.931211 7.347062 7.953292 7.076812 c +7.976348 6.794622 7.977143 6.423440 7.977143 5.846510 c +10.022858 5.846510 l +10.022858 6.389684 10.023653 6.858581 9.992212 7.243399 c +9.959796 7.640157 9.888095 8.036718 9.693385 8.418858 c +7.870641 7.490123 l +h +7.977143 5.846510 m +7.977143 5.246511 l +10.022858 5.246511 l +10.022858 5.846510 l +7.977143 5.846510 l +h +7.977143 5.246511 m +7.977143 4.669580 7.976348 4.298397 7.953292 4.016207 c +7.931211 3.745956 7.893919 3.648581 7.870641 3.602897 c +9.693385 2.674161 l +9.888095 3.056299 9.959796 3.452862 9.992212 3.849620 c +10.023653 4.234438 10.022858 4.703335 10.022858 5.246511 c +7.977143 5.246511 l +h +7.870641 3.602897 m +7.776958 3.419034 7.627475 3.269550 7.443614 3.175869 c +8.372349 1.353124 l +8.941137 1.642936 9.403575 2.105375 9.693385 2.674161 c +7.870641 3.602897 l +h +7.443614 3.175869 m +7.397930 3.152591 7.300553 3.115298 7.030303 3.093218 c +6.748113 3.070162 6.376931 3.069366 5.800001 3.069366 c +5.800001 1.023652 l +6.343175 1.023652 6.812072 1.022857 7.196890 1.054297 c +7.593648 1.086714 7.990210 1.158415 8.372349 1.353124 c +7.443614 3.175869 l +h +5.800001 3.069366 m +3.200000 3.069366 l +3.200000 1.023652 l +5.800001 1.023652 l +5.800001 3.069366 l +h +3.200000 3.069366 m +2.623069 3.069366 2.251888 3.070162 1.969697 3.093218 c +1.699448 3.115298 1.602071 3.152591 1.556386 3.175869 c +0.627651 1.353124 l +1.009790 1.158415 1.406352 1.086714 1.803111 1.054297 c +2.187928 1.022857 2.656826 1.023652 3.200000 1.023652 c +3.200000 3.069366 l +h +1.556386 3.175869 m +1.372526 3.269550 1.223041 3.419035 1.129359 3.602897 c +-0.693385 2.674161 l +-0.403574 2.105375 0.058864 1.642936 0.627652 1.353124 c +1.556386 3.175869 l +h +1.129359 3.602897 m +1.106082 3.648581 1.068789 3.745956 1.046708 4.016207 c +1.023653 4.298397 1.022857 4.669579 1.022857 5.246509 c +-1.022857 5.246509 l +-1.022857 4.703335 -1.023653 4.234438 -0.992212 3.849620 c +-0.959795 3.452862 -0.888095 3.056299 -0.693385 2.674161 c +1.129359 3.602897 l +h +1.022857 5.246509 m +1.022857 5.846509 l +-1.022857 5.846509 l +-1.022857 5.246509 l +1.022857 5.246509 l +h +1.022857 5.846509 m +1.022857 6.423440 1.023653 6.794621 1.046708 7.076812 c +1.068789 7.347062 1.106082 7.444438 1.129359 7.490123 c +-0.693385 8.418858 l +-0.888095 8.036718 -0.959795 7.640157 -0.992212 7.243399 c +-1.023653 6.858581 -1.022857 6.389684 -1.022857 5.846509 c +1.022857 5.846509 l +h +1.129359 7.490123 m +1.223041 7.673985 1.372525 7.823468 1.556386 7.917150 c +0.627652 9.739895 l +0.058864 9.450083 -0.403574 8.987644 -0.693385 8.418858 c +1.129359 7.490123 l +h +1.556385 7.917150 m +1.574255 7.926254 1.597601 7.936147 1.630970 7.946198 c +1.041019 9.904999 l +0.900087 9.862554 0.762402 9.808554 0.627653 9.739895 c +1.556385 7.917150 l +h +f +n +Q + +endstream +endobj + +3 0 obj + 7556 +endobj + +4 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 32.000000 32.022736 ] + /Resources 1 0 R + /Contents 2 0 R + /Parent 5 0 R + >> +endobj + +5 0 obj + << /Kids [ 4 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +6 0 obj + << /Pages 5 0 R + /Type /Catalog + >> +endobj + +xref +0 7 +0000000000 65535 f +0000000010 00000 n +0000000034 00000 n +0000007646 00000 n +0000007669 00000 n +0000007842 00000 n +0000007916 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 6 0 R + /Size 7 +>> +startxref +7975 +%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/Contents.json b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/Contents.json new file mode 100644 index 0000000000..b3d1bacbf7 --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "ReactionsFg.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/ReactionsFg.pdf b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/ReactionsFg.pdf new file mode 100644 index 0000000000..400f4e421b --- /dev/null +++ b/submodules/TelegramUI/Images.xcassets/Premium/ReactionsForeground.imageset/ReactionsFg.pdf @@ -0,0 +1,127 @@ +%PDF-1.7 + +1 0 obj + << >> +endobj + +2 0 obj + << /Length 3 0 R >> +stream +/DeviceRGB CS +/DeviceRGB cs +q +1.000000 0.000000 -0.000000 1.000000 21.500017 1.000122 cm +1.000000 1.000000 1.000000 scn +2.663995 8.499941 m +2.663995 9.513935 3.486000 10.335940 4.499994 10.335940 c +5.513989 10.335940 6.335995 9.513935 6.335995 8.499941 c +6.335995 6.998852 l +6.172778 7.000000 5.994864 7.000000 5.800000 7.000000 c +3.200000 7.000000 l +3.005131 7.000000 2.827214 7.000000 2.663995 6.998852 c +2.663995 8.499941 l +h +1.335994 6.879089 m +1.335994 8.499941 l +1.335994 10.247370 2.752566 11.663940 4.499994 11.663940 c +6.247423 11.663940 7.663995 10.247370 7.663995 8.499941 c +7.663995 6.879092 l +7.751150 6.852843 7.831669 6.820896 7.907981 6.782013 c +8.284306 6.590266 8.590266 6.284305 8.782013 5.907981 c +9.000000 5.480157 9.000000 4.920105 9.000000 3.800000 c +9.000000 3.200001 l +9.000000 2.079895 9.000000 1.519842 8.782013 1.092019 c +8.590266 0.715695 8.284306 0.409734 7.907981 0.217987 c +7.480158 0.000000 6.920105 0.000000 5.800000 0.000000 c +3.200000 0.000000 l +2.079895 0.000000 1.519843 0.000000 1.092019 0.217987 c +0.715695 0.409734 0.409734 0.715695 0.217987 1.092019 c +0.000000 1.519842 0.000000 2.079895 0.000000 3.200000 c +0.000000 3.800000 l +0.000000 4.920105 0.000000 5.480157 0.217987 5.907981 c +0.409734 6.284305 0.715695 6.590266 1.092019 6.782013 c +1.168328 6.820894 1.248844 6.852841 1.335994 6.879089 c +h +f* +n +Q +q +1.000000 0.000000 -0.000000 1.000000 15.291429 6.857141 cm +1.000000 1.000000 1.000000 scn +0.000000 17.571430 m +0.000000 17.965918 0.319797 18.285715 0.714286 18.285715 c +0.714286 18.285715 l +1.108775 18.285715 1.428571 17.965919 1.428571 17.571430 c +1.428571 0.714285 l +1.428571 0.319798 1.108775 0.000000 0.714286 0.000000 c +0.714286 0.000000 l +0.319797 0.000000 0.000000 0.319796 0.000000 0.714285 c +0.000000 17.571430 l +h +f +n +Q +q +0.000000 1.000000 -1.000000 0.000000 8.285715 15.285715 cm +1.000000 1.000000 1.000000 scn +0.000000 0.714286 m +0.000000 1.108775 0.319797 1.428571 0.714286 1.428571 c +0.714286 1.428571 l +1.108775 1.428571 1.428571 1.108775 1.428571 0.714286 c +1.428571 -16.142859 l +1.428571 -16.537346 1.108775 -16.857143 0.714286 -16.857143 c +0.714286 -16.857143 l +0.319797 -16.857143 0.000000 -16.537348 0.000000 -16.142859 c +0.000000 0.714286 l +h +f +n +Q + +endstream +endobj + +3 0 obj + 2220 +endobj + +4 0 obj + << /Annots [] + /Type /Page + /MediaBox [ 0.000000 0.000000 32.000000 32.000000 ] + /Resources 1 0 R + /Contents 2 0 R + /Parent 5 0 R + >> +endobj + +5 0 obj + << /Kids [ 4 0 R ] + /Count 1 + /Type /Pages + >> +endobj + +6 0 obj + << /Pages 5 0 R + /Type /Catalog + >> +endobj + +xref +0 7 +0000000000 65535 f +0000000010 00000 n +0000000034 00000 n +0000002310 00000 n +0000002333 00000 n +0000002506 00000 n +0000002580 00000 n +trailer +<< /ID [ (some) (id) ] + /Root 6 0 R + /Size 7 +>> +startxref +2639 +%%EOF \ No newline at end of file diff --git a/submodules/TelegramUI/Sources/AppDelegate.swift b/submodules/TelegramUI/Sources/AppDelegate.swift index 1e166dcfbf..303e1bf107 100644 --- a/submodules/TelegramUI/Sources/AppDelegate.swift +++ b/submodules/TelegramUI/Sources/AppDelegate.swift @@ -680,9 +680,9 @@ private func extractAccountManagerState(records: AccountRecordsView `catch` { _ -> Signal<[LegacyAssetPickerEnqueueMessage], NoError> in + |> `catch` { _ -> Signal<[LegacyAssetPickerEnqueueMessage], ShareControllerError> in return .single([]) } - |> mapToSignal { messages -> Signal in + |> mapToSignal { messages -> Signal in let resultSignals = peerIds.map({ peerId in return enqueueMessages(account: account, peerId: peerId, messages: messages.map { $0.message }) - |> mapToSignal { _ -> Signal in + |> castError(ShareControllerError.self) + |> mapToSignal { _ -> Signal in return .complete() } }) return combineLatest(resultSignals) - |> mapToSignal { _ -> Signal in + |> mapToSignal { _ -> Signal in return .complete() } |> then(.single(ShareControllerExternalStatus.done)) diff --git a/submodules/TelegramUI/Sources/ShareExtensionContext.swift b/submodules/TelegramUI/Sources/ShareExtensionContext.swift index 13fb68e647..4b04feff0d 100644 --- a/submodules/TelegramUI/Sources/ShareExtensionContext.swift +++ b/submodules/TelegramUI/Sources/ShareExtensionContext.swift @@ -368,10 +368,15 @@ public class ShareRootControllerImpl { let rawSignals = TGItemProviderSignals.itemSignals(forInputItems: inputItems)! return preparedShareItems(account: account, to: peerIds[0], dataItems: rawSignals, additionalText: additionalText) |> map(Optional.init) - |> `catch` { _ -> Signal in - return .single(nil) + |> `catch` { error -> Signal in + switch error { + case .generic: + return .single(nil) + case let .fileTooBig(size): + return .fail(.fileTooBig(size)) + } } - |> mapToSignal { state -> Signal in + |> mapToSignal { state -> Signal in guard let state = state else { return .single(.done) } @@ -382,11 +387,14 @@ public class ShareRootControllerImpl { return .single(.progress(value)) case let .userInteractionRequired(value): return requestUserInteraction(value) - |> mapToSignal { contents -> Signal in + |> castError(ShareControllerError.self) + |> mapToSignal { contents -> Signal in return sentItems(peerIds, contents, account, silently) + |> castError(ShareControllerError.self) } case let .done(contents): return sentItems(peerIds, contents, account, silently) + |> castError(ShareControllerError.self) } } } else { diff --git a/submodules/WebUI/BUILD b/submodules/WebUI/BUILD index a3161a58c3..09c1980683 100644 --- a/submodules/WebUI/BUILD +++ b/submodules/WebUI/BUILD @@ -26,6 +26,7 @@ swift_library( "//submodules/UrlHandling:UrlHandling", "//submodules/MoreButtonNode:MoreButtonNode", "//submodules/BotPaymentsUI:BotPaymentsUI", + "//submodules/PromptUI:PromptUI", ], visibility = [ "//visibility:public", diff --git a/submodules/WebUI/Sources/WebAppController.swift b/submodules/WebUI/Sources/WebAppController.swift index fcaeb0c054..8f1ef8a75b 100644 --- a/submodules/WebUI/Sources/WebAppController.swift +++ b/submodules/WebUI/Sources/WebAppController.swift @@ -19,6 +19,7 @@ import LegacyComponents import UrlHandling import MoreButtonNode import BotPaymentsUI +import PromptUI private let durgerKingBotIds: [Int64] = [5104055776, 2200339955] @@ -462,6 +463,33 @@ public final class WebAppController: ViewController, AttachmentContainable { func webView(_ webView: WKWebView, requestMediaCapturePermissionFor origin: WKSecurityOrigin, initiatedByFrame frame: WKFrameInfo, type: WKMediaCaptureType, decisionHandler: @escaping (WKPermissionDecision) -> Void) { decisionHandler(.prompt) } + + func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { + let alertController = textAlertController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, title: nil, text: message, actions: [TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Common_OK, action: { + completionHandler() + })]) + self.controller?.present(alertController, in: .window(.root)) + } + + func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { + let alertController = textAlertController(context: self.context, updatedPresentationData: self.controller?.updatedPresentationData, title: nil, text: message, actions: [TextAlertAction(type: .genericAction, title: self.presentationData.strings.Common_Cancel, action: { + completionHandler(false) + }), TextAlertAction(type: .defaultAction, title: self.presentationData.strings.Common_OK, action: { + completionHandler(true) + })]) + self.controller?.present(alertController, in: .window(.root)) + } + + func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) { + let promptController = promptController(sharedContext: self.context.sharedContext, updatedPresentationData: self.controller?.updatedPresentationData, text: prompt, value: defaultText, apply: { value in + if let value = value { + completionHandler(value) + } else { + completionHandler(nil) + } + }) + self.controller?.present(promptController, in: .window(.root)) + } private var targetContentOffset: CGPoint? func scrollViewDidScroll(_ scrollView: UIScrollView) {