mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various UI improvements
This commit is contained in:
parent
f01d5d1546
commit
5ade4ad7ec
@ -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? {
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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?
|
||||||
|
@ -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 {
|
||||||
|
@ -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()
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user