Various UI improvements

This commit is contained in:
Ilya Laktyushin 2019-09-11 10:25:15 +03:00
parent f01d5d1546
commit 5ade4ad7ec
18 changed files with 697 additions and 516 deletions

View File

@ -1017,7 +1017,9 @@ public class ChatListControllerImpl: TelegramBaseController, ChatListController,
} }
@objc private func composePressed() { @objc private func composePressed() {
(self.navigationController as? NavigationController)?.replaceAllButRootController(self.context.sharedContext.makeComposeController(context: self.context), animated: true) let controller = self.context.sharedContext.makeComposeController(context: self.context)
self.present(controller, in: .window(.root))
//(self.navigationController as? NavigationController)?.replaceAllButRootController(self.context.sharedContext.makeComposeController(context: self.context), animated: true)
} }
public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { public func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {

View File

@ -235,12 +235,6 @@ open class NavigationController: UINavigationController, ContainableController,
self.controllerView.separatorView.backgroundColor = theme.navigationBar.separatorColor self.controllerView.separatorView.backgroundColor = theme.navigationBar.separatorColor
self.controllerView.navigationBackgroundView?.backgroundColor = theme.navigationBar.backgroundColor self.controllerView.navigationBackgroundView?.backgroundColor = theme.navigationBar.backgroundColor
self.controllerView.navigationSeparatorView?.backgroundColor = theme.navigationBar.separatorColor self.controllerView.navigationSeparatorView?.backgroundColor = theme.navigationBar.separatorColor
// if let emptyDetailView = self.controllerView.emptyDetailView {
// emptyDetailView.image = theme.emptyDetailIcon
// if let image = theme.emptyDetailIcon {
// emptyDetailView.frame = CGRect(origin: CGPoint(x: floor(emptyDetailView.center.x - image.size.width / 2.0), y: floor(emptyDetailView.center.y - image.size.height / 2.0)), size: image.size)
// }
// }
} }
} }
@ -264,7 +258,7 @@ open class NavigationController: UINavigationController, ContainableController,
private func layoutDataForConfiguration(_ layoutConfiguration: ControllerLayoutConfiguration, layout: ContainerViewLayout, index: Int) -> (CGRect, ContainerViewLayout) { private func layoutDataForConfiguration(_ layoutConfiguration: ControllerLayoutConfiguration, layout: ContainerViewLayout, index: Int) -> (CGRect, ContainerViewLayout) {
switch layoutConfiguration { switch layoutConfiguration {
case .masterDetail: case .masterDetail:
let masterWidth: CGFloat = max(320.0, floor(layout.size.width / 3.0)) let masterWidth: CGFloat = max(320.0, min(375.0, floor(layout.size.width / 3.0)))
let detailWidth: CGFloat = layout.size.width - masterWidth let detailWidth: CGFloat = layout.size.width - masterWidth
if index == 0 { if index == 0 {
return (CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: masterWidth, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: masterWidth, height: layout.size.height), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver)) return (CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: masterWidth, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: masterWidth, height: layout.size.height), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver))
@ -367,10 +361,10 @@ open class NavigationController: UINavigationController, ContainableController,
if let blackout = self.masterDetailsBlackout { if let blackout = self.masterDetailsBlackout {
let blackoutFrame: CGRect let blackoutFrame: CGRect
switch blackout { switch blackout {
case .details: case .details:
blackoutFrame = CGRect(origin: CGPoint(x: masterData.0.maxX, y: 0.0), size: lastControllerFrameAndLayout.0.size) blackoutFrame = CGRect(origin: CGPoint(x: masterData.0.maxX, y: 0.0), size: lastControllerFrameAndLayout.0.size)
case .master: case .master:
blackoutFrame = masterData.0 blackoutFrame = masterData.0
} }
if self.controllerView.masterDetailsBlackout == nil { if self.controllerView.masterDetailsBlackout == nil {
self.controllerView.masterDetailsBlackout = ASDisplayNode() self.controllerView.masterDetailsBlackout = ASDisplayNode()

View File

@ -37,6 +37,7 @@ public final class PresentationContext {
weak var volumeControlStatusBarNodeView: UIView? weak var volumeControlStatusBarNodeView: UIView?
var updateIsInteractionBlocked: ((Bool) -> Void)? var updateIsInteractionBlocked: ((Bool) -> Void)?
var updateHasBlocked: ((Bool) -> Void)?
var updateHasOpaqueOverlay: ((Bool) -> Void)? var updateHasOpaqueOverlay: ((Bool) -> Void)?
private(set) var hasOpaqueOverlay: Bool = false { private(set) var hasOpaqueOverlay: Bool = false {
@ -47,6 +48,9 @@ public final class PresentationContext {
} }
} }
private var modalPresentationValue: CGFloat = 0.0
var updateModalTransition: ((CGFloat, ContainedViewLayoutTransition) -> Void)?
private var layout: ContainerViewLayout? private var layout: ContainerViewLayout?
private var ready: Bool { private var ready: Bool {
@ -120,6 +124,20 @@ public final class PresentationContext {
} }
} }
private func layoutForController(containerLayout: ContainerViewLayout, controller: ContainableController) -> (ContainerViewLayout, CGRect) {
if controller.isModalWhenInOverlay, case .regular = containerLayout.metrics.widthClass {
let topInset = (containerLayout.statusBarHeight ?? 0.0) + 20.0
var updatedLayout = containerLayout
updatedLayout.statusBarHeight = nil
updatedLayout.size = CGSize(width: min(containerLayout.size.width - 90.0, 750.0), height: min(containerLayout.size.height - 90.0, 940.0))
updatedLayout.safeInsets = UIEdgeInsets()
updatedLayout.intrinsicInsets = UIEdgeInsets()
return (updatedLayout, CGRect(origin: CGPoint(x: (containerLayout.size.width - updatedLayout.size.width) / 2.0, y: (containerLayout.size.height - updatedLayout.size.height) / 2.0), size: updatedLayout.size))
} else {
return (containerLayout, CGRect(origin: CGPoint(), size: containerLayout.size))
}
}
public func present(_ controller: ContainableController, on level: PresentationSurfaceLevel, blockInteraction: Bool = false, completion: @escaping () -> Void) { public func present(_ controller: ContainableController, on level: PresentationSurfaceLevel, blockInteraction: Bool = false, completion: @escaping () -> Void) {
let controllerReady = controller.ready.get() let controllerReady = controller.ready.get()
|> filter({ $0 }) |> filter({ $0 })
@ -140,8 +158,9 @@ public final class PresentationContext {
controller.supportedOrientations = ViewControllerSupportedOrientations(regularSize: orientations, compactSize: orientations) controller.supportedOrientations = ViewControllerSupportedOrientations(regularSize: orientations, compactSize: orientations)
} }
} }
controller.view.frame = CGRect(origin: CGPoint(), size: initialLayout.size) let (controllerLayout, controllerFrame) = self.layoutForController(containerLayout: initialLayout, controller: controller)
controller.containerLayoutUpdated(initialLayout, transition: .immediate) controller.view.frame = controllerFrame
controller.containerLayoutUpdated(controllerLayout, transition: .immediate)
var blockInteractionToken: Int? var blockInteractionToken: Int?
if blockInteraction { if blockInteraction {
blockInteractionToken = self.addBlockInteraction() blockInteractionToken = self.addBlockInteraction()
@ -170,37 +189,32 @@ public final class PresentationContext {
} }
strongSelf.controllers.insert((controller, level), at: insertIndex ?? strongSelf.controllers.count) strongSelf.controllers.insert((controller, level), at: insertIndex ?? strongSelf.controllers.count)
if let view = strongSelf.view, let layout = strongSelf.layout { if let view = strongSelf.view, let layout = strongSelf.layout {
let (updatedControllerLayout, updatedControllerFrame) = strongSelf.layoutForController(containerLayout: layout, controller: controller)
(controller as? UIViewController)?.navigation_setDismiss({ [weak controller] in (controller as? UIViewController)?.navigation_setDismiss({ [weak controller] in
if let strongSelf = self, let controller = controller { if let strongSelf = self, let controller = controller {
strongSelf.dismiss(controller) strongSelf.dismiss(controller)
} }
}, rootController: nil) }, rootController: nil)
(controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(true) (controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(true)
if layout != initialLayout { if updatedControllerLayout != controllerLayout {
controller.view.frame = CGRect(origin: CGPoint(), size: layout.size) controller.view.frame = updatedControllerFrame
if let topLevelSubview = strongSelf.topLevelSubview(for: level) { if let topLevelSubview = strongSelf.topLevelSubview(for: level) {
view.insertSubview(controller.view, belowSubview: topLevelSubview) view.insertSubview(controller.view, belowSubview: topLevelSubview)
} else { } else {
if let volumeControlStatusBarNodeView = strongSelf.volumeControlStatusBarNodeView { view.addSubview(controller.view)
view.insertSubview(controller.view, belowSubview: volumeControlStatusBarNodeView)
} else {
view.addSubview(controller.view)
}
} }
controller.containerLayoutUpdated(layout, transition: .immediate) controller.containerLayoutUpdated(updatedControllerLayout, transition: .immediate)
} else { } else {
if let topLevelSubview = strongSelf.topLevelSubview(for: level) { if let topLevelSubview = strongSelf.topLevelSubview(for: level) {
view.insertSubview(controller.view, belowSubview: topLevelSubview) view.insertSubview(controller.view, belowSubview: topLevelSubview)
} else { } else {
if let volumeControlStatusBarNodeView = strongSelf.volumeControlStatusBarNodeView { view.addSubview(controller.view)
view.insertSubview(controller.view, belowSubview: volumeControlStatusBarNodeView)
} else {
view.addSubview(controller.view)
}
} }
} }
(controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(false) (controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(false)
view.layer.invalidateUpTheTree() view.layer.invalidateUpTheTree()
strongSelf.updateViews()
controller.viewWillAppear(false) controller.viewWillAppear(false)
if let controller = controller as? PresentableController { if let controller = controller as? PresentableController {
controller.viewDidAppear(completion: { [weak self] in controller.viewDidAppear(completion: { [weak self] in
@ -210,8 +224,18 @@ public final class PresentationContext {
controller.viewDidAppear(false) controller.viewDidAppear(false)
strongSelf.notifyAccessibilityScreenChanged() strongSelf.notifyAccessibilityScreenChanged()
} }
if controller.isModalWhenInOverlay, case .regular = layout.metrics.widthClass {
let springDuration: Double = 0.52
let springDamping: CGFloat = 110.0
controller.view.layer.animateSpring(from: NSValue(cgPoint: CGPoint(x: 0.0, y: layout.size.height - controllerFrame.minY)), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: springDuration, initialVelocity: 0.0, damping: springDamping, additive: true)
strongSelf.dimView?.frame = CGRect(origin: CGPoint(), size: layout.size)
strongSelf.dimView?.alpha = 1.0
strongSelf.dimView?.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2)
}
} }
strongSelf.updateViews()
} }
})) }))
} else { } else {
@ -225,12 +249,29 @@ public final class PresentationContext {
} }
private func dismiss(_ controller: ContainableController) { private func dismiss(_ controller: ContainableController) {
if let index = self.controllers.index(where: { $0.0 === controller }) { if let index = self.controllers.firstIndex(where: { $0.0 === controller }) {
self.controllers.remove(at: index) self.controllers.remove(at: index)
controller.viewWillDisappear(false) if controller.isModalWhenInOverlay, let layout = self.layout, case .regular = layout.metrics.widthClass {
controller.view.removeFromSuperview() let (controllerLayout, controllerFrame) = self.layoutForController(containerLayout: layout, controller: controller)
controller.viewDidDisappear(false)
self.updateViews() let springDuration: Double = 0.52
let springDamping: CGFloat = 110.0
controller.view.layer.animateSpring(from: NSValue(cgPoint: CGPoint()), to: NSValue(cgPoint: CGPoint(x: 0.0, y: layout.size.height - controllerFrame.minY)), keyPath: "position", duration: springDuration, initialVelocity: 0.0, damping: springDamping, removeOnCompletion: false, additive: true, completion: { finished in
controller.viewWillDisappear(false)
controller.view.removeFromSuperview()
controller.viewDidDisappear(false)
self.updateViews()
})
} else {
controller.viewWillDisappear(false)
controller.view.removeFromSuperview()
controller.viewDidDisappear(false)
self.updateViews()
}
let previousAlpha = self.dimView?.alpha ?? 0.0
self.dimView?.alpha = 0.0
self.dimView?.layer.animateAlpha(from: previousAlpha, to: 0.0, duration: 0.2)
} }
} }
@ -241,8 +282,11 @@ public final class PresentationContext {
if wasReady != self.ready { if wasReady != self.ready {
self.readyChanged(wasReady: wasReady) self.readyChanged(wasReady: wasReady)
} else if self.ready { } else if self.ready {
self.dimView?.frame = CGRect(origin: CGPoint(), size: layout.size)
for (controller, _) in self.controllers { for (controller, _) in self.controllers {
controller.containerLayoutUpdated(layout, transition: transition) let (controllerLayout, controllerFrame) = self.layoutForController(containerLayout: layout, controller: controller)
controller.view.frame = controllerFrame
controller.containerLayoutUpdated(controllerLayout, transition: transition)
} }
} }
} }
@ -255,21 +299,31 @@ public final class PresentationContext {
} }
} }
var dimView: UIView?
private func addViews() { private func addViews() {
if let view = self.view, let layout = self.layout { if let view = self.view, let layout = self.layout {
let dimView: UIView
if let currentDimView = self.dimView {
dimView = currentDimView
} else {
dimView = UIView()
dimView.alpha = 0.0
dimView.backgroundColor = UIColor(rgb: 0x000000, alpha: 0.4)
self.dimView = dimView
}
view.addSubview(dimView)
for (controller, _) in self.controllers { for (controller, _) in self.controllers {
controller.viewWillAppear(false) controller.viewWillAppear(false)
if let topLevelSubview = self.topLevelSubview { if let topLevelSubview = self.topLevelSubview {
view.insertSubview(controller.view, belowSubview: topLevelSubview) view.insertSubview(controller.view, belowSubview: topLevelSubview)
} else { } else {
if let volumeControlStatusBarNodeView = self.volumeControlStatusBarNodeView { view.addSubview(controller.view)
view.insertSubview(controller.view, belowSubview: volumeControlStatusBarNodeView)
} else {
view.addSubview(controller.view)
}
} }
controller.view.frame = CGRect(origin: CGPoint(), size: layout.size) let (controllerLayout, controllerFrame) = self.layoutForController(containerLayout: layout, controller: controller)
controller.containerLayoutUpdated(layout, transition: .immediate) controller.view.frame = controllerFrame
controller.containerLayoutUpdated(controllerLayout, transition: .immediate)
if let controller = controller as? PresentableController { if let controller = controller as? PresentableController {
controller.viewDidAppear(completion: { [weak self] in controller.viewDidAppear(completion: { [weak self] in
self?.notifyAccessibilityScreenChanged() self?.notifyAccessibilityScreenChanged()
@ -291,10 +345,18 @@ public final class PresentationContext {
} }
} }
private weak var currentModalController: ContainableController?
private func updateViews() { private func updateViews() {
self.hasOpaqueOverlay = self.currentlyBlocksBackgroundWhenInOverlay self.hasOpaqueOverlay = self.currentlyBlocksBackgroundWhenInOverlay
var modalController: ContainableController?
var topHasOpaque = false var topHasOpaque = false
for (controller, _) in self.controllers.reversed() { for (controller, _) in self.controllers.reversed() {
if controller.isModalWhenInOverlay {
if modalController == nil {
modalController = controller
}
}
if topHasOpaque { if topHasOpaque {
controller.displayNode.accessibilityElementsHidden = true controller.displayNode.accessibilityElementsHidden = true
} else { } else {
@ -304,16 +366,51 @@ public final class PresentationContext {
controller.displayNode.accessibilityElementsHidden = false controller.displayNode.accessibilityElementsHidden = false
} }
} }
if self.currentModalController !== modalController {
if let currentModalController = self.currentModalController {
currentModalController.updateTransitionWhenPresentedAsModal = nil
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
currentModalController.displayNode.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner]
}
currentModalController.displayNode.layer.cornerRadius = 0.0
}
self.currentModalController = modalController
if let modalController = modalController {
if #available(iOSApplicationExtension 11.0, iOS 11.0, *) {
if let layout = self.layout, case .regular = layout.metrics.widthClass {
modalController.displayNode.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner, .layerMinXMaxYCorner, .layerMaxXMaxYCorner]
} else {
modalController.displayNode.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
}
}
modalController.displayNode.layer.cornerRadius = 10.0
modalController.updateTransitionWhenPresentedAsModal = { [weak self, weak modalController] value, transition in
guard let strongSelf = self, let modalController = modalController, modalController === strongSelf.currentModalController else {
return
}
if strongSelf.modalPresentationValue != value {
strongSelf.modalPresentationValue = value
strongSelf.updateModalTransition?(value, transition)
}
}
} else {
if self.modalPresentationValue != 0.0 {
self.modalPresentationValue = 0.0
self.updateModalTransition?(0.0, .animated(duration: 0.3, curve: .spring))
}
}
}
} }
private func notifyAccessibilityScreenChanged() { private func notifyAccessibilityScreenChanged() {
UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: nil) UIAccessibility.post(notification: UIAccessibility.Notification.screenChanged, argument: nil)
} }
func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { func hitTest(view: UIView, point: CGPoint, with event: UIEvent?) -> UIView? {
for (controller, _) in self.controllers.reversed() { for (controller, _) in self.controllers.reversed() {
if controller.isViewLoaded { if controller.isViewLoaded {
if let result = controller.view.hitTest(point, with: event) { if let result = controller.view.hitTest(view.convert(point, to: controller.view), with: event) {
return result return result
} }
} }

View File

@ -665,7 +665,7 @@ public class Window1 {
} }
} }
if let result = self.presentationContext.hitTest(point, with: event) { if let result = self.presentationContext.hitTest(view: self.hostView.containerView, point: point, with: event) {
return result return result
} }
return self.viewController?.view.hitTest(point, with: event) return self.viewController?.view.hitTest(point, with: event)

View File

@ -402,7 +402,7 @@ public class ItemListDisclosureItemNode: ListViewItemNode, ItemListItemNode {
strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: contentSize.height + min(insets.top, separatorHeight) + min(insets.bottom, separatorHeight))) strongSelf.backgroundNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: contentSize.height + min(insets.top, separatorHeight) + min(insets.bottom, separatorHeight)))
strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0) strongSelf.maskNode.frame = strongSelf.backgroundNode.frame.insetBy(dx: params.leftInset, dy: 0.0)
strongSelf.topStripeNode.frame = CGRect(origin: CGPoint(x: leftInset, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: separatorHeight)) strongSelf.topStripeNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -min(insets.top, separatorHeight)), size: CGSize(width: params.width, height: separatorHeight))
strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height - separatorHeight), size: CGSize(width: params.width - bottomStripeInset, height: separatorHeight)) strongSelf.bottomStripeNode.frame = CGRect(origin: CGPoint(x: bottomStripeInset, y: contentSize.height - separatorHeight), size: CGSize(width: params.width - bottomStripeInset, height: separatorHeight))
} }

