Search filter fixes

This commit is contained in:
Ilya Laktyushin 2020-09-29 04:03:20 +04:00
parent 1d1e3de5d5
commit 8b362c60f4
3 changed files with 31 additions and 12 deletions

View File

@ -106,11 +106,13 @@ func suggestDates(for string: String, strings: PresentationStrings, dateTimeForm
if stringComponents.count < 3 {
for i in 0..<5 {
if let date = calendar.date(byAdding: .year, value: -i, to: resultDate), date < now {
result.append((nil, date, nil))
let lowerDate = getLowerDate(for: resultDate)
result.append((lowerDate, date, nil))
}
}
} else if resultDate < now {
result.append((nil, resultDate, nil))
let lowerDate = getLowerDate(for: resultDate)
result.append((lowerDate, resultDate, nil))
}
}
let dd = try NSDataDetector(types: NSTextCheckingResult.CheckingType.date.rawValue)

View File

@ -17,7 +17,7 @@ private let timezoneOffset: Int32 = {
}()
public func listMessageDateHeaderId(timestamp: Int32) -> Int64 {
let unclippedValue: Int64 = min(Int64(Int32.max), Int64(timestamp) + Int64(timezoneOffset))
let unclippedValue: Int64 = min(Int64(Int32.max), Int64(timestamp))
var time: time_t = time_t(Int32(clamping: unclippedValue))
var timeinfo: tm = tm()
@ -29,7 +29,7 @@ public func listMessageDateHeaderId(timestamp: Int32) -> Int64 {
}
public func listMessageDateHeaderInfo(timestamp: Int32) -> (year: Int32, month: Int32) {
var time: time_t = time_t(timestamp + timezoneOffset)
var time: time_t = time_t(timestamp)
var timeinfo: tm = tm()
localtime_r(&time, &timeinfo)
@ -53,7 +53,7 @@ final class ListMessageDateHeader: ListViewItemHeader {
self.strings = strings
self.fontSize = fontSize
var time: time_t = time_t(timestamp + timezoneOffset)
var time: time_t = time_t(timestamp)
var timeinfo: tm = tm()
localtime_r(&time, &timeinfo)

View File

@ -251,9 +251,11 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
self.tokenNodes[token.id] = tokenNode
}
tokenNode.tapped = { [weak self] in
self?.selectedTokenIndex = i
self?.becomeFirstResponder()
if let strongSelf = self {
strongSelf.selectedTokenIndex = i
if !strongSelf.isFirstResponder {
let _ = strongSelf.becomeFirstResponder()
}
let newPosition = strongSelf.beginningOfDocument
strongSelf.selectedTextRange = strongSelf.textRange(from: newPosition, to: newPosition)
}
@ -443,6 +445,15 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
self.updateTokenContainerPosition()
}
override func becomeFirstResponder() -> Bool {
if let contentOffset = self.scrollView?.contentOffset {
Queue.mainQueue().after(0.03) {
self.scrollView?.setContentOffset(contentOffset, animated: true)
}
}
return super.becomeFirstResponder()
}
private func updateTokenContainerPosition(transition: ContainedViewLayoutTransition = .immediate) {
if let scrollView = self.scrollView {
transition.updateFrame(node: self.tokenContainerNode, frame: CGRect(origin: CGPoint(x: -scrollView.contentOffset.x - scrollView.contentInset.left, y: 0.0), size: self.tokenContainerNode.frame.size))
@ -460,7 +471,7 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
}
super.keyboardAppearance = newValue
if resigning {
self.becomeFirstResponder()
let _ = self.becomeFirstResponder()
}
}
}
@ -553,7 +564,6 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let _ = self.selectedTokenIndex {
self.selectedTokenIndex = nil
if let touch = touches.first, let gestureRecognizers = touch.gestureRecognizers {
let point = touch.location(in: self.tokenContainerNode.view)
for (_, tokenNode) in self.tokenNodes {
@ -562,6 +572,7 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
return
}
}
self.selectedTokenIndex = nil
for gesture in gestureRecognizers {
if gesture is UITapGestureRecognizer, gesture.isEnabled {
gesture.isEnabled = false
@ -931,7 +942,9 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate {
}
public func activate() {
self.textField.becomeFirstResponder()
if !self.textField.isFirstResponder {
let _ = self.textField.becomeFirstResponder()
}
}
public func animateIn(from node: SearchBarPlaceholderNode, duration: Double, timingFunction: String) {
@ -1102,14 +1115,18 @@ public class SearchBarNode: ASDisplayNode, UITextFieldDelegate {
}
public func selectAll() {
self.textField.becomeFirstResponder()
if !self.textField.isFirstResponder {
let _ = self.textField.becomeFirstResponder()
}
self.textField.selectAll(nil)
}
public func selectLastToken() {
if !self.textField.tokens.isEmpty {
self.textField.selectedTokenIndex = self.textField.tokens.count - 1
self.textField.becomeFirstResponder()
if !self.textField.isFirstResponder {
let _ = self.textField.becomeFirstResponder()
}
}
}