session-ios/Session/Shared/BaseVC.swift

103 lines
3.7 KiB
Swift
Raw Normal View History

2020-02-20 04:37:17 +01:00
class BaseVC : UIViewController {
private var hasGradient = false
2020-02-20 04:37:17 +01:00
override var preferredStatusBarStyle: UIStatusBarStyle { return isLightMode ? .default : .lightContent }
lazy var navBarTitleLabel: UILabel = {
let result = UILabel()
result.textColor = Colors.text
result.font = .boldSystemFont(ofSize: Values.veryLargeFontSize)
result.alpha = 1
result.textAlignment = .center
return result
}()
lazy var crossfadeLabel: UILabel = {
let result = UILabel()
result.textColor = Colors.text
result.font = .boldSystemFont(ofSize: Values.veryLargeFontSize)
result.alpha = 0
result.textAlignment = .center
return result
}()
2020-02-20 04:37:17 +01:00
override func viewDidLoad() {
setNeedsStatusBarAppearanceUpdate()
NotificationCenter.default.addObserver(self, selector: #selector(handleAppModeChangedNotification(_:)), name: .appModeChanged, object: nil)
}
2021-10-19 02:03:59 +02:00
internal func ensureWindowBackground() {
let appMode = AppModeManager.shared.currentAppMode
switch appMode {
case .light:
UIApplication.shared.delegate?.window??.backgroundColor = .white
case .dark:
UIApplication.shared.delegate?.window??.backgroundColor = .black
}
}
internal func setUpGradientBackground() {
hasGradient = true
view.backgroundColor = .clear
2021-01-29 01:46:32 +01:00
let gradient = Gradients.defaultBackground
view.setGradient(gradient)
}
internal func setUpNavBarStyle() {
2020-08-27 07:06:11 +02:00
guard let navigationBar = navigationController?.navigationBar else { return }
2021-09-23 04:56:00 +02:00
if #available(iOS 15.0, *) {
2021-09-22 07:57:12 +02:00
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = Colors.navigationBarBackground
appearance.shadowColor = .clear
navigationBar.standardAppearance = appearance;
navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance
} else {
navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
navigationBar.shadowImage = UIImage()
navigationBar.isTranslucent = false
navigationBar.barTintColor = Colors.navigationBarBackground
}
}
internal func setNavBarTitle(_ title: String, customFontSize: CGFloat? = nil) {
let container = UIView()
navBarTitleLabel.text = title
crossfadeLabel.text = title
if let customFontSize = customFontSize {
navBarTitleLabel.font = .boldSystemFont(ofSize: customFontSize)
crossfadeLabel.font = .boldSystemFont(ofSize: customFontSize)
}
container.addSubview(navBarTitleLabel)
navBarTitleLabel.pin(to: container)
container.addSubview(crossfadeLabel)
crossfadeLabel.pin(to: container)
navigationItem.titleView = container
}
internal func setUpNavBarSessionIcon() {
let logoImageView = UIImageView()
logoImageView.image = #imageLiteral(resourceName: "SessionGreen32")
logoImageView.contentMode = .scaleAspectFit
logoImageView.set(.width, to: 32)
logoImageView.set(.height, to: 32)
navigationItem.titleView = logoImageView
}
deinit {
NotificationCenter.default.removeObserver(self)
}
2020-08-24 06:24:44 +02:00
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
2021-10-19 02:03:59 +02:00
NotificationCenter.default.post(name: .appModeChanged, object: nil)
2020-08-24 06:24:44 +02:00
}
@objc internal func handleAppModeChangedNotification(_ notification: Notification) {
if hasGradient {
setUpGradientBackground() // Re-do the gradient
}
2021-10-19 02:03:59 +02:00
ensureWindowBackground()
}
2020-02-20 04:37:17 +01:00
}