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 { if stringComponents.count < 3 {
for i in 0..<5 { for i in 0..<5 {
if let date = calendar.date(byAdding: .year, value: -i, to: resultDate), date < now { 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 { } 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) 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 { 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 time: time_t = time_t(Int32(clamping: unclippedValue))
var timeinfo: tm = tm() var timeinfo: tm = tm()
@ -29,7 +29,7 @@ public func listMessageDateHeaderId(timestamp: Int32) -> Int64 {
} }
public func listMessageDateHeaderInfo(timestamp: Int32) -> (year: Int32, month: Int32) { 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() var timeinfo: tm = tm()
localtime_r(&time, &timeinfo) localtime_r(&time, &timeinfo)
@ -53,7 +53,7 @@ final class ListMessageDateHeader: ListViewItemHeader {
self.strings = strings self.strings = strings
self.fontSize = fontSize self.fontSize = fontSize
var time: time_t = time_t(timestamp + timezoneOffset) var time: time_t = time_t(timestamp)
var timeinfo: tm = tm() var timeinfo: tm = tm()
localtime_r(&time, &timeinfo) localtime_r(&time, &timeinfo)

View File

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