// 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 ] ) } } }