You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/SessionUIKit/Components/SearchBar.swift

96 lines
3.8 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import UIKit
public final class SearchBar : UISearchBar {
public override init(frame: CGRect) {
super.init(frame: frame)
setUpSessionStyle()
}
public required init?(coder: NSCoder) {
super.init(coder: coder)
setUpSessionStyle()
}
}
public final class ContactsSearchBar : UISearchBar {
public override init(frame: CGRect) {
super.init(frame: frame)
setUpContactSearchStyle()
}
public required init?(coder: NSCoder) {
super.init(coder: coder)
setUpContactSearchStyle()
}
}
public extension UISearchBar {
func setUpSessionStyle() {
searchBarStyle = .minimal // Hide the border around the search bar
barStyle = .black // Use Apple's black design as a base
themeTintColor = .textPrimary // The cursor color
let searchImage: UIImage = #imageLiteral(resourceName: "searchbar_search").withRenderingMode(.alwaysTemplate)
setImage(searchImage, for: .search, state: .normal)
searchTextField.leftView?.themeTintColor = .textSecondary
let clearImage: UIImage = #imageLiteral(resourceName: "searchbar_clear").withRenderingMode(.alwaysTemplate)
setImage(clearImage, for: .clear, state: .normal)
let searchTextField: UITextField = self.searchTextField
searchTextField.themeBackgroundColor = .messageBubble_overlay // The search bar background color
searchTextField.themeTextColor = .textPrimary
setPositionAdjustment(UIOffset(horizontal: 4, vertical: 0), for: UISearchBar.Icon.search)
searchTextPositionAdjustment = UIOffset(horizontal: 2, vertical: 0)
setPositionAdjustment(UIOffset(horizontal: -4, vertical: 0), for: UISearchBar.Icon.clear)
ThemeManager.onThemeChange(observer: searchTextField) { [weak searchTextField] theme, _ in
guard let textColor: UIColor = theme.color(for: .textSecondary) else { return }
searchTextField?.attributedPlaceholder = NSAttributedString(
string: "Search",
attributes: [
.foregroundColor: textColor
])
}
}
func setUpContactSearchStyle() {
searchBarStyle = .minimal
barStyle = .default
themeTintColor = .textPrimary
let searchImage = #imageLiteral(resourceName: "searchbar_search").withRenderingMode(.alwaysTemplate)
setImage(searchImage, for: .search, state: .normal)
searchTextField.leftView?.themeTintColor = .textSecondary
let clearImage = #imageLiteral(resourceName: "searchbar_clear").withRenderingMode(.alwaysTemplate)
setImage(clearImage, for: .clear, state: .normal)
let searchTextField: UITextField = self.searchTextField
searchTextField.borderStyle = .none
searchTextField.layer.cornerRadius = 18
searchTextField.themeBackgroundColor = .backgroundPrimary
searchTextField.themeTextColor = .textPrimary
setPositionAdjustment(UIOffset(horizontal: 4, vertical: 0), for: UISearchBar.Icon.search)
searchTextPositionAdjustment = UIOffset(horizontal: 2, vertical: 0)
setPositionAdjustment(UIOffset(horizontal: -4, vertical: 0), for: UISearchBar.Icon.clear)
ThemeManager.onThemeChange(observer: searchTextField) { [weak searchTextField] theme, _ in
guard let textColor: UIColor = theme.color(for: .textSecondary) else { return }
searchTextField?.attributedPlaceholder = NSAttributedString(
string: "Search Contacts",
attributes: [
.foregroundColor: textColor
]
)
}
}
}