From 6427a7109d3b25bea8056ddf4de2996b35d61da7 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Fri, 1 Feb 2019 22:28:48 +0300 Subject: [PATCH] Proxy status in connection action sheet Cmd+# shortcuts to navigate between chats Changed day theme service messages background color to match current wallpaper when there is one --- TelegramUI/ChatListController.swift | 20 +- TelegramUI/ChatListNode.swift | 159 ++-- TelegramUI/ChatMessageActionButtonsNode.swift | 2 +- .../ChatMessageAnimatedStickerItemNode.swift | 2 +- TelegramUI/ChatMessageBubbleItemNode.swift | 2 +- TelegramUI/ChatMessageDateHeader.swift | 24 +- .../ChatMessageInstantVideoItemNode.swift | 2 +- TelegramUI/ChatMessageStickerItemNode.swift | 2 +- .../DefaultDarkAccentPresentationTheme.swift | 16 +- TelegramUI/DefaultDarkPresentationTheme.swift | 14 +- TelegramUI/DefaultPresentationTheme.swift | 61 +- TelegramUI/PresentationData.swift | 4 +- TelegramUI/PresentationStrings.swift | 794 +++++++++--------- TelegramUI/PresentationTheme.swift | 27 +- .../PresentationThemeEssentialGraphics.swift | 40 +- .../ProxyServerActionSheetController.swift | 72 +- .../Resources/PresentationStrings.mapping | Bin 99908 -> 99908 bytes TelegramUI/ThemeSettingsController.swift | 2 +- 18 files changed, 662 insertions(+), 581 deletions(-) diff --git a/TelegramUI/ChatListController.swift b/TelegramUI/ChatListController.swift index 0c60a2f53c..dc906c4621 100644 --- a/TelegramUI/ChatListController.swift +++ b/TelegramUI/ChatListController.swift @@ -956,7 +956,7 @@ public class ChatListController: TelegramController, KeyShortcutResponder, UIVie } } - return [ + let inputShortcuts: [KeyShortcut] = [ KeyShortcut(title: strings.KeyCommand_JumpToPreviousChat, input: UIKeyInputUpArrow, modifiers: [.alternate], action: { [weak self] in if let strongSelf = self { strongSelf.chatListDisplayNode.chatListNode.selectChat(.previous(unread: false)) @@ -985,6 +985,24 @@ public class ChatListController: TelegramController, KeyShortcutResponder, UIVie KeyShortcut(title: strings.KeyCommand_Find, input: "\t", modifiers: [], action: toggleSearch), KeyShortcut(input: UIKeyInputEscape, modifiers: [], action: toggleSearch) ] + + let openChat: (Int) -> Void = { [weak self] index in + if let strongSelf = self { + if index == 0 { + strongSelf.chatListDisplayNode.chatListNode.selectChat(.peerId(strongSelf.account.peerId)) + } else { + strongSelf.chatListDisplayNode.chatListNode.selectChat(.index(index - 1)) + } + } + } + + let chatShortcuts: [KeyShortcut] = (0 ... 9).map { index in + return KeyShortcut(input: "\(index)", modifiers: [.command], action: { + openChat(index) + }) + } + + return inputShortcuts + chatShortcuts } override public func toolbarActionSelected(left: Bool) { diff --git a/TelegramUI/ChatListNode.swift b/TelegramUI/ChatListNode.swift index 17eff743cd..66a876fc53 100644 --- a/TelegramUI/ChatListNode.swift +++ b/TelegramUI/ChatListNode.swift @@ -262,6 +262,8 @@ private final class ChatListOpaqueTransactionState { enum ChatListSelectionOption { case previous(unread: Bool) case next(unread: Bool) + case peerId(PeerId) + case index(Int) } enum ChatListGlobalScrollOption { @@ -632,8 +634,7 @@ final class ChatListNode: ListView { } if let location = location, location != strongSelf.currentLocation { - strongSelf.currentLocation = location - strongSelf.chatListLocation.set(location) + strongSelf.setChatListLocation(location) } strongSelf.enqueueHistoryPreloadUpdate() @@ -674,16 +675,13 @@ final class ChatListNode: ListView { self.chatListDisposable.set(appliedTransition.start()) let initialLocation: ChatListNodeLocation - switch mode { - case .chatList: - initialLocation = .initial(count: 50) - case .peers: - initialLocation = .initial(count: 200) + case .chatList: + initialLocation = .initial(count: 50) + case .peers: + initialLocation = .initial(count: 200) } - - self.currentLocation = initialLocation - self.chatListLocation.set(initialLocation) + self.setChatListLocation(initialLocation) let postbox = account.postbox let previousPeerCache = Atomic<[PeerId: Peer]>(value: [:]) @@ -1062,28 +1060,31 @@ final class ChatListNode: ListView { if view.laterIndex == nil { self.transaction(deleteIndices: [], insertIndicesAndItems: [], updateIndicesAndItems: [], options: [.Synchronous], scrollToItem: ListViewScrollToItem(index: 0, position: .top(0.0), animated: true, curve: .Default(duration: nil), directionHint: .Up), updateSizeAndInsets: nil, stationaryItemRange: nil, updateOpaqueState: nil, completion: { _ in }) } else { - let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound + let location: ChatListNodeLocation = .scroll(index: .absoluteUpperBound, sourceIndex: .absoluteLowerBound , scrollPosition: .top(0.0), animated: true) - self.currentLocation = location - self.chatListLocation.set(location) + self.setChatListLocation(location) } } else { - let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound + let location: ChatListNodeLocation = .scroll(index: .absoluteUpperBound, sourceIndex: .absoluteLowerBound , scrollPosition: .top(0.0), animated: true) - self.currentLocation = location - self.chatListLocation.set(location) + self.setChatListLocation(location) } } + private func setChatListLocation(_ location: ChatListNodeLocation) { + self.currentLocation = location + self.chatListLocation.set(location) + } + private func relativeUnreadChatListIndex(position: ChatListRelativePosition) -> Signal { return self.account.postbox.transaction { transaction -> ChatListIndex? in var filter = true if let inAppNotificationSettings = transaction.getPreferencesEntry(key: ApplicationSpecificPreferencesKeys.inAppNotificationSettings) as? InAppNotificationSettings { switch inAppNotificationSettings.totalUnreadCountDisplayStyle { - case .raw: - filter = false - case .filtered: - filter = true + case .raw: + filter = false + case .filtered: + filter = true } } return transaction.getRelativeUnreadChatListIndex(filtered: filter, position: position) @@ -1097,15 +1098,13 @@ final class ChatListNode: ListView { } if let index = index { - let location: ChatListNodeLocation = .scroll(index: index, sourceIndex: self?.currentlyVisibleLatestChatListIndex() ?? ChatListIndex.absoluteUpperBound + let location: ChatListNodeLocation = .scroll(index: index, sourceIndex: self?.currentlyVisibleLatestChatListIndex() ?? .absoluteUpperBound , scrollPosition: .center(.top), animated: true) - strongSelf.currentLocation = location - strongSelf.chatListLocation.set(location) + strongSelf.setChatListLocation(location) } else { - let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound + let location: ChatListNodeLocation = .scroll(index: .absoluteUpperBound, sourceIndex: .absoluteLowerBound , scrollPosition: .top(0.0), animated: true) - strongSelf.currentLocation = location - strongSelf.chatListLocation.set(location) + strongSelf.setChatListLocation(location) } }) } @@ -1123,14 +1122,14 @@ final class ChatListNode: ListView { return } - if interaction.highlightedChatLocation == nil { - let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound - , scrollPosition: .top(0.0), animated: true) - self.currentLocation = location - self.chatListLocation.set(location) - //interaction.highlightedChatLocation = ChatListHighlightedLocation(location: .peer(0), progress: 1.0) - return - } +// if interaction.highlightedChatLocation == nil { +// let location: ChatListNodeLocation = .scroll(index: ChatListIndex.absoluteUpperBound, sourceIndex: ChatListIndex.absoluteLowerBound +// , scrollPosition: .top(0.0), animated: true) +// self.currentLocation = location +// self.chatListLocation.set(location) +// //interaction.highlightedChatLocation = ChatListHighlightedLocation(location: .peer(0), progress: 1.0) +// return +// } let entryCount = chatListView.filteredEntries.count var current: (ChatListIndex, PeerId, Int)? = nil @@ -1153,53 +1152,67 @@ final class ChatListNode: ListView { } } - if let current = current { - switch option { - case .previous(unread: true), .next(unread: true): - let position: ChatListRelativePosition + switch option { + case .previous(unread: true), .next(unread: true): + let position: ChatListRelativePosition + if let current = current { if case .previous = option { position = .earlier(than: current.0) } else { position = .later(than: current.0) } - let _ = (relativeUnreadChatListIndex(position: position) |> deliverOnMainQueue).start(next: { [weak self] index in - guard let strongSelf = self, let index = index else { - return - } - - let location: ChatListNodeLocation = .scroll(index: index, sourceIndex: self?.currentlyVisibleLatestChatListIndex() ?? ChatListIndex.absoluteUpperBound, scrollPosition: .center(.top), animated: true) - strongSelf.currentLocation = location - strongSelf.chatListLocation.set(location) - strongSelf.peerSelected?(index.messageIndex.id.peerId, false, false) - }) - break - case .previous(unread: false), .next(unread: false): - if entryCount > 1 { - if current.2 > 0, case let .PeerEntry(index, _, _, _, _, _, peer, _, _, _, _, _, _) = chatListView.filteredEntries[current.2 - 1] { - next = (index, peer.peerId) - } - if current.2 <= entryCount - 2, case let .PeerEntry(index, _, _, _, _, _, peer, _, _, _, _, _, _) = chatListView.filteredEntries[current.2 + 1] { - previous = (index, peer.peerId) - } + } else { + position = .later(than: nil) + } + let _ = (relativeUnreadChatListIndex(position: position) |> deliverOnMainQueue).start(next: { [weak self] index in + guard let strongSelf = self, let index = index else { + return } - - var target: (ChatListIndex, PeerId)? = nil - switch option { - case .previous: - target = previous - case .next: - target = next + let location: ChatListNodeLocation = .scroll(index: index, sourceIndex: strongSelf.currentlyVisibleLatestChatListIndex() ?? .absoluteUpperBound, scrollPosition: .center(.top), animated: true) + strongSelf.setChatListLocation(location) + strongSelf.peerSelected?(index.messageIndex.id.peerId, false, false) + }) + case .previous(unread: false), .next(unread: false): + var target: (ChatListIndex, PeerId)? = nil + if let current = current, entryCount > 1 { + if current.2 > 0, case let .PeerEntry(index, _, _, _, _, _, peer, _, _, _, _, _, _) = chatListView.filteredEntries[current.2 - 1] { + next = (index, peer.peerId) } - - if let target = target { - let location: ChatListNodeLocation = .scroll(index: target.0, sourceIndex: ChatListIndex.absoluteLowerBound - , scrollPosition: .center(.top), animated: true) - self.currentLocation = location - self.chatListLocation.set(location) - self.peerSelected?(target.1, false, false) + if current.2 <= entryCount - 2, case let .PeerEntry(index, _, _, _, _, _, peer, _, _, _, _, _, _) = chatListView.filteredEntries[current.2 + 1] { + previous = (index, peer.peerId) } - break - } + if case .previous = option { + target = previous + } else { + target = next + } + } else if entryCount > 0 { + if case let .PeerEntry(index, _, _, _, _, _, peer, _, _, _, _, _, _) = chatListView.filteredEntries[entryCount - 1] { + target = (index, peer.peerId) + } + } + if let target = target { + let location: ChatListNodeLocation = .scroll(index: target.0, sourceIndex: .absoluteLowerBound, scrollPosition: .center(.top), animated: true) + self.setChatListLocation(location) + self.peerSelected?(target.1, false, false) + } + case let .peerId(peerId): + self.peerSelected?(peerId, false, false) + case let .index(index): + guard index < 10 else { + return + } + let _ = (chatListViewForLocation(groupId: nil, location: .initial(count: 10), account: self.account) + |> take(1) + |> deliverOnMainQueue).start(next: { update in + let entries = update.view.entries + if entries.count > index, case let .MessageEntry(index, _, _, _, _, renderedPeer, _) = entries[10 - index - 1] { + let location: ChatListNodeLocation = .scroll(index: index, sourceIndex: .absoluteLowerBound, scrollPosition: .center(.top), animated: true) + self.setChatListLocation(location) + self.peerSelected?(renderedPeer.peerId, false, false) + } + }) + break } } diff --git a/TelegramUI/ChatMessageActionButtonsNode.swift b/TelegramUI/ChatMessageActionButtonsNode.swift index b352244ec1..f316433c80 100644 --- a/TelegramUI/ChatMessageActionButtonsNode.swift +++ b/TelegramUI/ChatMessageActionButtonsNode.swift @@ -88,7 +88,7 @@ private final class ChatMessageActionButtonNode: ASDisplayNode { } } - let (titleSize, titleApply) = titleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: title, font: titleFont, textColor: incoming ? theme.theme.chat.bubble.actionButtonsIncomingTextColor : theme.theme.chat.bubble.actionButtonsOutgoingTextColor), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: max(44.0, constrainedWidth - minimumSideInset - minimumSideInset), height: CGFloat.greatestFiniteMagnitude), alignment: .center, cutout: nil, insets: UIEdgeInsets(top: 1.0, left: 0.0, bottom: 1.0, right: 0.0))) + let (titleSize, titleApply) = titleLayout(TextNodeLayoutArguments(attributedString: NSAttributedString(string: title, font: titleFont, textColor: incoming ? bubbleVariableColor(variableColor: theme.theme.chat.bubble.actionButtonsIncomingTextColor, wallpaper: theme.wallpaper) : bubbleVariableColor(variableColor: theme.theme.chat.bubble.actionButtonsOutgoingTextColor, wallpaper: theme.wallpaper)), backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: max(44.0, constrainedWidth - minimumSideInset - minimumSideInset), height: CGFloat.greatestFiniteMagnitude), alignment: .center, cutout: nil, insets: UIEdgeInsets(top: 1.0, left: 0.0, bottom: 1.0, right: 0.0))) let graphics = PresentationResourcesChat.additionalGraphics(theme.theme, wallpaper: theme.wallpaper) let backgroundImage: UIImage? diff --git a/TelegramUI/ChatMessageAnimatedStickerItemNode.swift b/TelegramUI/ChatMessageAnimatedStickerItemNode.swift index b6cf563994..3df5f92ca4 100644 --- a/TelegramUI/ChatMessageAnimatedStickerItemNode.swift +++ b/TelegramUI/ChatMessageAnimatedStickerItemNode.swift @@ -495,7 +495,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if translation.x < -45.0, self.swipeToReplyNode == nil, let item = self.item { self.swipeToReplyFeedback?.impact() - let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, foregroundColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor) + let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, wallpaper: item.presentationData.theme.wallpaper), foregroundColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor, wallpaper: item.presentationData.theme.wallpaper)) self.swipeToReplyNode = swipeToReplyNode self.addSubnode(swipeToReplyNode) animateReplyNodeIn = true diff --git a/TelegramUI/ChatMessageBubbleItemNode.swift b/TelegramUI/ChatMessageBubbleItemNode.swift index db0569cf31..8329f56adf 100644 --- a/TelegramUI/ChatMessageBubbleItemNode.swift +++ b/TelegramUI/ChatMessageBubbleItemNode.swift @@ -2002,7 +2002,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView { if translation.x < -45.0, self.swipeToReplyNode == nil, let item = self.item { self.swipeToReplyFeedback?.impact() - let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, foregroundColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor) + let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, wallpaper: item.presentationData.theme.wallpaper), foregroundColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor, wallpaper: item.presentationData.theme.wallpaper)) self.swipeToReplyNode = swipeToReplyNode self.addSubnode(swipeToReplyNode) animateReplyNodeIn = true diff --git a/TelegramUI/ChatMessageDateHeader.swift b/TelegramUI/ChatMessageDateHeader.swift index ac7d8f676d..a7d1ec11cb 100644 --- a/TelegramUI/ChatMessageDateHeader.swift +++ b/TelegramUI/ChatMessageDateHeader.swift @@ -106,9 +106,6 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { self.stickBackgroundNode.displayWithoutProcessing = true self.stickBackgroundNode.displaysAsynchronously = false - //self.testNode.backgroundColor = .black - //self.testNode.isLayerBacked = true - super.init(layerBacked: false, dynamicBounce: true, isRotated: true, seeThrough: false) self.transform = CATransform3DMakeRotation(CGFloat.pi, 0.0, 0.0, 1.0) @@ -122,8 +119,6 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { self.addSubnode(self.backgroundNode) self.addSubnode(self.labelNode) - //self.addSubnode(self.testNode) - let nowTimestamp = Int32(CFAbsoluteTimeGetCurrent() + NSTimeIntervalSince1970) var t: time_t = time_t(localTimestamp) @@ -145,21 +140,12 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { text = presentationData.strings.Date_ChatDateHeaderYear(monthAtIndex(Int(timeinfo.tm_mon), strings: presentationData.strings), "\(timeinfo.tm_mday)", "\(1900 + timeinfo.tm_year)").0 } - let attributedString = NSAttributedString(string: text, font: titleFont, textColor: presentationData.theme.theme.chat.serviceMessage.dateTextColor) + let attributedString = NSAttributedString(string: text, font: titleFont, textColor: bubbleVariableColor(variableColor: presentationData.theme.theme.chat.serviceMessage.dateTextColor, wallpaper: presentationData.theme.wallpaper)) let labelLayout = TextNode.asyncLayout(self.labelNode) let (size, apply) = labelLayout(TextNodeLayoutArguments(attributedString: attributedString, backgroundColor: nil, maximumNumberOfLines: 1, truncationType: .end, constrainedSize: CGSize(width: 320.0, height: CGFloat.greatestFiniteMagnitude), alignment: .natural, cutout: nil, insets: UIEdgeInsets())) let _ = apply() self.labelNode.frame = CGRect(origin: CGPoint(), size: size.size) - - /*(self.layer as! CASeeThroughTracingLayer).updateRelativePosition = { [weak self] position in - if let strongSelf = self { - strongSelf.testNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 70.0 + position.y), size: CGSize(width: 40.0, height: 20.0)) - print("position \(position.x), \(position.y)") - } - }*/ - - } override func didLoad() { @@ -178,8 +164,6 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { } override func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) { - //let labelLayout = TextNode.asyncLayout(self.labelNode) - let chatDateSize: CGFloat = 20.0 let chatDateInset: CGFloat = 6.0 @@ -232,8 +216,6 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { } } - - override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { if !self.bounds.contains(point) { return nil @@ -247,15 +229,13 @@ final class ChatMessageDateHeaderNode: ListViewItemHeaderNode { return nil } - - override func touchesCancelled(_ touches: Set?, with event: UIEvent?) { super.touchesCancelled(touches, with: event) } @objc func tapGesture(_ recognizer: ListViewTapGestureRecognizer) { if case .ended = recognizer.state { - action?(self.localTimestamp) + self.action?(self.localTimestamp) } } } diff --git a/TelegramUI/ChatMessageInstantVideoItemNode.swift b/TelegramUI/ChatMessageInstantVideoItemNode.swift index 47a9b7537c..324790ef63 100644 --- a/TelegramUI/ChatMessageInstantVideoItemNode.swift +++ b/TelegramUI/ChatMessageInstantVideoItemNode.swift @@ -559,7 +559,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView { if translation.x < -45.0, self.swipeToReplyNode == nil, let item = self.item { self.swipeToReplyFeedback?.impact() - let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, foregroundColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor) + let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, wallpaper: item.presentationData.theme.wallpaper), foregroundColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor, wallpaper: item.presentationData.theme.wallpaper)) self.swipeToReplyNode = swipeToReplyNode self.addSubnode(swipeToReplyNode) animateReplyNodeIn = true diff --git a/TelegramUI/ChatMessageStickerItemNode.swift b/TelegramUI/ChatMessageStickerItemNode.swift index 41a359c175..878fd9b717 100644 --- a/TelegramUI/ChatMessageStickerItemNode.swift +++ b/TelegramUI/ChatMessageStickerItemNode.swift @@ -600,7 +600,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { if translation.x < -45.0, self.swipeToReplyNode == nil, let item = self.item { self.swipeToReplyFeedback?.impact() - let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, foregroundColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor) + let swipeToReplyNode = ChatMessageSwipeToReplyNode(fillColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonFillColor, wallpaper: item.presentationData.theme.wallpaper), strokeColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonStrokeColor, wallpaper: item.presentationData.theme.wallpaper), foregroundColor: bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.bubble.shareButtonForegroundColor, wallpaper: item.presentationData.theme.wallpaper)) self.swipeToReplyNode = swipeToReplyNode self.addSubnode(swipeToReplyNode) animateReplyNodeIn = true diff --git a/TelegramUI/DefaultDarkAccentPresentationTheme.swift b/TelegramUI/DefaultDarkAccentPresentationTheme.swift index 282ebc067c..3e752f99d4 100644 --- a/TelegramUI/DefaultDarkAccentPresentationTheme.swift +++ b/TelegramUI/DefaultDarkAccentPresentationTheme.swift @@ -172,17 +172,17 @@ private let bubble = PresentationThemeChatBubble( outgoingFileDescriptionColor: UIColor(rgb: 0xDBF5FF, alpha: 0.5), incomingFileDurationColor: UIColor(rgb: 0xDBF5FF, alpha: 0.5), outgoingFileDurationColor: UIColor(rgb: 0xDBF5FF, alpha: 0.5), - shareButtonFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5)), - shareButtonStrokeColor: UIColor(rgb: 0x587fa3, alpha: 0.15), - shareButtonForegroundColor: UIColor(rgb: 0xb2b2b2), + shareButtonFillColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x18222d, alpha: 0.5)), + shareButtonStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), + shareButtonForegroundColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2)), mediaOverlayControlBackgroundColor: UIColor(white: 0.0, alpha: 0.6), //!!! mediaOverlayControlForegroundColor: UIColor(white: 1.0, alpha: 1.0), //!!! actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5)), - actionButtonsIncomingStrokeColor: UIColor(rgb: 0x587fa3, alpha: 0.15), - actionButtonsIncomingTextColor: UIColor(rgb: 0xffffff), + actionButtonsIncomingStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), + actionButtonsIncomingTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x18222D, alpha: 0.5)), - actionButtonsOutgoingStrokeColor: UIColor(rgb: 0x587fa3, alpha: 0.15), - actionButtonsOutgoingTextColor: UIColor(rgb: 0xffffff), + actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0x587fa3, alpha: 0.15)), + actionButtonsOutgoingTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), selectionControlBorderColor: .white, selectionControlFillColor: accentColor, selectionControlForegroundColor: .white, @@ -200,7 +200,7 @@ private let serviceMessage = PresentationThemeServiceMessage( unreadBarFillColor: UIColor(rgb: 0x213040), unreadBarStrokeColor: UIColor(rgb: 0x213040), unreadBarTextColor: UIColor(rgb: 0xffffff), - dateTextColor: UIColor(rgb: 0xffffff) + dateTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)) ) private let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( diff --git a/TelegramUI/DefaultDarkPresentationTheme.swift b/TelegramUI/DefaultDarkPresentationTheme.swift index 4a06a0d340..6cc2c0d2c0 100644 --- a/TelegramUI/DefaultDarkPresentationTheme.swift +++ b/TelegramUI/DefaultDarkPresentationTheme.swift @@ -173,16 +173,16 @@ private let bubble = PresentationThemeChatBubble( incomingFileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), outgoingFileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.5), shareButtonFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), - shareButtonStrokeColor: UIColor(rgb: 0xb2b2b2, alpha: 0.18), - shareButtonForegroundColor: UIColor(rgb: 0xb2b2b2), //!!! + shareButtonStrokeColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xb2b2b2, alpha: 0.18), withoutWallpaper: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), + shareButtonForegroundColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xb2b2b2), withoutWallpaper: UIColor(rgb: 0xb2b2b2)), //!!! mediaOverlayControlBackgroundColor: UIColor(white: 0.0, alpha: 0.6), //!!! mediaOverlayControlForegroundColor: UIColor(white: 1.0, alpha: 1.0), //!!! actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), - actionButtonsIncomingStrokeColor: UIColor(rgb: 0xb2b2b2, alpha: 0.18), - actionButtonsIncomingTextColor: UIColor(rgb: 0xffffff), + actionButtonsIncomingStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), + actionButtonsIncomingTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0x000000, alpha: 0.5), withoutWallpaper: UIColor(rgb: 0x000000, alpha: 0.5)), - actionButtonsOutgoingStrokeColor: UIColor(rgb: 0xb2b2b2, alpha: 0.18), - actionButtonsOutgoingTextColor: UIColor(rgb: 0xffffff), + actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2, alpha: 0.18)), + actionButtonsOutgoingTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xffffff)), selectionControlBorderColor: .white, selectionControlFillColor: accentColor, selectionControlForegroundColor: .black, @@ -200,7 +200,7 @@ private let serviceMessage = PresentationThemeServiceMessage( unreadBarFillColor: UIColor(rgb: 0x1b1b1b), //!!! unreadBarStrokeColor: UIColor(rgb: 0x000000), unreadBarTextColor: UIColor(rgb: 0xb2b2b2), //!!! - dateTextColor: UIColor(rgb: 0xb2b2b2) + dateTextColor: PresentationThemeVariableColor(color: UIColor(rgb: 0xb2b2b2)) ) private let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( diff --git a/TelegramUI/DefaultPresentationTheme.swift b/TelegramUI/DefaultPresentationTheme.swift index c9375b9a4b..d78b82b229 100644 --- a/TelegramUI/DefaultPresentationTheme.swift +++ b/TelegramUI/DefaultPresentationTheme.swift @@ -187,12 +187,12 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun incomingAccentTextColor: UIColor(rgb: 0x007ee5), outgoingAccentTextColor: UIColor(rgb: 0x00a700), incomingAccentControlColor: UIColor(rgb: 0x007ee5), - outgoingAccentControlColor: UIColor(rgb: 0x3FC33B), + outgoingAccentControlColor: UIColor(rgb: 0x3fc33b), incomingMediaActiveControlColor: UIColor(rgb: 0x007ee5), - outgoingMediaActiveControlColor: UIColor(rgb: 0x3FC33B), + outgoingMediaActiveControlColor: UIColor(rgb: 0x3fc33b), incomingMediaInactiveControlColor: UIColor(rgb: 0xcacaca), - outgoingMediaInactiveControlColor: UIColor(rgb: 0x93D987), - outgoingCheckColor: UIColor(rgb: 0x19C700), + outgoingMediaInactiveControlColor: UIColor(rgb: 0x93d987), + outgoingCheckColor: UIColor(rgb: 0x19c700), incomingPendingActivityColor: UIColor(rgb: 0x525252, alpha: 0.6), outgoingPendingActivityColor: UIColor(rgb: 0x42b649), mediaDateAndStatusFillColor: UIColor(white: 0.0, alpha: 0.5), @@ -204,17 +204,17 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun incomingFileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), outgoingFileDurationColor: UIColor(rgb: 0x008c09, alpha: 0.8), shareButtonFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x748391, alpha: 0.45)), - shareButtonStrokeColor: .clear, - shareButtonForegroundColor: .white, + shareButtonStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: .clear), + shareButtonForegroundColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: .white), mediaOverlayControlBackgroundColor: UIColor(white: 0.0, alpha: 0.6), mediaOverlayControlForegroundColor: UIColor(white: 1.0, alpha: 1.0), - actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596E89, alpha: 0.35)), - actionButtonsIncomingStrokeColor: .clear, - actionButtonsIncomingTextColor: .white, - actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596E89, alpha: 0.35)), - actionButtonsOutgoingStrokeColor: .clear, - actionButtonsOutgoingTextColor: .white, - selectionControlBorderColor: UIColor(rgb: 0xC7C7CC), + actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), + actionButtonsIncomingStrokeColor: PresentationThemeVariableColor(color: .clear), + actionButtonsIncomingTextColor: PresentationThemeVariableColor(color: .white), + actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0x596e89, alpha: 0.35)), + actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor(color: .clear), + actionButtonsOutgoingTextColor: PresentationThemeVariableColor(color: .white), + selectionControlBorderColor: UIColor(rgb: 0xc7c7cc), selectionControlFillColor: accentColor, selectionControlForegroundColor: .white, mediaHighlightOverlayColor: UIColor(white: 1.0, alpha: 0.6), @@ -223,7 +223,7 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun incomingMediaPlaceholderColor: UIColor(rgb: 0xe8ecf0), outgoingMediaPlaceholderColor: UIColor(rgb: 0xd2f2b6), incomingPolls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0xc8c7cc), radioProgress: UIColor(rgb: 0x007ee5), highlight: UIColor(rgb: 0x007ee5).withAlphaComponent(0.08), separator: UIColor(rgb: 0xc8c7cc), bar: UIColor(rgb: 0x007ee5)), - outgoingPolls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3FC33B), highlight: UIColor(rgb: 0x3FC33B).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x3fc33b)) + outgoingPolls: PresentationThemeChatBubblePolls(radioButton: UIColor(rgb: 0x93d987), radioProgress: UIColor(rgb: 0x3fc33b), highlight: UIColor(rgb: 0x3fc33b).withAlphaComponent(0.08), separator: UIColor(rgb: 0x93d987), bar: UIColor(rgb: 0x3fc33b)) ) let bubbleDay = PresentationThemeChatBubble( @@ -259,18 +259,18 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun outgoingFileDescriptionColor: UIColor(rgb: 0xffffff, alpha: 0.7), incomingFileDurationColor: UIColor(rgb: 0x525252, alpha: 0.6), outgoingFileDurationColor: UIColor(rgb: 0xffffff, alpha: 0.7), - shareButtonFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8), withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), - shareButtonStrokeColor: UIColor(rgb: 0xE5E5EA), - shareButtonForegroundColor: accentColor, + shareButtonFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), + shareButtonStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: UIColor(rgb: 0xe5e5ea)), + shareButtonForegroundColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor), mediaOverlayControlBackgroundColor: UIColor(rgb: 0x000000, alpha: 0.6), mediaOverlayControlForegroundColor: UIColor(rgb: 0xffffff, alpha: 1.0), - actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8), withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), - actionButtonsIncomingStrokeColor: accentColor.withMultipliedBrightnessBy(1.2), - actionButtonsIncomingTextColor: accentColor.withMultipliedBrightnessBy(1.2), - actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8), withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), - actionButtonsOutgoingStrokeColor: accentColor.withMultipliedBrightnessBy(1.2), - actionButtonsOutgoingTextColor: accentColor.withMultipliedBrightnessBy(1.2), - selectionControlBorderColor: UIColor(rgb: 0xC7C7CC), + actionButtonsIncomingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), + actionButtonsIncomingStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor.withMultipliedBrightnessBy(1.2)), + actionButtonsIncomingTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor.withMultipliedBrightnessBy(1.2)), + actionButtonsOutgoingFillColor: PresentationThemeVariableColor(withWallpaper: serviceBackgroundColor, withoutWallpaper: UIColor(rgb: 0xffffff, alpha: 0.8)), + actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor(withWallpaper: .clear, withoutWallpaper: accentColor.withMultipliedBrightnessBy(1.2)), + actionButtonsOutgoingTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: accentColor.withMultipliedBrightnessBy(1.2)), + selectionControlBorderColor: UIColor(rgb: 0xc7c7cc), selectionControlFillColor: accentColor, selectionControlForegroundColor: .white, mediaHighlightOverlayColor: UIColor(rgb: 0xffffff, alpha: 0.6), @@ -287,15 +287,15 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun unreadBarFillColor: UIColor(white: 1.0, alpha: 0.9), unreadBarStrokeColor: UIColor(white: 0.0, alpha: 0.2), unreadBarTextColor: UIColor(rgb: 0x86868d), - dateTextColor: .white + dateTextColor: PresentationThemeVariableColor(color: .white) ) let serviceMessageDay = PresentationThemeServiceMessage( - components: PresentationThemeServiceMessageColor(withDefaultWallpaper: PresentationThemeServiceMessageColorComponents(fill: UIColor(rgb: 0xffffff, alpha: 0.8), primaryText: UIColor(rgb: 0x8D8E93), linkHighlight: UIColor(rgb: 0x748391, alpha: 0.25), dateFillStatic: UIColor(rgb: 0xffffff, alpha: 0.8), dateFillFloating: UIColor(rgb: 0xffffff, alpha: 0.8)), withCustomWallpaper: PresentationThemeServiceMessageColorComponents(fill: UIColor(rgb: 0xffffff, alpha: 0.8), primaryText: UIColor(rgb: 0x8D8E93), linkHighlight: UIColor(rgb: 0x748391, alpha: 0.25), dateFillStatic: UIColor(rgb: 0xffffff, alpha: 0.8), dateFillFloating: UIColor(rgb: 0xffffff, alpha: 0.8))), + components: PresentationThemeServiceMessageColor(withDefaultWallpaper: PresentationThemeServiceMessageColorComponents(fill: UIColor(rgb: 0xffffff, alpha: 0.8), primaryText: UIColor(rgb: 0x8d8e93), linkHighlight: UIColor(rgb: 0x748391, alpha: 0.25), dateFillStatic: UIColor(rgb: 0xffffff, alpha: 0.8), dateFillFloating: UIColor(rgb: 0xffffff, alpha: 0.8)), withCustomWallpaper: PresentationThemeServiceMessageColorComponents(fill: serviceBackgroundColor, primaryText: .white, linkHighlight: UIColor(rgb: 0x748391, alpha: 0.25), dateFillStatic: serviceBackgroundColor, dateFillFloating: serviceBackgroundColor.withAlphaComponent(serviceBackgroundColor.alpha * 0.6667))), unreadBarFillColor: UIColor(rgb: 0xffffff), unreadBarStrokeColor: UIColor(rgb: 0xffffff), unreadBarTextColor: UIColor(rgb: 0x8D8E93), - dateTextColor: UIColor(rgb: 0x8D8E93) + dateTextColor: PresentationThemeVariableColor(withWallpaper: .white, withoutWallpaper: UIColor(rgb: 0x8d8e93)) ) let inputPanelMediaRecordingControl = PresentationThemeChatInputPanelMediaRecordingControl( @@ -427,20 +427,21 @@ private func makeDefaultPresentationTheme(accentColor: UIColor, serviceBackgroun ) } -public let defaultPresentationTheme = makeDefaultPresentationTheme(accentColor: UIColor(rgb: 0x007ee5), serviceBackgroundColor: UIColor(rgb: 0x000000, alpha: 0.3), day: false) +public let defaultPresentationTheme = makeDefaultPresentationTheme(accentColor: UIColor(rgb: 0x007ee5), serviceBackgroundColor: defaultServiceBackgroundColor, day: false) let defaultDayAccentColor: Int32 = 0x007ee5 +let defaultServiceBackgroundColor: UIColor = UIColor(rgb: 0x000000, alpha: 0.3) func makeDefaultPresentationTheme(serviceBackgroundColor: UIColor?) -> PresentationTheme { return makeDefaultPresentationTheme(accentColor: UIColor(rgb: 0x007ee5), serviceBackgroundColor: serviceBackgroundColor ?? .black, day: false) } -func makeDefaultDayPresentationTheme(accentColor: Int32?) -> PresentationTheme { +func makeDefaultDayPresentationTheme(accentColor: Int32?, serviceBackgroundColor: UIColor) -> PresentationTheme { let color: UIColor if let accentColor = accentColor { color = UIColor(rgb: UInt32(bitPattern: accentColor)) } else { color = UIColor(rgb: UInt32(bitPattern: defaultDayAccentColor)) } - return makeDefaultPresentationTheme(accentColor: color, serviceBackgroundColor: UIColor(rgb: 0x000000, alpha: 0.3), day: true) + return makeDefaultPresentationTheme(accentColor: color, serviceBackgroundColor: serviceBackgroundColor, day: true) } diff --git a/TelegramUI/PresentationData.swift b/TelegramUI/PresentationData.swift index 290c40d5ea..b3fe6e8fda 100644 --- a/TelegramUI/PresentationData.swift +++ b/TelegramUI/PresentationData.swift @@ -273,7 +273,7 @@ public func currentPresentationDataAndSettings(postbox: Postbox) -> Signal (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2004]!, self._r[2004]!, [_1, _2, _3]) + return formatWithArgumentRanges(self._s[2005]!, self._r[2005]!, [_1, _2, _3]) } - public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2005]! } - public var AutoNightTheme_Automatic: String { return self._s[2006]! } - public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2007]! } - public var Privacy_ContactsSyncHelp: String { return self._s[2008]! } - public var Cache_Help: String { return self._s[2009]! } - public var Passport_Language_fa: String { return self._s[2010]! } - public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2011]! } - public var PrivacySettings_LastSeen: String { return self._s[2012]! } + public var InfoPlist_NSLocationAlwaysUsageDescription: String { return self._s[2006]! } + public var AutoNightTheme_Automatic: String { return self._s[2007]! } + public var Channel_Username_InvalidStartsWithNumber: String { return self._s[2008]! } + public var Privacy_ContactsSyncHelp: String { return self._s[2009]! } + public var Cache_Help: String { return self._s[2010]! } + public var Passport_Language_fa: String { return self._s[2011]! } + public var Login_ResetAccountProtected_TimerTitle: String { return self._s[2012]! } + public var PrivacySettings_LastSeen: String { return self._s[2013]! } public func DialogList_MultipleTyping(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2013]!, self._r[2013]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2014]!, self._r[2014]!, [_0, _1]) } - public var Preview_SaveGif: String { return self._s[2017]! } - public var Profile_About: String { return self._s[2018]! } - public var Channel_About_Placeholder: String { return self._s[2019]! } - public var Login_InfoTitle: String { return self._s[2020]! } + public var Preview_SaveGif: String { return self._s[2018]! } + public var Profile_About: String { return self._s[2019]! } + public var Channel_About_Placeholder: String { return self._s[2020]! } + public var Login_InfoTitle: String { return self._s[2021]! } public func TwoStepAuth_SetupPendingEmail(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2021]!, self._r[2021]!, [_0]) + return formatWithArgumentRanges(self._s[2022]!, self._r[2022]!, [_0]) } - public var Watch_Suggestion_CantTalk: String { return self._s[2023]! } - public var ContactInfo_Title: String { return self._s[2024]! } - public var Media_ShareThisVideo: String { return self._s[2025]! } - public var Weekday_ShortFriday: String { return self._s[2026]! } - public var AccessDenied_Contacts: String { return self._s[2027]! } - public var Notification_CallIncomingShort: String { return self._s[2028]! } - public var Group_Setup_TypePublic: String { return self._s[2029]! } - public var Notifications_MessageNotificationsExceptions: String { return self._s[2030]! } - public var Notifications_Badge_IncludeChannels: String { return self._s[2031]! } - public var Notifications_MessageNotificationsPreview: String { return self._s[2034]! } - public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2035]! } - public var Group_ErrorAddTooMuchBots: String { return self._s[2036]! } - public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2037]! } - public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2038]! } - public var DialogList_Typing: String { return self._s[2039]! } - public var CallFeedback_IncludeLogs: String { return self._s[2041]! } - public var Checkout_Phone: String { return self._s[2043]! } - public var Login_InfoFirstNamePlaceholder: String { return self._s[2046]! } - public var Privacy_Calls_Integration: String { return self._s[2047]! } - public var Notifications_PermissionsAllow: String { return self._s[2048]! } - public var TwoStepAuth_AddHintDescription: String { return self._s[2052]! } - public var Settings_ChatSettings: String { return self._s[2053]! } + public var Watch_Suggestion_CantTalk: String { return self._s[2024]! } + public var ContactInfo_Title: String { return self._s[2025]! } + public var Media_ShareThisVideo: String { return self._s[2026]! } + public var Weekday_ShortFriday: String { return self._s[2027]! } + public var AccessDenied_Contacts: String { return self._s[2028]! } + public var Notification_CallIncomingShort: String { return self._s[2029]! } + public var Group_Setup_TypePublic: String { return self._s[2030]! } + public var Notifications_MessageNotificationsExceptions: String { return self._s[2031]! } + public var Notifications_Badge_IncludeChannels: String { return self._s[2032]! } + public var Notifications_MessageNotificationsPreview: String { return self._s[2035]! } + public var ConversationProfile_ErrorCreatingConversation: String { return self._s[2036]! } + public var Group_ErrorAddTooMuchBots: String { return self._s[2037]! } + public var Privacy_GroupsAndChannels_CustomShareHelp: String { return self._s[2038]! } + public var Permissions_CellularDataAllowInSettings_v0: String { return self._s[2039]! } + public var DialogList_Typing: String { return self._s[2040]! } + public var CallFeedback_IncludeLogs: String { return self._s[2042]! } + public var Checkout_Phone: String { return self._s[2044]! } + public var Login_InfoFirstNamePlaceholder: String { return self._s[2047]! } + public var Privacy_Calls_Integration: String { return self._s[2048]! } + public var Notifications_PermissionsAllow: String { return self._s[2049]! } + public var TwoStepAuth_AddHintDescription: String { return self._s[2053]! } + public var Settings_ChatSettings: String { return self._s[2054]! } public func Channel_AdminLog_MessageInvitedNameUsername(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2054]!, self._r[2054]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2055]!, self._r[2055]!, [_1, _2]) } - public var GroupRemoved_DeleteUser: String { return self._s[2056]! } + public var GroupRemoved_DeleteUser: String { return self._s[2057]! } public func Channel_AdminLog_PollStopped(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2057]!, self._r[2057]!, [_0]) + return formatWithArgumentRanges(self._s[2058]!, self._r[2058]!, [_0]) } public func PUSH_MESSAGE_PHOTO(_ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2058]!, self._r[2058]!, [_1]) + return formatWithArgumentRanges(self._s[2059]!, self._r[2059]!, [_1]) } - public var Login_ContinueWithLocalization: String { return self._s[2059]! } - public var Watch_Message_ForwardedFrom: String { return self._s[2060]! } - public var TwoStepAuth_EnterEmailCode: String { return self._s[2062]! } - public var Conversation_Unblock: String { return self._s[2063]! } - public var PrivacySettings_DataSettings: String { return self._s[2064]! } - public var Notifications_InAppNotificationsVibrate: String { return self._s[2065]! } + public var Login_ContinueWithLocalization: String { return self._s[2060]! } + public var Watch_Message_ForwardedFrom: String { return self._s[2061]! } + public var TwoStepAuth_EnterEmailCode: String { return self._s[2063]! } + public var Conversation_Unblock: String { return self._s[2064]! } + public var PrivacySettings_DataSettings: String { return self._s[2065]! } + public var Notifications_InAppNotificationsVibrate: String { return self._s[2066]! } public func Privacy_GroupsAndChannels_InviteToChannelError(_ _0: String, _ _1: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2066]!, self._r[2066]!, [_0, _1]) + return formatWithArgumentRanges(self._s[2067]!, self._r[2067]!, [_0, _1]) } - public var PrivacySettings_Passcode: String { return self._s[2069]! } - public var Passport_Language_dz: String { return self._s[2070]! } - public var Passport_Language_tk: String { return self._s[2071]! } + public var PrivacySettings_Passcode: String { return self._s[2070]! } + public var Passport_Language_dz: String { return self._s[2071]! } + public var Passport_Language_tk: String { return self._s[2072]! } public func Login_EmailCodeSubject(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2072]!, self._r[2072]!, [_0]) + return formatWithArgumentRanges(self._s[2073]!, self._r[2073]!, [_0]) } - public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2073]! } - public var Conversation_ContextMenuReply: String { return self._s[2074]! } - public var WallpaperSearch_ColorBrown: String { return self._s[2075]! } - public var Tour_Title1: String { return self._s[2076]! } - public var Conversation_ClearGroupHistory: String { return self._s[2078]! } - public var WallpaperPreview_Motion: String { return self._s[2079]! } + public var InfoPlist_NSPhotoLibraryUsageDescription: String { return self._s[2074]! } + public var Conversation_ContextMenuReply: String { return self._s[2075]! } + public var WallpaperSearch_ColorBrown: String { return self._s[2076]! } + public var Tour_Title1: String { return self._s[2077]! } + public var Conversation_ClearGroupHistory: String { return self._s[2079]! } + public var WallpaperPreview_Motion: String { return self._s[2080]! } public func Checkout_PasswordEntry_Text(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2080]!, self._r[2080]!, [_0]) + return formatWithArgumentRanges(self._s[2081]!, self._r[2081]!, [_0]) } - public var Call_RateCall: String { return self._s[2081]! } - public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2082]! } - public var Passport_PasswordCompleteSetup: String { return self._s[2083]! } - public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2084]! } - public var UserInfo_LastNamePlaceholder: String { return self._s[2086]! } + public var Call_RateCall: String { return self._s[2082]! } + public var Channel_AdminLog_BanSendStickersAndGifs: String { return self._s[2083]! } + public var Passport_PasswordCompleteSetup: String { return self._s[2084]! } + public var Conversation_InputTextSilentBroadcastPlaceholder: String { return self._s[2085]! } + public var UserInfo_LastNamePlaceholder: String { return self._s[2087]! } public func Login_WillCallYou(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2088]!, self._r[2088]!, [_0]) + return formatWithArgumentRanges(self._s[2089]!, self._r[2089]!, [_0]) } - public var Compose_Create: String { return self._s[2089]! } - public var Contacts_InviteToTelegram: String { return self._s[2090]! } - public var GroupInfo_Notifications: String { return self._s[2091]! } - public var Message_PinnedLiveLocationMessage: String { return self._s[2093]! } - public var Month_GenApril: String { return self._s[2094]! } - public var Appearance_AutoNightTheme: String { return self._s[2095]! } - public var ChatSettings_AutomaticAudioDownload: String { return self._s[2097]! } - public var Login_CodeSentSms: String { return self._s[2099]! } + public var Compose_Create: String { return self._s[2090]! } + public var Contacts_InviteToTelegram: String { return self._s[2091]! } + public var GroupInfo_Notifications: String { return self._s[2092]! } + public var Message_PinnedLiveLocationMessage: String { return self._s[2094]! } + public var Month_GenApril: String { return self._s[2095]! } + public var Appearance_AutoNightTheme: String { return self._s[2096]! } + public var ChatSettings_AutomaticAudioDownload: String { return self._s[2098]! } + public var Login_CodeSentSms: String { return self._s[2100]! } public func UserInfo_UnblockConfirmation(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2100]!, self._r[2100]!, [_0]) + return formatWithArgumentRanges(self._s[2101]!, self._r[2101]!, [_0]) } - public var EmptyGroupInfo_Line3: String { return self._s[2101]! } - public var Passport_Language_hr: String { return self._s[2102]! } + public var EmptyGroupInfo_Line3: String { return self._s[2102]! } + public var Passport_Language_hr: String { return self._s[2103]! } public func Channel_AdminLog_MessageRestrictedNewSetting(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2103]!, self._r[2103]!, [_0]) + return formatWithArgumentRanges(self._s[2104]!, self._r[2104]!, [_0]) } - public var GroupInfo_InviteLink_CopyLink: String { return self._s[2104]! } - public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2105]! } - public var Privacy_SecretChatsTitle: String { return self._s[2106]! } - public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2108]! } - public var GroupInfo_AddUserLeftError: String { return self._s[2109]! } - public var Preview_DeleteGif: String { return self._s[2110]! } - public var GroupInfo_Permissions_Exceptions: String { return self._s[2111]! } - public var Group_ErrorNotMutualContact: String { return self._s[2112]! } - public var Notification_MessageLifetime5s: String { return self._s[2113]! } + public var GroupInfo_InviteLink_CopyLink: String { return self._s[2105]! } + public var Conversation_InputTextBroadcastPlaceholder: String { return self._s[2106]! } + public var Privacy_SecretChatsTitle: String { return self._s[2107]! } + public var Notification_SecretChatMessageScreenshotSelf: String { return self._s[2109]! } + public var GroupInfo_AddUserLeftError: String { return self._s[2110]! } + public var Preview_DeleteGif: String { return self._s[2111]! } + public var GroupInfo_Permissions_Exceptions: String { return self._s[2112]! } + public var Group_ErrorNotMutualContact: String { return self._s[2113]! } + public var Notification_MessageLifetime5s: String { return self._s[2114]! } public func Watch_LastSeen_AtDate(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2114]!, self._r[2114]!, [_0]) + return formatWithArgumentRanges(self._s[2115]!, self._r[2115]!, [_0]) } - public var Passport_Address_AddBankStatement: String { return self._s[2116]! } - public var Notification_CallIncoming: String { return self._s[2117]! } - public var Compose_NewGroupTitle: String { return self._s[2118]! } - public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2120]! } - public var Passport_Address_Postcode: String { return self._s[2122]! } + public var Passport_Address_AddBankStatement: String { return self._s[2117]! } + public var Notification_CallIncoming: String { return self._s[2118]! } + public var Compose_NewGroupTitle: String { return self._s[2119]! } + public var TwoStepAuth_RecoveryCodeHelp: String { return self._s[2121]! } + public var Passport_Address_Postcode: String { return self._s[2123]! } public func LastSeen_YesterdayAt(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2123]!, self._r[2123]!, [_0]) + return formatWithArgumentRanges(self._s[2124]!, self._r[2124]!, [_0]) } - public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2124]! } - public var WallpaperColors_Title: String { return self._s[2125]! } - public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2126]! } - public var GroupPermission_Duration: String { return self._s[2127]! } + public var Checkout_NewCard_SaveInfoHelp: String { return self._s[2125]! } + public var WallpaperColors_Title: String { return self._s[2126]! } + public var SocksProxySetup_ShareQRCodeInfo: String { return self._s[2127]! } + public var GroupPermission_Duration: String { return self._s[2128]! } public func Cache_Clear(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2128]!, self._r[2128]!, [_0]) + return formatWithArgumentRanges(self._s[2129]!, self._r[2129]!, [_0]) } - public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2129]! } - public var Username_Placeholder: String { return self._s[2130]! } - public var CallFeedback_WhatWentWrong: String { return self._s[2131]! } - public var Passport_FieldAddressUploadHelp: String { return self._s[2132]! } - public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2133]! } - public var Passport_PasswordDescription: String { return self._s[2135]! } - public var Channel_MessagePhotoUpdated: String { return self._s[2136]! } - public var MediaPicker_TapToUngroupDescription: String { return self._s[2137]! } - public var AttachmentMenu_PhotoOrVideo: String { return self._s[2138]! } - public var Conversation_ContextMenuMore: String { return self._s[2139]! } - public var Privacy_PaymentsClearInfo: String { return self._s[2140]! } - public var CallSettings_TabIcon: String { return self._s[2141]! } - public var KeyCommand_Find: String { return self._s[2142]! } - public var Message_PinnedGame: String { return self._s[2143]! } - public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2144]! } - public var Login_CallRequestState2: String { return self._s[2146]! } - public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2148]! } + public var Bot_GroupStatusDoesNotReadHistory: String { return self._s[2130]! } + public var Username_Placeholder: String { return self._s[2131]! } + public var CallFeedback_WhatWentWrong: String { return self._s[2132]! } + public var Passport_FieldAddressUploadHelp: String { return self._s[2133]! } + public var Permissions_NotificationsAllowInSettings_v0: String { return self._s[2134]! } + public var Passport_PasswordDescription: String { return self._s[2136]! } + public var Channel_MessagePhotoUpdated: String { return self._s[2137]! } + public var MediaPicker_TapToUngroupDescription: String { return self._s[2138]! } + public var AttachmentMenu_PhotoOrVideo: String { return self._s[2139]! } + public var Conversation_ContextMenuMore: String { return self._s[2140]! } + public var Privacy_PaymentsClearInfo: String { return self._s[2141]! } + public var CallSettings_TabIcon: String { return self._s[2142]! } + public var KeyCommand_Find: String { return self._s[2143]! } + public var Message_PinnedGame: String { return self._s[2144]! } + public var Notifications_Badge_CountUnreadMessages_InfoOff: String { return self._s[2145]! } + public var Login_CallRequestState2: String { return self._s[2147]! } + public var CheckoutInfo_ReceiverInfoNamePlaceholder: String { return self._s[2149]! } public func Checkout_PayPrice(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2150]!, self._r[2150]!, [_0]) + return formatWithArgumentRanges(self._s[2151]!, self._r[2151]!, [_0]) } - public var WallpaperPreview_Blurred: String { return self._s[2151]! } - public var Conversation_InstantPagePreview: String { return self._s[2152]! } + public var WallpaperPreview_Blurred: String { return self._s[2152]! } + public var Conversation_InstantPagePreview: String { return self._s[2153]! } public func DialogList_SingleUploadingVideoSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2153]!, self._r[2153]!, [_0]) + return formatWithArgumentRanges(self._s[2154]!, self._r[2154]!, [_0]) } - public var SecretTimer_VideoDescription: String { return self._s[2156]! } - public var WallpaperSearch_ColorRed: String { return self._s[2157]! } - public var GroupPermission_NoPinMessages: String { return self._s[2158]! } - public var Passport_Language_es: String { return self._s[2159]! } - public var Permissions_ContactsAllow_v0: String { return self._s[2161]! } - public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2162]! } + public var SecretTimer_VideoDescription: String { return self._s[2157]! } + public var WallpaperSearch_ColorRed: String { return self._s[2158]! } + public var GroupPermission_NoPinMessages: String { return self._s[2159]! } + public var Passport_Language_es: String { return self._s[2160]! } + public var Permissions_ContactsAllow_v0: String { return self._s[2162]! } + public var Conversation_EditingMessageMediaEditCurrentVideo: String { return self._s[2163]! } public func PUSH_CHAT_MESSAGE_CONTACT(_ _1: String, _ _2: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2163]!, self._r[2163]!, [_1, _2]) + return formatWithArgumentRanges(self._s[2164]!, self._r[2164]!, [_1, _2]) } - public var WebPreview_GettingLinkInfo: String { return self._s[2164]! } - public var Watch_UserInfo_Unmute: String { return self._s[2165]! } - public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2166]! } - public var AccessDenied_CameraRestricted: String { return self._s[2168]! } + public var WebPreview_GettingLinkInfo: String { return self._s[2165]! } + public var Watch_UserInfo_Unmute: String { return self._s[2166]! } + public var GroupInfo_ChannelListNamePlaceholder: String { return self._s[2167]! } + public var AccessDenied_CameraRestricted: String { return self._s[2169]! } public func Conversation_Kilobytes(_ _0: Int) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2169]!, self._r[2169]!, ["\(_0)"]) + return formatWithArgumentRanges(self._s[2170]!, self._r[2170]!, ["\(_0)"]) } - public var ChatList_ReadAll: String { return self._s[2171]! } - public var Settings_CopyUsername: String { return self._s[2172]! } - public var Contacts_SearchLabel: String { return self._s[2173]! } - public var Map_OpenInYandexNavigator: String { return self._s[2175]! } - public var PasscodeSettings_EncryptData: String { return self._s[2176]! } - public var WallpaperSearch_ColorPrefix: String { return self._s[2177]! } - public var Notifications_GroupNotificationsPreview: String { return self._s[2178]! } - public var DialogList_AdNoticeAlert: String { return self._s[2179]! } - public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2181]! } - public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2182]! } - public var Localization_LanguageCustom: String { return self._s[2183]! } - public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2184]! } - public var CallFeedback_Title: String { return self._s[2185]! } - public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2188]! } - public var Conversation_InfoGroup: String { return self._s[2189]! } - public var Compose_NewMessage: String { return self._s[2190]! } - public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2191]! } - public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2192]! } + public var ChatList_ReadAll: String { return self._s[2172]! } + public var Settings_CopyUsername: String { return self._s[2173]! } + public var Contacts_SearchLabel: String { return self._s[2174]! } + public var Map_OpenInYandexNavigator: String { return self._s[2176]! } + public var PasscodeSettings_EncryptData: String { return self._s[2177]! } + public var WallpaperSearch_ColorPrefix: String { return self._s[2178]! } + public var Notifications_GroupNotificationsPreview: String { return self._s[2179]! } + public var DialogList_AdNoticeAlert: String { return self._s[2180]! } + public var CheckoutInfo_ShippingInfoAddress1: String { return self._s[2182]! } + public var CheckoutInfo_ShippingInfoAddress2: String { return self._s[2183]! } + public var Localization_LanguageCustom: String { return self._s[2184]! } + public var Passport_Identity_TypeDriversLicenseUploadScan: String { return self._s[2185]! } + public var CallFeedback_Title: String { return self._s[2186]! } + public var Passport_Address_OneOfTypePassportRegistration: String { return self._s[2189]! } + public var Conversation_InfoGroup: String { return self._s[2190]! } + public var Compose_NewMessage: String { return self._s[2191]! } + public var FastTwoStepSetup_HintPlaceholder: String { return self._s[2192]! } + public var ChatSettings_AutoDownloadVideoMessages: String { return self._s[2193]! } public func Passport_Scans_ScanIndex(_ _0: String) -> (String, [(Int, NSRange)]) { - return formatWithArgumentRanges(self._s[2193]!, self._r[2193]!, [_0]) + return formatWithArgumentRanges(self._s[2194]!, self._r[2194]!, [_0]) } - public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2194]! } - public var Login_CancelSignUpConfirmation: String { return self._s[2195]! } - public var ChangePhoneNumberCode_Help: String { return self._s[2196]! } - public var PrivacySettings_DeleteAccountHelp: String { return self._s[2197]! } - public var Channel_BlackList_Title: String { return self._s[2198]! } - public var UserInfo_PhoneCall: String { return self._s[2199]! } - public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2201]! } - public var State_connecting: String { return self._s[2202]! } - public var WallpaperPreview_Color: String { return self._s[2203]! } + public var Channel_AdminLog_CanDeleteMessages: String { return self._s[2195]! } + public var Login_CancelSignUpConfirmation: String { return self._s[2196]! } + public var ChangePhoneNumberCode_Help: String { return self._s[2197]! } + public var PrivacySettings_DeleteAccountHelp: String { return self._s[2198]! } + public var Channel_BlackList_Title: String { return self._s[2199]! } + public var UserInfo_PhoneCall: String { return self._s[2200]! } + public var Passport_Address_OneOfTypeBankStatement: String { return self._s[2202]! } + public var State_connecting: String { return self._s[2203]! } public func DialogList_SingleRecordingAudioSuffix(_ _0: String) -> (String, [(Int, NSRange)]) { return formatWithArgumentRanges(self._s[2204]!, self._r[2204]!, [_0]) } @@ -3433,207 +3433,207 @@ public final class PresentationStrings { public var Channel_Setup_TypePublicHelp: String { return self._s[3071]! } public var Passport_Identity_EditInternalPassport: String { return self._s[3072]! } public var PhotoEditor_Skip: String { return self._s[3073]! } - public func Notification_GameScoreSimple(_ value: Int32) -> String { + public func MuteFor_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + public func Conversation_StatusOnline(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Call_Minutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortHours(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func InviteText_ContactsCountText(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Notifications_Exceptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ChatList_DeleteConfirmation(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func MessageTimer_Years(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func ForwardedVideos(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func SharedMedia_Link(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func AttachmentMenu_SendVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MuteFor_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, "\(value)") } public func ForwardedAudios(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Passport_Scans(_ value: Int32) -> String { + public func MuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Media_ShareItem(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortMinutes(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, "\(value)") } public func MessageTimer_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, _1, _2) + return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MessagePoll_VotedCount(_ value: Int32) -> String { + public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { + public func MessageTimer_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { + public func SharedMedia_Photo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortSeconds(_ value: Int32) -> String { + public func StickerPack_StickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedVideoMessages(_ value: Int32) -> String { + public func MuteFor_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_SharePhoto(_ value: Int32) -> String { + public func MessageTimer_Weeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Passport_Scans(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedLocations(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedGifs(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortHours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedPolls(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_ShortSeconds(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, "\(value)") } public func Map_ETAMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _0, _1) - } - public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Invitation_Members(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func ForwardedMessages(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func AttachmentMenu_SendGif(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, "\(value)") } public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedFiles(_ value: Int32) -> String { + public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { + public func Invitation_Members(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { + public func ForwardedContacts(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Conversation_StatusOnline(_ value: Int32) -> String { + public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_AddStickerCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Call_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSimple(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_ShareVideo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func SharedMedia_Generic(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func ForwardedVideos(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func MessageTimer_ShortDays(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Media_SharePhoto(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Hours(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, "\(value)") } public func Conversation_StatusMembers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_ShortMinutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, _2, _1, _3) + } + public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MessageTimer_Months(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func StickerPack_AddMaskCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func MuteExpires_Minutes(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func LastSeen_HoursAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_ShortWeeks(_ value: Int32) -> String { + public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, "\(value)") } - public func GroupInfo_ParticipantCount(_ value: Int32) -> String { + public func AttachmentMenu_SendItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Generic(_ value: Int32) -> String { + public func ForwardedVideoMessages(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3641,99 +3641,99 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, _1, _2) + public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { + public func ForwardedStickers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedGifs(_ value: Int32) -> String { + public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, _1, _2) - } - public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, _1, _2) + public func ForwardedMessages(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, "\(value)") } public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, _2, _1, _3) + public func Watch_UserInfo_Mute(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Minutes(_ value: Int32) -> String { + public func Call_Seconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Contacts_ImportersCount(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedLocations(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func PUSH_CHAT_MESSAGE_ROUNDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, _1, _2) } - public func MuteExpires_Hours(_ value: Int32) -> String { + public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MessageTimer_ShortWeeks(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, "\(value)") } - public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { + public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { + public func Map_ETAHours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedPolls(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, _1, _2) } - public func SharedMedia_File(_ value: Int32) -> String { + public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, _2, _1, _3) + return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, _1, _2) } - public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, selector) - return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, _1, _2) + public func Notifications_Exceptions(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[69 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Photo(_ value: Int32) -> String { + public func ForwardedFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteExpires_Days(_ value: Int32) -> String { + public func GroupInfo_ParticipantCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Months(_ value: Int32) -> String { + public func AttachmentMenu_SendVideo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfSimple(_ value: Int32) -> String { + public func MessagePoll_VotedCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Minutes(_ value: Int32) -> String { + public func InviteText_ContactsCountText(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String { + public func SharedMedia_Video(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, "\(value)") } @@ -3741,121 +3741,121 @@ public final class PresentationStrings { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String { + public func ChatList_DeleteConfirmation(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, "\(value)") } - public func ForwardedContacts(_ value: Int32) -> String { + public func AttachmentMenu_SendGif(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortMinutes(_ value: Int32) -> String { + public func Media_ShareItem(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddStickerCount(_ value: Int32) -> String { + public func MessageTimer_ShortSeconds(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, "\(value)") } - public func LastSeen_HoursAgo(_ value: Int32) -> String { + public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { + public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Days(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func Map_ETAHours(_ value: Int32) -> String { + public func Contacts_ImportersCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_ShortSeconds(_ value: Int32) -> String { + public func MessageTimer_Years(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreExtended(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, _1, _2) } - public func StickerPack_StickerCount(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, "\(value)") + public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, _0, _1) } - public func ForwardedStickers(_ value: Int32) -> String { + public func LastSeen_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Watch_UserInfo_Mute(_ value: Int32) -> String { + public func MessageTimer_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, "\(value)") } - public func StickerPack_AddMaskCount(_ value: Int32) -> String { + public func LiveLocation_MenuChatsCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, "\(value)") } - public func SharedMedia_Video(_ value: Int32) -> String { + public func Conversation_StatusSubscribers(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MuteFor_Hours(_ value: Int32) -> String { + public func Call_ShortMinutes(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Call_Seconds(_ value: Int32) -> String { + public func SharedMedia_File(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, "\(value)") } - public func AttachmentMenu_SendPhoto(_ value: Int32) -> String { + public func StickerPack_RemoveMaskCount(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String { + public func Notification_GameScoreExtended(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Notification_GameScoreSelfExtended(_ value: Int32) -> String { + public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, "\(value)") } - public func UserCount(_ value: Int32) -> String { + public func SharedMedia_Link(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, "\(value)") } - public func Media_ShareVideo(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func MessageTimer_ShortDays(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func Conversation_StatusSubscribers(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") - } - public func CreatePoll_AddMoreOptions(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, _1, _2) } public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, "\(value)") + return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, "\(value)") } - public func MessageTimer_Hours(_ value: Int32) -> String { + public func UserCount(_ value: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, value) + return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, "\(value)") + } + public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, _1, _2) + } + public func MuteExpires_Hours(_ value: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, value) return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, "\(value)") } - public func PUSH_CHAT_MESSAGES(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + public func PUSH_CHAT_MESSAGE_FWDS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { let form = presentationStringsPluralizationForm(self.lc, selector) return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, _2, _1, _3) } - public func MessageTimer_Weeks(_ value: Int32) -> String { - let form = presentationStringsPluralizationForm(self.lc, value) - return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, "\(value)") + public func PUSH_CHAT_MESSAGE_PHOTOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { + let form = presentationStringsPluralizationForm(self.lc, selector) + return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, _2, _1, _3) } init(primaryComponent: PresentationStringsComponent, secondaryComponent: PresentationStringsComponent?) { diff --git a/TelegramUI/PresentationTheme.swift b/TelegramUI/PresentationTheme.swift index 1c3644c64f..9484ab30fc 100644 --- a/TelegramUI/PresentationTheme.swift +++ b/TelegramUI/PresentationTheme.swift @@ -428,6 +428,11 @@ public final class PresentationThemeVariableColor { self.withWallpaper = withWallpaper self.withoutWallpaper = withoutWallpaper } + + public init(color: UIColor) { + self.withWallpaper = color + self.withoutWallpaper = color + } } public func bubbleColorComponents(theme: PresentationTheme, incoming: Bool, wallpaper: Bool) -> PresentationThemeBubbleColorComponents { @@ -447,7 +452,7 @@ public func bubbleColorComponents(theme: PresentationTheme, incoming: Bool, wall } public func bubbleVariableColor(variableColor: PresentationThemeVariableColor, wallpaper: TelegramWallpaper) -> UIColor { - if wallpaper != .builtin { + if wallpaper != .builtin && wallpaper != .color(0xffffff) { return variableColor.withWallpaper } else { return variableColor.withoutWallpaper @@ -512,19 +517,19 @@ public final class PresentationThemeChatBubble { public let outgoingFileDurationColor: UIColor public let shareButtonFillColor: PresentationThemeVariableColor - public let shareButtonStrokeColor: UIColor - public let shareButtonForegroundColor: UIColor + public let shareButtonStrokeColor: PresentationThemeVariableColor + public let shareButtonForegroundColor: PresentationThemeVariableColor public let mediaOverlayControlBackgroundColor: UIColor public let mediaOverlayControlForegroundColor: UIColor public let actionButtonsIncomingFillColor: PresentationThemeVariableColor - public let actionButtonsIncomingStrokeColor: UIColor - public let actionButtonsIncomingTextColor: UIColor + public let actionButtonsIncomingStrokeColor: PresentationThemeVariableColor + public let actionButtonsIncomingTextColor: PresentationThemeVariableColor public let actionButtonsOutgoingFillColor: PresentationThemeVariableColor - public let actionButtonsOutgoingStrokeColor: UIColor - public let actionButtonsOutgoingTextColor: UIColor + public let actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor + public let actionButtonsOutgoingTextColor: PresentationThemeVariableColor public let selectionControlBorderColor: UIColor public let selectionControlFillColor: UIColor @@ -541,7 +546,7 @@ public final class PresentationThemeChatBubble { public let incomingPolls: PresentationThemeChatBubblePolls public let outgoingPolls: PresentationThemeChatBubblePolls - public init(incoming: PresentationThemeBubbleColor, outgoing: PresentationThemeBubbleColor, freeform: PresentationThemeBubbleColor, incomingPrimaryTextColor: UIColor, incomingSecondaryTextColor: UIColor, incomingLinkTextColor: UIColor, incomingLinkHighlightColor: UIColor, outgoingPrimaryTextColor: UIColor, outgoingSecondaryTextColor: UIColor, outgoingLinkTextColor: UIColor, outgoingLinkHighlightColor: UIColor, infoPrimaryTextColor: UIColor, infoLinkTextColor: UIColor, incomingAccentTextColor: UIColor, outgoingAccentTextColor: UIColor, incomingAccentControlColor: UIColor, outgoingAccentControlColor: UIColor, incomingMediaActiveControlColor: UIColor, outgoingMediaActiveControlColor: UIColor, incomingMediaInactiveControlColor: UIColor, outgoingMediaInactiveControlColor: UIColor, outgoingCheckColor: UIColor, incomingPendingActivityColor: UIColor, outgoingPendingActivityColor: UIColor, mediaDateAndStatusFillColor: UIColor, mediaDateAndStatusTextColor: UIColor, incomingFileTitleColor: UIColor, outgoingFileTitleColor: UIColor, incomingFileDescriptionColor: UIColor, outgoingFileDescriptionColor: UIColor, incomingFileDurationColor: UIColor, outgoingFileDurationColor: UIColor, shareButtonFillColor: PresentationThemeVariableColor, shareButtonStrokeColor: UIColor, shareButtonForegroundColor: UIColor, mediaOverlayControlBackgroundColor: UIColor, mediaOverlayControlForegroundColor: UIColor, actionButtonsIncomingFillColor: PresentationThemeVariableColor, actionButtonsIncomingStrokeColor: UIColor, actionButtonsIncomingTextColor: UIColor, actionButtonsOutgoingFillColor: PresentationThemeVariableColor, actionButtonsOutgoingStrokeColor: UIColor, actionButtonsOutgoingTextColor: UIColor, selectionControlBorderColor: UIColor, selectionControlFillColor: UIColor, selectionControlForegroundColor: UIColor, mediaHighlightOverlayColor: UIColor, deliveryFailedFillColor: UIColor, deliveryFailedForegroundColor: UIColor, incomingMediaPlaceholderColor: UIColor, outgoingMediaPlaceholderColor: UIColor, incomingPolls: PresentationThemeChatBubblePolls, outgoingPolls: PresentationThemeChatBubblePolls) { + public init(incoming: PresentationThemeBubbleColor, outgoing: PresentationThemeBubbleColor, freeform: PresentationThemeBubbleColor, incomingPrimaryTextColor: UIColor, incomingSecondaryTextColor: UIColor, incomingLinkTextColor: UIColor, incomingLinkHighlightColor: UIColor, outgoingPrimaryTextColor: UIColor, outgoingSecondaryTextColor: UIColor, outgoingLinkTextColor: UIColor, outgoingLinkHighlightColor: UIColor, infoPrimaryTextColor: UIColor, infoLinkTextColor: UIColor, incomingAccentTextColor: UIColor, outgoingAccentTextColor: UIColor, incomingAccentControlColor: UIColor, outgoingAccentControlColor: UIColor, incomingMediaActiveControlColor: UIColor, outgoingMediaActiveControlColor: UIColor, incomingMediaInactiveControlColor: UIColor, outgoingMediaInactiveControlColor: UIColor, outgoingCheckColor: UIColor, incomingPendingActivityColor: UIColor, outgoingPendingActivityColor: UIColor, mediaDateAndStatusFillColor: UIColor, mediaDateAndStatusTextColor: UIColor, incomingFileTitleColor: UIColor, outgoingFileTitleColor: UIColor, incomingFileDescriptionColor: UIColor, outgoingFileDescriptionColor: UIColor, incomingFileDurationColor: UIColor, outgoingFileDurationColor: UIColor, shareButtonFillColor: PresentationThemeVariableColor, shareButtonStrokeColor: PresentationThemeVariableColor, shareButtonForegroundColor: PresentationThemeVariableColor, mediaOverlayControlBackgroundColor: UIColor, mediaOverlayControlForegroundColor: UIColor, actionButtonsIncomingFillColor: PresentationThemeVariableColor, actionButtonsIncomingStrokeColor: PresentationThemeVariableColor, actionButtonsIncomingTextColor: PresentationThemeVariableColor, actionButtonsOutgoingFillColor: PresentationThemeVariableColor, actionButtonsOutgoingStrokeColor: PresentationThemeVariableColor, actionButtonsOutgoingTextColor: PresentationThemeVariableColor, selectionControlBorderColor: UIColor, selectionControlFillColor: UIColor, selectionControlForegroundColor: UIColor, mediaHighlightOverlayColor: UIColor, deliveryFailedFillColor: UIColor, deliveryFailedForegroundColor: UIColor, incomingMediaPlaceholderColor: UIColor, outgoingMediaPlaceholderColor: UIColor, incomingPolls: PresentationThemeChatBubblePolls, outgoingPolls: PresentationThemeChatBubblePolls) { self.incoming = incoming self.outgoing = outgoing self.freeform = freeform @@ -644,7 +649,7 @@ public func serviceMessageColorComponents(theme: PresentationTheme, wallpaper: T } public func serviceMessageColorComponents(chatTheme: PresentationThemeChat, wallpaper: TelegramWallpaper) -> PresentationThemeServiceMessageColorComponents { - if wallpaper != .builtin { + if wallpaper != .builtin && wallpaper != .color(0xffffff) { return chatTheme.serviceMessage.components.withCustomWallpaper } else { return chatTheme.serviceMessage.components.withDefaultWallpaper @@ -658,9 +663,9 @@ public final class PresentationThemeServiceMessage { public let unreadBarStrokeColor: UIColor public let unreadBarTextColor: UIColor - public let dateTextColor: UIColor + public let dateTextColor: PresentationThemeVariableColor - public init(components: PresentationThemeServiceMessageColor, unreadBarFillColor: UIColor, unreadBarStrokeColor: UIColor, unreadBarTextColor: UIColor, dateTextColor: UIColor) { + public init(components: PresentationThemeServiceMessageColor, unreadBarFillColor: UIColor, unreadBarStrokeColor: UIColor, unreadBarTextColor: UIColor, dateTextColor: PresentationThemeVariableColor) { self.components = components self.unreadBarFillColor = unreadBarFillColor self.unreadBarStrokeColor = unreadBarStrokeColor diff --git a/TelegramUI/PresentationThemeEssentialGraphics.swift b/TelegramUI/PresentationThemeEssentialGraphics.swift index 27b5a385c4..db594a9142 100644 --- a/TelegramUI/PresentationThemeEssentialGraphics.swift +++ b/TelegramUI/PresentationThemeEssentialGraphics.swift @@ -245,25 +245,25 @@ public final class PrincipalThemeAdditionalGraphics { self.chatEmptyItemBackgroundImage = generateStretchableFilledCircleImage(radius: 14.0, color: serviceColor.fill)! self.chatLoadingIndicatorBackgroundImage = generateStretchableFilledCircleImage(diameter: 30.0, color: serviceColor.fill)! - self.chatBubbleShareButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.shareButtonStrokeColor, foregroundColor: theme.bubble.shareButtonForegroundColor, image: UIImage(bundleImageName: "Chat/Message/ShareIcon"))! - self.chatBubbleNavigateButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.shareButtonStrokeColor, foregroundColor: theme.bubble.shareButtonForegroundColor, image: UIImage(bundleImageName: "Chat/Message/NavigateToMessageIcon"), iconOffset: CGPoint(x: 0.0, y: 1.0))! - self.chatBubbleActionButtonIncomingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsIncomingStrokeColor, position: .middle) - self.chatBubbleActionButtonIncomingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsIncomingStrokeColor, position: .bottomLeft) - self.chatBubbleActionButtonIncomingBottomRightImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsIncomingStrokeColor, position: .bottomRight) - self.chatBubbleActionButtonIncomingBottomSingleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsIncomingStrokeColor, position: .bottomSingle) - self.chatBubbleActionButtonOutgoingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsOutgoingStrokeColor, position: .middle) - self.chatBubbleActionButtonOutgoingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsOutgoingStrokeColor, position: .bottomLeft) - self.chatBubbleActionButtonOutgoingBottomRightImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsOutgoingStrokeColor, position: .bottomRight) - self.chatBubbleActionButtonOutgoingBottomSingleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: theme.bubble.actionButtonsOutgoingStrokeColor, position: .bottomSingle) - self.chatBubbleActionButtonIncomingMessageIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotMessage"), color: theme.bubble.actionButtonsIncomingTextColor)! - self.chatBubbleActionButtonIncomingLinkIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLink"), color: theme.bubble.actionButtonsIncomingTextColor)! - self.chatBubbleActionButtonIncomingShareIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotShare"), color: theme.bubble.actionButtonsIncomingTextColor)! - self.chatBubbleActionButtonIncomingPhoneIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotPhone"), color: theme.bubble.actionButtonsIncomingTextColor)! - self.chatBubbleActionButtonIncomingLocationIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLocation"), color: theme.bubble.actionButtonsIncomingTextColor)! - self.chatBubbleActionButtonOutgoingMessageIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotMessage"), color: theme.bubble.actionButtonsOutgoingTextColor)! - self.chatBubbleActionButtonOutgoingLinkIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLink"), color: theme.bubble.actionButtonsOutgoingTextColor)! - self.chatBubbleActionButtonOutgoingShareIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotShare"), color: theme.bubble.actionButtonsOutgoingTextColor)! - self.chatBubbleActionButtonOutgoingPhoneIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotPhone"), color: theme.bubble.actionButtonsOutgoingTextColor)! - self.chatBubbleActionButtonOutgoingLocationIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLocation"), color: theme.bubble.actionButtonsOutgoingTextColor)! + self.chatBubbleShareButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonStrokeColor, wallpaper: wallpaper), foregroundColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonForegroundColor, wallpaper: wallpaper), image: UIImage(bundleImageName: "Chat/Message/ShareIcon"))! + self.chatBubbleNavigateButtonImage = chatBubbleActionButtonImage(fillColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonStrokeColor, wallpaper: wallpaper), foregroundColor: bubbleVariableColor(variableColor: theme.bubble.shareButtonForegroundColor, wallpaper: wallpaper), image: UIImage(bundleImageName: "Chat/Message/NavigateToMessageIcon"), iconOffset: CGPoint(x: 0.0, y: 1.0))! + self.chatBubbleActionButtonIncomingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingStrokeColor, wallpaper: wallpaper), position: .middle) + self.chatBubbleActionButtonIncomingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingStrokeColor, wallpaper: wallpaper), position: .bottomLeft) + self.chatBubbleActionButtonIncomingBottomRightImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingStrokeColor, wallpaper: wallpaper), position: .bottomRight) + self.chatBubbleActionButtonIncomingBottomSingleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingStrokeColor, wallpaper: wallpaper), position: .bottomSingle) + self.chatBubbleActionButtonOutgoingMiddleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingStrokeColor, wallpaper: wallpaper), position: .middle) + self.chatBubbleActionButtonOutgoingBottomLeftImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingStrokeColor, wallpaper: wallpaper), position: .bottomLeft) + self.chatBubbleActionButtonOutgoingBottomRightImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingStrokeColor, wallpaper: wallpaper), position: .bottomRight) + self.chatBubbleActionButtonOutgoingBottomSingleImage = messageBubbleActionButtonImage(color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingFillColor, wallpaper: wallpaper), strokeColor: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingStrokeColor, wallpaper: wallpaper), position: .bottomSingle) + self.chatBubbleActionButtonIncomingMessageIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotMessage"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonIncomingLinkIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLink"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonIncomingShareIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotShare"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonIncomingPhoneIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotPhone"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonIncomingLocationIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLocation"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsIncomingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonOutgoingMessageIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotMessage"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonOutgoingLinkIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLink"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonOutgoingShareIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotShare"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonOutgoingPhoneIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotPhone"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingTextColor, wallpaper: wallpaper))! + self.chatBubbleActionButtonOutgoingLocationIconImage = generateTintedImage(image: UIImage(bundleImageName: "Chat/Message/BotLocation"), color: bubbleVariableColor(variableColor: theme.bubble.actionButtonsOutgoingTextColor, wallpaper: wallpaper))! } } diff --git a/TelegramUI/ProxyServerActionSheetController.swift b/TelegramUI/ProxyServerActionSheetController.swift index 68346bf921..195f5deb40 100644 --- a/TelegramUI/ProxyServerActionSheetController.swift +++ b/TelegramUI/ProxyServerActionSheetController.swift @@ -31,7 +31,7 @@ public final class ProxyServerActionSheetController: ActionSheetController { if case .mtp = server.connection { items.append(ActionSheetTextItem(title: strings.SocksProxySetup_AdNoticeHelp)) } - items.append(ProxyServerInfoItem(strings: strings, server: server)) + items.append(ProxyServerInfoItem(strings: strings, network: network, server: server)) items.append(ProxyServerActionItem(postbox: postbox, network: network, presentationTheme: theme, strings: strings, server: server, dismiss: { [weak self] success in guard let strongSelf = self, !strongSelf.isDismissed else { return @@ -73,15 +73,17 @@ public final class ProxyServerActionSheetController: ActionSheetController { private final class ProxyServerInfoItem: ActionSheetItem { private let strings: PresentationStrings + private let network: Network private let server: ProxyServerSettings - init(strings: PresentationStrings, server: ProxyServerSettings) { + init(strings: PresentationStrings, network: Network, server: ProxyServerSettings) { self.strings = strings + self.network = network self.server = server } func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { - return ProxyServerInfoItemNode(theme: theme, strings: self.strings, server: self.server) + return ProxyServerInfoItemNode(theme: theme, strings: self.strings, network: self.network, server: self.server) } func updateNode(_ node: ActionSheetItemNode) { @@ -90,16 +92,27 @@ private final class ProxyServerInfoItem: ActionSheetItem { private let textFont = Font.regular(16.0) +private enum ProxyServerInfoStatusType { + case generic(String) + case failed(String) +} + private final class ProxyServerInfoItemNode: ActionSheetItemNode { private let theme: ActionSheetControllerTheme private let strings: PresentationStrings + + private let network: Network private let server: ProxyServerSettings private let fieldNodes: [(ImmediateTextNode, ImmediateTextNode)] + private let statusTextNode: ImmediateTextNode - init(theme: ActionSheetControllerTheme, strings: PresentationStrings, server: ProxyServerSettings) { + private let statusDisposable = MetaDisposable() + + init(theme: ActionSheetControllerTheme, strings: PresentationStrings, network: Network, server: ProxyServerSettings) { self.theme = theme self.strings = strings + self.network = network self.server = server var fieldNodes: [(ImmediateTextNode, ImmediateTextNode)] = [] @@ -160,7 +173,18 @@ private final class ProxyServerInfoItemNode: ActionSheetItemNode { fieldNodes.append((passwordTitleNode, passwordTextNode)) } + let statusTitleNode = ImmediateTextNode() + statusTitleNode.isUserInteractionEnabled = false + statusTitleNode.displaysAsynchronously = false + statusTitleNode.attributedText = NSAttributedString(string: strings.SocksProxySetup_Status, font: textFont, textColor: theme.secondaryTextColor) + let statusTextNode = ImmediateTextNode() + statusTextNode.isUserInteractionEnabled = false + statusTextNode.displaysAsynchronously = false + statusTextNode.attributedText = NSAttributedString(string: strings.SocksProxySetup_ProxyStatusChecking, font: textFont, textColor: theme.primaryTextColor) + fieldNodes.append((statusTitleNode, statusTextNode)) + self.fieldNodes = fieldNodes + self.statusTextNode = statusTextNode super.init(theme: theme) @@ -170,6 +194,46 @@ private final class ProxyServerInfoItemNode: ActionSheetItemNode { } } + deinit { + self.statusDisposable.dispose() + } + + override func didLoad() { + super.didLoad() + + let statusesContext = ProxyServersStatuses(network: network, servers: .single([self.server])) + self.statusDisposable.set((statusesContext.statuses() + |> map { return $0.first?.value } + |> distinctUntilChanged + |> deliverOnMainQueue).start(next: { [weak self] status in + if let strongSelf = self, let status = status { + let statusType: ProxyServerInfoStatusType + switch status { + case .checking: + statusType = .generic(strongSelf.strings.SocksProxySetup_ProxyStatusChecking) + case let .available(rtt): + let pingTime = Int(rtt * 1000.0) + statusType = .generic(strongSelf.strings.SocksProxySetup_ProxyStatusPing("\(pingTime)").0) + case .notAvailable: + statusType = .failed(strongSelf.strings.SocksProxySetup_ProxyStatusUnavailable) + } + strongSelf.setStatus(statusType) + } + })) + } + + func setStatus(_ status: ProxyServerInfoStatusType) { + let attributedString: NSAttributedString + switch status { + case let .generic(text): + attributedString = NSAttributedString(string: text, font: textFont, textColor: theme.primaryTextColor) + case let .failed(text): + attributedString = NSAttributedString(string: text, font: textFont, textColor: theme.destructiveActionTextColor) + } + self.statusTextNode.attributedText = attributedString + self.setNeedsLayout() + } + override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { return CGSize(width: constrainedSize.width, height: 36.0 * CGFloat(self.fieldNodes.count) + 12.0) } diff --git a/TelegramUI/Resources/PresentationStrings.mapping b/TelegramUI/Resources/PresentationStrings.mapping index bf1944ae93723d047831e4d99f41bc7d4cf31c3c..41054f46362484e527c71a173f72bb8fdaf16a4a 100644 GIT binary patch delta 3538 zcmZWsYj6|S750(6(pr*VShC)-2uyH*Py#|Wwi|>EvUwz-u$I@hiqHz}%8mg) zz>u~Hd2ySZPMZ>b^hY~M31l+UKbfY?FrBtZ3G|ib**uy~NRy`Y1=z;!xogFN#50=R zd%kneJ&*66vp#>^c>cKY%rCD(1(QCsHE5ESRrBcY_olo&8$CNSi9sno+^HlJ@!?Q7 z9+%S^$Nyl$R}X=Y!8M2QN7AieXHE9Pu9h8LKK+A$#_{AZxpB72c+mlU>>4 z5jge^8@^rx@3WKF-R=(vDI!^CM(Il=Y{~_!)4DSL5dw0qQ z|79~%HNyW$SdTNyDSOS+<#3hlm~Mh=?2&0NOtNRDt6`eGI_-j4c6qwqkSF4~8nCfN zH%jQ(ygWZ!$GqlnGN}yl7zEaHqaKXx_>F+UB;u=k!Ovc~;V=}6tno@YyLO}4U=}gZ zO6B#>l!ApVo$-N{MQ7@vhz-pwgc5dgrnah-Ec0qdl+>V{Q6(**q(a@Po}?1r%a17& zarYqEn3^dyED+gyV>WcVVS#m9q9-G1dN#}1y4lr21sQU(b9RrBZ*!0r4>`r&1AO7s z7bZL^oWY$8@E+v}@ z=>=@$;z|)a_kit*(_j+O8|AN>S;$A8JlC%_Czun zk&?-sN|v9nn80FsM#z|=%ArU`&gG^7{RXIkB^WV46@;+Q082bebLvqgr458y~xJ6KQllXtU$;IFEpV)ALM!aeyQ7*^_O#j$)a8diyH zcfij&UNPfy`9#Il`15>NB-}|SEoRXdTv$*5PFRD!0;q|;A#N^LJJuTvi)Zqm=&PRuu()Q^u^_{LMuK? zYS50q6`)SIo3vf5EZ>GjMzF#rbQ_^kh?3OD&OU9!iwcPIJzz75?UaMt^}&8zn43!Ta`0>#)LWtl$6YS1NZ#_x;-p_pOT_oenNBIbHl{Z%2Kj#(bqa&#< zzzYYVVOco=T!H5_6dO=7S}rgiFy9rG(xH~FaL#QzmLH^|Rp4WzbUhqTj=;hd+<#7p z_S9g4(#}U*RNmJ^^Ug(5ZhZb^nuD4Y*Hkw?d>9sk2U{ng%H<^$UK!no+(ABCd-a5N z&n44O0=+nLZ$ctZrHrg!v`UimAaqG@R7a`l%b7$xKw_Sq`Q!BsYLG-#y6IwGtCssU zIYnu!%43gjcAB5sRb%oP_-?Nu)h``N4AhiblJk&nVT7LSg}81EfeJ`7FJ0NI5X4ugYc`P3*> z8FuICA3->F1PaZcU&1|k^bzdCPY!`K$gN6bjwk%)N^DA`_V$p>&Z*%r#Nv4A7}Qqq y&k5d6`K-_r!sn4rAK!{tAHDM?d2+(l(b^m>8#dlK{6vnH3hqiJUc z7z~C#u&(PXgx5{1VbaCke$i|uo#73FEn;;ac-fnmo$yEY;q_8@lR2hc!doU*_edeT zciJfai9i+XCsRT8;IvJAo1{W^ZI4&v4*tx}OqanFyD;tXyhoO7(zU15UL_%i!h6-B zGzVQ}pHG(s{z7I4NiAxhk_>H1_NpC9Iw5nw`(!F&PiMPW7wCwtybh!KFoyzT`;BhaiNgiz8wVj=^!i@JQ9Z2LEfoqt96?^m^jSsUg^|(-ja1G z^az60XJu0m@)8$^w+Y5`0*I8gFP09w7$xhnnSNcrc|Tc&xSf8o`A+iJdF+)rN=S zin^Y%OQ^9pH!r7!oO&6iHmY$sDksy?0gW5Kfej0wQdl9eV=lL8IajUBl(s*`g}Wry z9VljPFIya~^1-N_PAkbi-hiv{-371+R--u!R>0j@p9Q6`279vLE?A3avY;I9#fw?s zgL=G@1&g5pEh3dI%&Alb>u|RS0dYOW7G(R+7a)p|D>O+M3uS1Zy(!tF4$x*iiVgTG zprzaE%fCVhd@D*t2Jycu55bM~xss1SgHOODmcDEcU*W z1%937*t(6^fOjBw-G-NqP+Hhd5Ke=}SWiD4MM93Hc$QnyW`Y{nhO15BhbZncQC=N5 zW`b(5la?&Ti!%7|Hzvr39XMs8Qtp&6cmO=M&cQexr+xyvaH#|#xDUG}s1SA&%YV!{ zX^yBVo#6N5ISI_t%YfGZeudtTDsg z!d?l#y#aidWqehfRxM%;Zv^n18641y&zr#~_K~(wXK?nq#84`g39Dbi%f*m~c^1eQ z6@rwXy6VKhCNSd`3oTCIZVQ!rfG=jj;X*uX0h5>{v53VcTzG+lRJ>%N((K322rHyG zCcjT+(@K4+s%#wB*;EuS?d_bP{Y&d2q!!9M!cLgcd#Ca^x6$T*3Q zWmC7+;RD%FW7MnjO?)mJD#V8=st}tx=Vs6M+tFbMJA4a^?NB5>s#}O!?2_AzU3Msh z@8AJD#r0i$f&jwzB&=Nv1^B8R@`T4Emh;mAWhYg(*N)_dwCIvr3do+4i*?4;3& z?GA7O!(Imw|8acG0p;RpG6rdy<>4#b_kiqG{qGK4VB}g+7WPCc2QGlyva)NMnS9gL;oa$F~m#;;yIv;G*-H6q8ASg1uw?z3Y956^*5kAugkV{`Z}K2s+A zTzqN-7BAsdf(G{a+HWyfWBey3WWxi zv&(zx^(=7X?&Cxd5Bbm^CKdSZG3o{{$$oY@;>7MzqLGiUc4Penn4k!cjzN*Tm=HXX zObSt+4xMUR_2WAu;PMB^luzG$`r)B;znaq8(*1Hu3*ycbRKOBUj)Hr0DdF@d$^V>M zw2YK|yw5whL&b7Z@|0U*S~@Dr$vejv?o%u9;|Zd6C0?VPN){2wP2Y}Kx~D(%f8bT< zAB9S9HDUOLHNVpadKYPnNmI`JqAxol5A3Cw8`Ys?x(0tsfeT9v?5N_lwj~ovQVtQ) z!^V|-+Z?i%6mvw{A6`5R^+YSXnbTuwN2BpH?+K^n|q#Vp-prrr_y(_SxY9)sQJuW)Sg&cQIp!e8D|;p)#E3VRMrOEH$ej}jL(ch z_40MJ?n_l`R}%@Xk+ff>H!tUU((5l>3_Ju`V@)J}EwfA=Hjs&*yUwV&2GNPtOiG<_ zME#~igGx%)boy_c^EJnh4rM@2h4j~iwuwvu`dZbr(yL@r3pK|E@WElK@@5>NUJ$o% z5N>S(Z+SQ#=OapMAr;?h>yXm3k6sn=kRE{+Azd+Va-U!C@m7+*#L+u-Zo_9zP{rEu z zR~KP6fJ5AHt#RiPNE`F|DeTW^%TBz$E&=tHfC^!fUb xHS^iU@BL!EccMdkwVss1J55H{2+gWq9Gj$DwU19(H}qpGjUZ6;nJemj^k^%q# diff --git a/TelegramUI/ThemeSettingsController.swift b/TelegramUI/ThemeSettingsController.swift index a22e1e3999..2b940dbc89 100644 --- a/TelegramUI/ThemeSettingsController.swift +++ b/TelegramUI/ThemeSettingsController.swift @@ -343,7 +343,7 @@ public func themeSettingsController(account: Account) -> ViewController { case .nightAccent: theme = defaultDarkAccentPresentationTheme case .day: - theme = makeDefaultDayPresentationTheme(accentColor: settings.themeAccentColor ?? defaultDayAccentColor) + theme = makeDefaultDayPresentationTheme(accentColor: settings.themeAccentColor ?? defaultDayAccentColor, serviceBackgroundColor: defaultServiceBackgroundColor) } } wallpaper = settings.chatWallpaper