View File

@ -50,6 +50,8 @@ public final class ThemePreviewController: ViewController {
super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationTheme: self.previewTheme, presentationStrings: self.presentationData.strings)) super.init(navigationBarPresentationData: NavigationBarPresentationData(presentationTheme: self.previewTheme, presentationStrings: self.presentationData.strings))
self.isModalWhenInOverlay = true
let themeName: String let themeName: String
if case let .theme(theme) = source { if case let .theme(theme) = source {
themeName = theme.title themeName = theme.title

View File

@ -45,6 +45,8 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
private var chatNodes: [ListViewItemNode]? private var chatNodes: [ListViewItemNode]?
private let maskNode: ASImageNode private let maskNode: ASImageNode
private let separatorNode: ASDisplayNode
private let chatContainerNode: ASDisplayNode private let chatContainerNode: ASDisplayNode
private let instantChatBackgroundNode: WallpaperBackgroundNode private let instantChatBackgroundNode: WallpaperBackgroundNode
private let remoteChatBackgroundNode: TransformImageNode private let remoteChatBackgroundNode: TransformImageNode
@ -113,6 +115,9 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
self.maskNode.displayWithoutProcessing = true self.maskNode.displayWithoutProcessing = true
self.maskNode.contentMode = .scaleToFill self.maskNode.contentMode = .scaleToFill
self.separatorNode = ASDisplayNode()
self.separatorNode.backgroundColor = previewTheme.rootController.tabBar.separatorColor
super.init() super.init()
self.setViewBlock({ self.setViewBlock({
@ -145,6 +150,8 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
self.chatContainerNode.addSubnode(self.instantChatBackgroundNode) self.chatContainerNode.addSubnode(self.instantChatBackgroundNode)
self.chatContainerNode.addSubnode(self.remoteChatBackgroundNode) self.chatContainerNode.addSubnode(self.remoteChatBackgroundNode)
self.addSubnode(self.separatorNode)
self.toolbarNode.cancel = { self.toolbarNode.cancel = {
dismiss() dismiss()
} }
@ -299,13 +306,19 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
} }
func animateIn(completion: (() -> Void)? = nil) { func animateIn(completion: (() -> Void)? = nil) {
self.layer.animatePosition(from: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), to: self.layer.position, duration: 0.5, timingFunction: kCAMediaTimingFunctionSpring) if let (layout, _) = self.validLayout, case .compact = layout.metrics.widthClass {
self.layer.animatePosition(from: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), to: self.layer.position, duration: 0.5, timingFunction: kCAMediaTimingFunctionSpring)
}
} }
func animateOut(completion: (() -> Void)? = nil) { func animateOut(completion: (() -> Void)? = nil) {
self.layer.animatePosition(from: self.layer.position, to: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, completion: { _ in if let (layout, _) = self.validLayout, case .compact = layout.metrics.widthClass {
self.layer.animatePosition(from: self.layer.position, to: CGPoint(x: self.layer.position.x, y: self.layer.position.y + self.layer.bounds.size.height), duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, completion: { _ in
completion?()
})
} else {
completion?() completion?()
}) }
} }
private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) { private func updateChatsLayout(layout: ContainerViewLayout, topInset: CGFloat, transition: ContainedViewLayoutTransition) {
@ -350,14 +363,21 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
items.append(ChatListItem(presentationData: chatListPresentationData, context: self.context, peerGroupId: .root, index: ChatListIndex(pinningIndex: nil, messageIndex: MessageIndex(id: MessageId(peerId: peer7.id, namespace: 0, id: 0), timestamp: timestamp - 420)), content: .peer(message: Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer7.id, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: timestamp - 420, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peer6, text: self.presentationData.strings.Appearance_ThemePreview_ChatList_7_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), peer: RenderedPeer(peer: peer7), combinedReadState: nil, notificationSettings: nil, presence: nil, summaryInfo: ChatListMessageTagSummaryInfo(tagSummaryCount: nil, actionsSummaryCount: nil), embeddedState: nil, inputActivities: nil, isAd: false, ignoreUnreadBadge: false), editing: false, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: false, hiddenOffset: false, interaction: interaction)) items.append(ChatListItem(presentationData: chatListPresentationData, context: self.context, peerGroupId: .root, index: ChatListIndex(pinningIndex: nil, messageIndex: MessageIndex(id: MessageId(peerId: peer7.id, namespace: 0, id: 0), timestamp: timestamp - 420)), content: .peer(message: Message(stableId: 0, stableVersion: 0, id: MessageId(peerId: peer7.id, namespace: 0, id: 1), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: timestamp - 420, flags: [.Incoming], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peer6, text: self.presentationData.strings.Appearance_ThemePreview_ChatList_7_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []), peer: RenderedPeer(peer: peer7), combinedReadState: nil, notificationSettings: nil, presence: nil, summaryInfo: ChatListMessageTagSummaryInfo(tagSummaryCount: nil, actionsSummaryCount: nil), embeddedState: nil, inputActivities: nil, isAd: false, ignoreUnreadBadge: false), editing: false, hasActiveRevealControls: false, selected: false, header: nil, enableContextActions: false, hiddenOffset: false, interaction: interaction))
let params = ListViewItemLayoutParams(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right) let width: CGFloat
if case .regular = layout.metrics.widthClass {
width = layout.size.width / 2.0
} else {
width = layout.size.width
}
let params = ListViewItemLayoutParams(width: width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right)
if let chatNodes = self.chatNodes { if let chatNodes = self.chatNodes {
for i in 0 ..< items.count { for i in 0 ..< items.count {
let itemNode = chatNodes[i] let itemNode = chatNodes[i]
items[i].updateNode(async: { $0() }, node: { items[i].updateNode(async: { $0() }, node: {
return itemNode return itemNode
}, params: params, previousItem: i == 0 ? nil : items[i - 1], nextItem: i == (items.count - 1) ? nil : items[i + 1], animation: .None, completion: { (layout, apply) in }, params: params, previousItem: i == 0 ? nil : items[i - 1], nextItem: i == (items.count - 1) ? nil : items[i + 1], animation: .None, completion: { (layout, apply) in
let nodeFrame = CGRect(origin: itemNode.frame.origin, size: CGSize(width: layout.size.width, height: layout.size.height)) let nodeFrame = CGRect(origin: itemNode.frame.origin, size: CGSize(width: width, height: layout.size.height))
itemNode.contentSize = layout.contentSize itemNode.contentSize = layout.contentSize
itemNode.insets = layout.insets itemNode.insets = layout.insets
@ -419,14 +439,21 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
let message4 = Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_1_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: []) let message4 = Message(stableId: 2, stableVersion: 0, id: MessageId(peerId: otherPeerId, namespace: 0, id: 2), globallyUniqueId: nil, groupingKey: nil, groupInfo: nil, timestamp: 66001, flags: [], tags: [], globalTags: [], localTags: [], forwardInfo: nil, author: peers[otherPeerId], text: self.presentationData.strings.Appearance_ThemePreview_Chat_1_Text, attributes: [], media: [], peers: peers, associatedMessages: messages, associatedMessageIds: [])
items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message4, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: nil)) items.append(self.context.sharedContext.makeChatMessagePreviewItem(context: self.context, message: message4, theme: self.previewTheme, strings: self.presentationData.strings, wallpaper: self.previewTheme.chat.defaultWallpaper, fontSize: self.presentationData.fontSize, dateTimeFormat: self.presentationData.dateTimeFormat, nameOrder: self.presentationData.nameDisplayOrder, forcedResourceStatus: nil))
let params = ListViewItemLayoutParams(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right) let width: CGFloat
if case .regular = layout.metrics.widthClass {
width = layout.size.width / 2.0
} else {
width = layout.size.width
}
let params = ListViewItemLayoutParams(width: width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right)
if let messageNodes = self.messageNodes { if let messageNodes = self.messageNodes {
for i in 0 ..< items.count { for i in 0 ..< items.count {
let itemNode = messageNodes[i] let itemNode = messageNodes[i]
items[i].updateNode(async: { $0() }, node: { items[i].updateNode(async: { $0() }, node: {
return itemNode return itemNode
}, params: params, previousItem: i == 0 ? nil : items[i - 1], nextItem: i == (items.count - 1) ? nil : items[i + 1], animation: .None, completion: { (layout, apply) in }, params: params, previousItem: i == 0 ? nil : items[i - 1], nextItem: i == (items.count - 1) ? nil : items[i + 1], animation: .None, completion: { (layout, apply) in
let nodeFrame = CGRect(origin: itemNode.frame.origin, size: CGSize(width: layout.size.width, height: layout.size.height)) let nodeFrame = CGRect(origin: itemNode.frame.origin, size: CGSize(width: width, height: layout.size.height))
itemNode.contentSize = layout.contentSize itemNode.contentSize = layout.contentSize
itemNode.insets = layout.insets itemNode.insets = layout.insets
@ -463,23 +490,49 @@ final class ThemePreviewControllerNode: ASDisplayNode, UIScrollViewDelegate {
} }
func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) { func containerLayoutUpdated(_ layout: ContainerViewLayout, navigationBarHeight: CGFloat, transition: ContainedViewLayoutTransition) {
self.validLayout = (layout, navigationBarHeight)
let bounds = CGRect(origin: CGPoint(), size: layout.size) let bounds = CGRect(origin: CGPoint(), size: layout.size)
self.scrollNode.frame = bounds self.scrollNode.frame = bounds
let toolbarHeight = 49.0 + layout.intrinsicInsets.bottom let toolbarHeight = 49.0 + layout.intrinsicInsets.bottom
self.chatListBackgroundNode.frame = CGRect(x: bounds.width, y: 0.0, width: bounds.width, height: bounds.height) self.chatListBackgroundNode.frame = CGRect(x: bounds.width, y: 0.0, width: bounds.width, height: bounds.height)
self.chatContainerNode.frame = CGRect(x: 0.0, y: 0.0, width: bounds.width, height: bounds.height) self.chatContainerNode.frame = CGRect(x: 0.0, y: 0.0, width: bounds.width, height: bounds.height)
let bottomInset: CGFloat
if case .regular = layout.metrics.widthClass {
self.chatListBackgroundNode.frame = CGRect(x: 0.0, y: 0.0, width: bounds.width / 2.0, height: bounds.height)
self.chatContainerNode.frame = CGRect(x: bounds.width / 2.0, y: 0.0, width: bounds.width / 2.0, height: bounds.height)
self.scrollNode.view.contentSize = CGSize(width: bounds.width, height: bounds.height)
self.pageControlNode.isHidden = true
self.pageControlBackgroundNode.isHidden = true
self.separatorNode.isHidden = false
self.separatorNode.frame = CGRect(x: bounds.width / 2.0, y: 0.0, width: UIScreenPixel, height: bounds.height - toolbarHeight)
bottomInset = 0.0
} else {
self.chatListBackgroundNode.frame = CGRect(x: bounds.width, y: 0.0, width: bounds.width, height: bounds.height)
self.chatContainerNode.frame = CGRect(x: 0.0, y: 0.0, width: bounds.width, height: bounds.height)
self.scrollNode.view.contentSize = CGSize(width: bounds.width * 2.0, height: bounds.height)
self.pageControlNode.isHidden = false
self.pageControlBackgroundNode.isHidden = false
self.separatorNode.isHidden = true
bottomInset = 66.0
}
self.instantChatBackgroundNode.frame = self.chatContainerNode.bounds self.instantChatBackgroundNode.frame = self.chatContainerNode.bounds
self.remoteChatBackgroundNode.frame = self.chatContainerNode.bounds self.remoteChatBackgroundNode.frame = self.chatContainerNode.bounds
self.blurredNode.frame = self.chatContainerNode.bounds self.blurredNode.frame = self.chatContainerNode.bounds
self.scrollNode.view.contentSize = CGSize(width: bounds.width * 2.0, height: bounds.height)
transition.updateFrame(node: self.toolbarNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - toolbarHeight), size: CGSize(width: layout.size.width, height: 49.0 + layout.intrinsicInsets.bottom))) transition.updateFrame(node: self.toolbarNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - toolbarHeight), size: CGSize(width: layout.size.width, height: 49.0 + layout.intrinsicInsets.bottom)))
self.toolbarNode.updateLayout(size: CGSize(width: layout.size.width, height: 49.0), layout: layout, transition: transition) self.toolbarNode.updateLayout(size: CGSize(width: layout.size.width, height: 49.0), layout: layout, transition: transition)
self.updateChatsLayout(layout: layout, topInset: navigationBarHeight, transition: transition) self.updateChatsLayout(layout: layout, topInset: navigationBarHeight, transition: transition)
self.updateMessagesLayout(layout: layout, bottomInset: self.isPreview ? 0.0 : (toolbarHeight + 66.0), transition: transition) self.updateMessagesLayout(layout: layout, bottomInset: self.isPreview ? 0.0 : (toolbarHeight + bottomInset), transition: transition)
let pageControlSize = self.pageControlNode.measure(CGSize(width: bounds.width, height: 100.0)) let pageControlSize = self.pageControlNode.measure(CGSize(width: bounds.width, height: 100.0))
let pageControlFrame = CGRect(origin: CGPoint(x: floor((bounds.width - pageControlSize.width) / 2.0), y: layout.size.height - toolbarHeight - 42.0), size: pageControlSize) let pageControlFrame = CGRect(origin: CGPoint(x: floor((bounds.width - pageControlSize.width) / 2.0), y: layout.size.height - toolbarHeight - 42.0), size: pageControlSize)

View File

@ -120,7 +120,7 @@ private func makeDefaultDayPresentationTheme(accentColor: UIColor, serviceBackgr
itemDestructiveColor: destructiveColor, itemDestructiveColor: destructiveColor,
itemPlaceholderTextColor: UIColor(rgb: 0xc8c8ce), itemPlaceholderTextColor: UIColor(rgb: 0xc8c8ce),
itemBlocksBackgroundColor: .white, itemBlocksBackgroundColor: .white,
itemHighlightedBackgroundColor: UIColor(rgb: 0xd9d9d9), itemHighlightedBackgroundColor: UIColor(rgb: 0xe5e5ea),
itemBlocksSeparatorColor: UIColor(rgb: 0xc8c7cc), itemBlocksSeparatorColor: UIColor(rgb: 0xc8c7cc),
itemPlainSeparatorColor: UIColor(rgb: 0xc8c7cc), itemPlainSeparatorColor: UIColor(rgb: 0xc8c7cc),
disclosureArrowColor: UIColor(rgb: 0xbab9be), disclosureArrowColor: UIColor(rgb: 0xbab9be),
@ -163,7 +163,7 @@ private func makeDefaultDayPresentationTheme(accentColor: UIColor, serviceBackgr
itemSeparatorColor: UIColor(rgb: 0xc8c7cc), itemSeparatorColor: UIColor(rgb: 0xc8c7cc),
itemBackgroundColor: .white, itemBackgroundColor: .white,
pinnedItemBackgroundColor: UIColor(rgb: 0xf7f7f7), pinnedItemBackgroundColor: UIColor(rgb: 0xf7f7f7),
itemHighlightedBackgroundColor: UIColor(rgb: 0xd9d9d9), itemHighlightedBackgroundColor: UIColor(rgb: 0xe5e5ea),
itemSelectedBackgroundColor: UIColor(rgb: 0xe9f0fa), itemSelectedBackgroundColor: UIColor(rgb: 0xe9f0fa),
titleColor: .black, titleColor: .black,
secretTitleColor: secretColor, secretTitleColor: secretColor,

View File

@ -4210,35 +4210,37 @@ public final class PresentationStrings {
public var Channel_Setup_TypePublicHelp: String { return self._s[3710]! } public var Channel_Setup_TypePublicHelp: String { return self._s[3710]! }
public var Passport_Identity_EditInternalPassport: String { return self._s[3711]! } public var Passport_Identity_EditInternalPassport: String { return self._s[3711]! }
public var PhotoEditor_Skip: String { return self._s[3712]! } public var PhotoEditor_Skip: String { return self._s[3712]! }
public func Map_ETAMinutes(_ value: Int32) -> String { public func StickerPack_AddMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[0 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { public func SharedMedia_File(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, _1, _2) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[1 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PUSH_CHANNEL_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { public func ForwardedStickers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, _1, _2) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[2 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Call_ShortMinutes(_ value: Int32) -> String { public func StickerPack_RemoveStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[3 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String { public func LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[4 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func ForwardedContacts(_ value: Int32) -> String { public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[5 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Media_SharePhoto(_ value: Int32) -> String { public func ForwardedLocations(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[6 * 6 + Int(form.rawValue)]!, stringValue)
@ -4248,518 +4250,516 @@ public final class PresentationStrings {
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[7 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func MessageTimer_Hours(_ value: Int32) -> String { public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[8 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func MuteFor_Days(_ value: Int32) -> String { public func ForwardedPhotos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[9 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func SharedMedia_Video(_ value: Int32) -> String { public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Contacts_ImportersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, stringValue)
}
public func QuickSend_Photos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Months(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[16 * 6 + Int(form.rawValue)]!, _1, _2) return String(format: self._ps[10 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func MessageTimer_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue)
}
public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Years(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedVideoMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue)
}
public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notifications_ExceptionMuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Call_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedVideos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_LiveLocationMembersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue)
}
public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, stringValue)
}
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[33 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Notifications_Exceptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue)
}
public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[35 * 6 + Int(form.rawValue)]!, stringValue)
}
public func InviteText_ContactsCountText(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue)
}
public func StickerPack_AddStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_Link(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[38 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Media_ShareVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func MessagePoll_VotedCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedGifs(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedStickers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Theme_UsersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue)
}
public func UserCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortDays(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue)
}
public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[55 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notification_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, stringValue)
}
public func StickerPack_StickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue)
}
public func VoiceOver_Chat_PollVotes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue)
}
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[64 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func SharedMedia_Generic(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Call_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue)
}
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[69 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Passport_Scans(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue)
}
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[71 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Conversation_StatusOnline(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func SharedMedia_Photo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_StatusSubscribers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_SelectedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_File(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Invitation_Members(_ value: Int32) -> String { public func Invitation_Members(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[11 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func ForwardedAudios(_ value: Int32) -> String { public func MessageTimer_Years(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[12 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_StatusMembers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[81 * 6 + Int(form.rawValue)]!, stringValue)
}
public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHANNEL_MESSAGE_FWDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Watch_UserInfo_Mute(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String { public func ForwardedAuthorsOthers(_ selector: Int32, _ _0: String, _ _1: String) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[86 * 6 + Int(form.rawValue)]!, _0, _1) return String(format: self._ps[13 * 6 + Int(form.rawValue)]!, _0, _1)
} }
public func AttachmentMenu_SendGif(_ value: Int32) -> String { public func MuteFor_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[14 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func StickerPack_RemoveStickerCount(_ value: Int32) -> String { public func LiveLocationUpdated_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[88 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[15 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String { public func PUSH_MESSAGE_FWDS(_ 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 Notifications_Exceptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[17 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[18 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { public func PUSH_CHANNEL_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, _1, _2) return String(format: self._ps[19 * 6 + Int(form.rawValue)]!, _1, _2)
} }
public func MessageTimer_ShortMinutes(_ value: Int32) -> String { public func MessagePoll_VotedCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[20 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func StickerPack_AddMaskCount(_ value: Int32) -> String { public func MessageTimer_ShortDays(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[21 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Call_Seconds(_ value: Int32) -> String { public func PrivacyLastSeenSettings_AddUsers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[22 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Notification_GameScoreSimple(_ value: Int32) -> String { public func Conversation_StatusOnline(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[23 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func ForwardedPhotos(_ value: Int32) -> String { public func Passport_Scans(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[95 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[24 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String { public func MessageTimer_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[25 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String { public func Notification_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[26 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PUSH_CHANNEL_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String { public func ServiceMessage_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[27 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteFor_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedLocations(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String { public func Wallpaper_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[28 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String { public func ServiceMessage_GameScoreExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[29 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String { public func Conversation_StatusSubscribers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[30 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[31 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGES(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[32 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func ServiceMessage_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[33 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedAudios(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[34 * 6 + Int(form.rawValue)]!, stringValue)
}
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[35 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Notification_GameScoreSelfSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[36 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[37 * 6 + Int(form.rawValue)]!, stringValue)
}
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[38 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func MessageTimer_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[39 * 6 + Int(form.rawValue)]!, stringValue)
}
public func VoiceOver_Chat_ContactEmailCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[40 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[41 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func Map_ETAHours(_ value: Int32) -> String { public func Map_ETAHours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[42 * 6 + Int(form.rawValue)]!, stringValue)
}
public func StickerPack_AddStickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[43 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_SelectedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[44 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_Video(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[45 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notifications_ExceptionMuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[46 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[47 * 6 + Int(form.rawValue)]!, stringValue)
}
public func CreatePoll_AddMoreOptions(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[48 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_Generic(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[49 * 6 + Int(form.rawValue)]!, stringValue)
}
public func AttachmentMenu_SendGif(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[50 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteFor_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[51 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Contacts_ImportersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[52 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ServiceMessage_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[53 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Watch_LastSeen_HoursAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[54 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHANNEL_MESSAGE_FWDS(_ 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 ForwardedPolls(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[56 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_Link(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[57 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedVideos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[58 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGE_PHOTOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[59 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func Forward_ConfirmMultipleFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[60 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Call_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[61 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedVideoMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[62 * 6 + Int(form.rawValue)]!, stringValue)
}
public func UserCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[63 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Chat_DeleteMessagesConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[64 * 6 + Int(form.rawValue)]!, stringValue)
}
public func SharedMedia_Photo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[65 * 6 + Int(form.rawValue)]!, stringValue)
}
public func QuickSend_Photos(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[66 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PasscodeSettings_FailedAttempts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[67 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortWeeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[68 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHANNEL_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 VoiceOver_Chat_PollVotes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[70 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Call_ShortSeconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[71 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notification_GameScoreSimple(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[72 * 6 + Int(form.rawValue)]!, stringValue)
}
public func StickerPack_StickerCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[73 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Map_ETAMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[74 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[75 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[76 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Call_Minutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[77 * 6 + Int(form.rawValue)]!, stringValue)
}
public func GroupInfo_ParticipantCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[78 * 6 + Int(form.rawValue)]!, stringValue)
}
public func LiveLocation_MenuChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[79 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Days(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[80 * 6 + Int(form.rawValue)]!, stringValue)
}
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[81 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func InviteText_ContactsCountText(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[82 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Call_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[83 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Media_SharePhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[84 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Media_ShareVideo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[85 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGE_ROUNDS(_ 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 ForwardedMessages(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[87 * 6 + Int(form.rawValue)]!, stringValue)
}
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[88 * 6 + Int(form.rawValue)]!, _2, _1, _3)
} }
public func Media_ShareItem(_ value: Int32) -> String { public func Media_ShareItem(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[89 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[90 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_MESSAGE_VIDEOS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[91 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func AttachmentMenu_SendPhoto(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[92 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Watch_LastSeen_MinutesAgo(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[93 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_ShortMinutes(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[94 * 6 + Int(form.rawValue)]!, stringValue)
}
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[95 * 6 + Int(form.rawValue)]!, _2, _1, _3)
}
public func Notifications_ExceptionMuteExpires_Hours(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[96 * 6 + Int(form.rawValue)]!, stringValue)
}
public func DialogList_LiveLocationChatsCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[97 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ChatList_DeleteConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[98 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Months(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[99 * 6 + Int(form.rawValue)]!, stringValue)
}
public func VoiceOver_Chat_PollOptionCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[100 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Notification_GameScoreSelfExtended(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[101 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Seconds(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[102 * 6 + Int(form.rawValue)]!, stringValue)
}
public func PUSH_CHANNEL_MESSAGE_ROUNDS(_ selector: Int32, _ _1: String, _ _2: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector)
return String(format: self._ps[103 * 6 + Int(form.rawValue)]!, _1, _2)
}
public func ForwardedGifs(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[104 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Theme_UsersCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[105 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Conversation_StatusMembers(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[106 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String { public func SharedMedia_DeleteItemsConfirmation(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[107 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedFiles(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[108 * 6 + Int(form.rawValue)]!, stringValue)
}
public func Watch_UserInfo_Mute(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[109 * 6 + Int(form.rawValue)]!, stringValue)
}
public func MessageTimer_Weeks(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[110 * 6 + Int(form.rawValue)]!, stringValue)
}
public func ForwardedContacts(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[111 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func PUSH_CHAT_MESSAGE_VIDEOS(_ selector: Int32, _ _2: String, _ _1: String, _ _3: Int32) -> String { public func VoiceOver_Chat_ContactPhoneNumberCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, selector) let form = presentationStringsPluralizationForm(self.lc, value)
return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, _2, _1, _3) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[112 * 6 + Int(form.rawValue)]!, stringValue)
} }
public func ForwardedPolls(_ value: Int32) -> String { public func StickerPack_RemoveMaskCount(_ value: Int32) -> String {
let form = presentationStringsPluralizationForm(self.lc, value) let form = presentationStringsPluralizationForm(self.lc, value)
let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator) let stringValue = presentationStringsFormattedNumber(value, self.groupingSeparator)
return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue) return String(format: self._ps[113 * 6 + Int(form.rawValue)]!, stringValue)

View File

@ -44,7 +44,7 @@ class ChatHoleItemNode: ListViewItemNode {
let backgroundNode: ASImageNode let backgroundNode: ASImageNode
let labelNode: TextNode let labelNode: TextNode
private let layoutConstants = ChatMessageItemLayoutConstants() private let layoutConstants = ChatMessageItemLayoutConstants.default
init() { init() {
self.backgroundNode = ASImageNode() self.backgroundNode = ASImageNode()

View File

@ -339,6 +339,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
let currentItem = self.item let currentItem = self.item
return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in
let layoutConstants = chatMessageItemLayoutConstants(layoutConstants, params: params)
let incoming = item.message.effectivelyIncoming(item.context.account.peerId) let incoming = item.message.effectivelyIncoming(item.context.account.peerId)
var imageSize: CGSize = CGSize(width: 200.0, height: 200.0) var imageSize: CGSize = CGSize(width: 200.0, height: 200.0)
var isEmoji = false var isEmoji = false

View File

@ -584,6 +584,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePrevewItemNode
let weakSelf = Weak(self) let weakSelf = Weak(self)
return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in
let layoutConstants = chatMessageItemLayoutConstants(layoutConstants, params: params)
return ChatMessageBubbleItemNode.beginLayout(selfReference: weakSelf, item, params, mergedTop, mergedBottom, dateHeaderAtBottom, return ChatMessageBubbleItemNode.beginLayout(selfReference: weakSelf, item, params, mergedTop, mergedBottom, dateHeaderAtBottom,
currentContentClassesPropertiesAndLayouts: currentContentClassesPropertiesAndLayouts, currentContentClassesPropertiesAndLayouts: currentContentClassesPropertiesAndLayouts,
authorNameLayout: authorNameLayout, authorNameLayout: authorNameLayout,

View File

@ -113,6 +113,7 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView {
let currentForwardInfo = self.appliedForwardInfo let currentForwardInfo = self.appliedForwardInfo
return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in
let layoutConstants = chatMessageItemLayoutConstants(layoutConstants, params: params)
let incoming = item.message.effectivelyIncoming(item.context.account.peerId) let incoming = item.message.effectivelyIncoming(item.context.account.peerId)
let avatarInset: CGFloat let avatarInset: CGFloat

View File

@ -78,17 +78,40 @@ struct ChatMessageItemLayoutConstants {
let instantVideo: ChatMessageItemInstantVideoConstants let instantVideo: ChatMessageItemInstantVideoConstants
let wallpapers: ChatMessageItemWallpaperLayoutConstants let wallpapers: ChatMessageItemWallpaperLayoutConstants
init() { static var `default`: ChatMessageItemLayoutConstants {
self.avatarDiameter = 37.0 return self.compact
self.timestampHeaderHeight = 34.0 }
fileprivate static var compact: ChatMessageItemLayoutConstants {
let bubble = ChatMessageItemBubbleLayoutConstants(edgeInset: 4.0, defaultSpacing: 2.0 + UIScreenPixel, mergedSpacing: 1.0, maximumWidthFill: ChatMessageItemWidthFill(compactInset: 36.0, compactWidthBoundary: 500.0, freeMaximumFillFactor: 0.85), minimumSize: CGSize(width: 40.0, height: 35.0), contentInsets: UIEdgeInsets(top: 0.0, left: 6.0, bottom: 0.0, right: 0.0), borderInset: UIScreenPixel, strokeInsets: UIEdgeInsets(top: 1.0 - UIScreenPixel, left: 1.0 - UIScreenPixel, bottom: 1.0 - UIScreenPixel, right: 1.0 - UIScreenPixel))
let text = ChatMessageItemTextLayoutConstants(bubbleInsets: UIEdgeInsets(top: 6.0 + UIScreenPixel, left: 12.0, bottom: 6.0 - UIScreenPixel, right: 12.0))
let image = ChatMessageItemImageLayoutConstants(bubbleInsets: UIEdgeInsets(top: 1.0 + UIScreenPixel, left: 1.0 + UIScreenPixel, bottom: 1.0 + UIScreenPixel, right: 1.0 + UIScreenPixel), statusInsets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 6.0, right: 6.0), defaultCornerRadius: 17.0, mergedCornerRadius: 5.0, contentMergedCornerRadius: 5.0, maxDimensions: CGSize(width: 300.0, height: 300.0), minDimensions: CGSize(width: 170.0, height: 74.0))
let video = ChatMessageItemVideoLayoutConstants(maxHorizontalHeight: 250.0, maxVerticalHeight: 360.0)
let file = ChatMessageItemFileLayoutConstants(bubbleInsets: UIEdgeInsets(top: 15.0, left: 9.0, bottom: 15.0, right: 12.0))
let instantVideo = ChatMessageItemInstantVideoConstants(insets: UIEdgeInsets(top: 4.0, left: 0.0, bottom: 4.0, right: 0.0), dimensions: CGSize(width: 212.0, height: 212.0))
let wallpapers = ChatMessageItemWallpaperLayoutConstants(maxTextWidth: 180.0)
self.bubble = ChatMessageItemBubbleLayoutConstants(edgeInset: 4.0, defaultSpacing: 2.0 + UIScreenPixel, mergedSpacing: 1.0, maximumWidthFill: ChatMessageItemWidthFill(compactInset: 36.0, compactWidthBoundary: 500.0, freeMaximumFillFactor: 0.85), minimumSize: CGSize(width: 40.0, height: 35.0), contentInsets: UIEdgeInsets(top: 0.0, left: 6.0, bottom: 0.0, right: 0.0), borderInset: UIScreenPixel, strokeInsets: UIEdgeInsets(top: 1.0 - UIScreenPixel, left: 1.0 - UIScreenPixel, bottom: 1.0 - UIScreenPixel, right: 1.0 - UIScreenPixel)) return ChatMessageItemLayoutConstants(avatarDiameter: 37.0, timestampHeaderHeight: 34.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers)
self.text = ChatMessageItemTextLayoutConstants(bubbleInsets: UIEdgeInsets(top: 6.0 + UIScreenPixel, left: 12.0, bottom: 6.0 - UIScreenPixel, right: 12.0)) }
self.image = ChatMessageItemImageLayoutConstants(bubbleInsets: UIEdgeInsets(top: 1.0 + UIScreenPixel, left: 1.0 + UIScreenPixel, bottom: 1.0 + UIScreenPixel, right: 1.0 + UIScreenPixel), statusInsets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 6.0, right: 6.0), defaultCornerRadius: 17.0, mergedCornerRadius: 5.0, contentMergedCornerRadius: 5.0, maxDimensions: CGSize(width: 300.0, height: 300.0), minDimensions: CGSize(width: 170.0, height: 74.0))
self.video = ChatMessageItemVideoLayoutConstants(maxHorizontalHeight: 250.0, maxVerticalHeight: 360.0) fileprivate static var regular: ChatMessageItemLayoutConstants {
self.file = ChatMessageItemFileLayoutConstants(bubbleInsets: UIEdgeInsets(top: 15.0, left: 9.0, bottom: 15.0, right: 12.0)) let bubble = ChatMessageItemBubbleLayoutConstants(edgeInset: 4.0, defaultSpacing: 2.0 + UIScreenPixel, mergedSpacing: 1.0, maximumWidthFill: ChatMessageItemWidthFill(compactInset: 36.0, compactWidthBoundary: 500.0, freeMaximumFillFactor: 0.65), minimumSize: CGSize(width: 40.0, height: 35.0), contentInsets: UIEdgeInsets(top: 0.0, left: 6.0, bottom: 0.0, right: 0.0), borderInset: UIScreenPixel, strokeInsets: UIEdgeInsets(top: 1.0 - UIScreenPixel, left: 1.0 - UIScreenPixel, bottom: 1.0 - UIScreenPixel, right: 1.0 - UIScreenPixel))
self.instantVideo = ChatMessageItemInstantVideoConstants(insets: UIEdgeInsets(top: 4.0, left: 0.0, bottom: 4.0, right: 0.0), dimensions: CGSize(width: 212.0, height: 212.0)) let text = ChatMessageItemTextLayoutConstants(bubbleInsets: UIEdgeInsets(top: 6.0 + UIScreenPixel, left: 12.0, bottom: 6.0 - UIScreenPixel, right: 12.0))
self.wallpapers = ChatMessageItemWallpaperLayoutConstants(maxTextWidth: 180.0) let image = ChatMessageItemImageLayoutConstants(bubbleInsets: UIEdgeInsets(top: 1.0 + UIScreenPixel, left: 1.0 + UIScreenPixel, bottom: 1.0 + UIScreenPixel, right: 1.0 + UIScreenPixel), statusInsets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 6.0, right: 6.0), defaultCornerRadius: 17.0, mergedCornerRadius: 5.0, contentMergedCornerRadius: 5.0, maxDimensions: CGSize(width: 440.0, height: 440.0), minDimensions: CGSize(width: 170.0, height: 74.0))
let video = ChatMessageItemVideoLayoutConstants(maxHorizontalHeight: 250.0, maxVerticalHeight: 360.0)
let file = ChatMessageItemFileLayoutConstants(bubbleInsets: UIEdgeInsets(top: 15.0, left: 9.0, bottom: 15.0, right: 12.0))
let instantVideo = ChatMessageItemInstantVideoConstants(insets: UIEdgeInsets(top: 4.0, left: 0.0, bottom: 4.0, right: 0.0), dimensions: CGSize(width: 212.0, height: 212.0))
let wallpapers = ChatMessageItemWallpaperLayoutConstants(maxTextWidth: 180.0)
return ChatMessageItemLayoutConstants(avatarDiameter: 37.0, timestampHeaderHeight: 34.0, bubble: bubble, image: image, video: video, text: text, file: file, instantVideo: instantVideo, wallpapers: wallpapers)
}
}
func chatMessageItemLayoutConstants(_ constants: (ChatMessageItemLayoutConstants, ChatMessageItemLayoutConstants), params: ListViewItemLayoutParams) -> ChatMessageItemLayoutConstants {
if params.width > 680.0 {
return constants.1
} else {
return constants.0
} }
} }
@ -97,8 +120,6 @@ enum ChatMessageItemBottomNeighbor {
case merged(semi: Bool) case merged(semi: Bool)
} }
let defaultChatMessageItemLayoutConstants = ChatMessageItemLayoutConstants()
enum ChatMessagePeekPreviewContent { enum ChatMessagePeekPreviewContent {
case media(Media) case media(Media)
case url(ASDisplayNode, CGRect, String, Bool) case url(ASDisplayNode, CGRect, String, Bool)
@ -607,7 +628,7 @@ final class ChatMessageAccessibilityData {
} }
public class ChatMessageItemView: ListViewItemNode { public class ChatMessageItemView: ListViewItemNode {
let layoutConstants = defaultChatMessageItemLayoutConstants let layoutConstants = (ChatMessageItemLayoutConstants.compact, ChatMessageItemLayoutConstants.regular)
var item: ChatMessageItem? var item: ChatMessageItem?
var accessibilityData: ChatMessageAccessibilityData? var accessibilityData: ChatMessageAccessibilityData?

View File

@ -141,6 +141,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView {
let currentItem = self.item let currentItem = self.item
return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in
let layoutConstants = chatMessageItemLayoutConstants(layoutConstants, params: params)
let incoming = item.message.effectivelyIncoming(item.context.account.peerId) let incoming = item.message.effectivelyIncoming(item.context.account.peerId)
var imageSize: CGSize = CGSize(width: 100.0, height: 100.0) var imageSize: CGSize = CGSize(width: 100.0, height: 100.0)
if let telegramFile = telegramFile { if let telegramFile = telegramFile {

View File

@ -61,7 +61,7 @@ class ChatUnreadItemNode: ListViewItemNode {
private var theme: ChatPresentationThemeData? private var theme: ChatPresentationThemeData?
private let layoutConstants = ChatMessageItemLayoutConstants() private let layoutConstants = ChatMessageItemLayoutConstants.default
init() { init() {
self.backgroundNode = ASImageNode() self.backgroundNode = ASImageNode()

View File

@ -44,7 +44,11 @@ public class ComposeController: ViewController {
self.title = self.presentationData.strings.Compose_NewMessage self.title = self.presentationData.strings.Compose_NewMessage
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: self.presentationData.strings.Common_Back, style: .plain, target: nil, action: nil) self.isModalWhenInOverlay = true
//self.navigationItem.backBarButtonItem = UIBarButtonItem(title: self.presentationData.strings.Common_Back, style: .plain, target: nil, action: nil)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: self.presentationData.strings.Common_Cancel, style: .plain, target: self, action: #selector(cancelPressed))
self.scrollToTop = { [weak self] in self.scrollToTop = { [weak self] in
if let strongSelf = self { if let strongSelf = self {
@ -257,4 +261,8 @@ public class ComposeController: ViewController {
private func openPeer(peerId: PeerId) { private func openPeer(peerId: PeerId) {
(self.navigationController as? NavigationController)?.replaceTopController(ChatControllerImpl(context: self.context, chatLocation: .peer(peerId)), animated: true) (self.navigationController as? NavigationController)?.replaceTopController(ChatControllerImpl(context: self.context, chatLocation: .peer(peerId)), animated: true)
} }
@objc private func cancelPressed() {
self.presentingViewController?.dismiss(animated: true, completion: nil)
}
} }