import Foundation import UIKit import Display import AsyncDisplayKit import UIKit import SwiftSignalKit import Photos import TelegramPresentationData final class ChatDateSelectionSheet: ActionSheetController { private let strings: PresentationStrings private let _ready = Promise() override var ready: Promise { return self._ready } init(presentationData: PresentationData, completion: @escaping (Int32) -> Void) { self.strings = presentationData.strings super.init(theme: ActionSheetControllerTheme(presentationData: presentationData)) self._ready.set(.single(true)) var updatedValue: Int32? self.setItemGroups([ ActionSheetItemGroup(items: [ ChatDateSelectorItem(strings: self.strings, valueChanged: { value in updatedValue = value }), ActionSheetButtonItem(title: self.strings.Common_Search, action: { [weak self] in self?.dismissAnimated() if let updatedValue = updatedValue { completion(updatedValue) } }) ]), ActionSheetItemGroup(items: [ ActionSheetButtonItem(title: self.strings.Common_Cancel, action: { [weak self] in self?.dismissAnimated() }), ]) ]) } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } private final class ChatDateSelectorItem: ActionSheetItem { let strings: PresentationStrings let valueChanged: (Int32) -> Void init(strings: PresentationStrings, valueChanged: @escaping (Int32) -> Void) { self.strings = strings self.valueChanged = valueChanged } func node(theme: ActionSheetControllerTheme) -> ActionSheetItemNode { return ChatDateSelectorItemNode(theme: theme, strings: self.strings, valueChanged: self.valueChanged) } func updateNode(_ node: ActionSheetItemNode) { } } private final class ChatDateSelectorItemNode: ActionSheetItemNode { private let theme: ActionSheetControllerTheme private let strings: PresentationStrings private let pickerView: UIDatePicker private let valueChanged: (Int32) -> Void private var currentValue: Int32 { return Int32(self.pickerView.date.timeIntervalSince1970) } init(theme: ActionSheetControllerTheme, strings: PresentationStrings, valueChanged: @escaping (Int32) -> Void) { self.theme = theme self.strings = strings self.valueChanged = valueChanged self.pickerView = UIDatePicker() self.pickerView.datePickerMode = .countDownTimer self.pickerView.datePickerMode = .date self.pickerView.locale = Locale(identifier: strings.baseLanguageCode) self.pickerView.minimumDate = Date(timeIntervalSince1970: 1376438400.0) self.pickerView.maximumDate = Date(timeIntervalSinceNow: 2.0) if #available(iOS 13.4, *) { self.pickerView.preferredDatePickerStyle = .wheels } self.pickerView.setValue(theme.primaryTextColor, forKey: "textColor") super.init(theme: theme) self.view.addSubview(self.pickerView) self.pickerView.addTarget(self, action: #selector(self.pickerChanged), for: .valueChanged) } override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize { return CGSize(width: constrainedSize.width, height: 157.0) } override func layout() { super.layout() self.pickerView.frame = CGRect(origin: CGPoint(), size: CGSize(width: self.bounds.size.width, height: 180.0)) } @objc func pickerChanged() { self.valueChanged(self.currentValue) } }