// // EKAttributes+StatusBar.swift // SwiftEntryKit // // Created by Daniel Huri on 5/25/18. // Copyright (c) 2018 huri000@gmail.com. All rights reserved. // import UIKit public extension EKAttributes { /** Status bar appearance */ enum StatusBar { /** The appearance of the status bar */ public typealias Appearance = (visible: Bool, style: UIStatusBarStyle) /** Ignored. Status bar is ignored by entries with this apperance value*/ case ignored /** Hidden. Doesn't apply to iPhone X */ case hidden /** Visible with explicit dark style */ case dark /** Visible with explicit light style */ case light /** Keep previous state of status bar. In case there is an already displayed entry, keep its status bar appearance. In case the app is already displaying a status bar, keep its appearance */ case inferred /** Returns the status bar appearance. Note: See *Appearance* */ public var appearance: Appearance { switch self { case .dark: if #available(iOS 13, *) { return (true, .darkContent) } else { return (true, .default) } case .light: return (true, .lightContent) case .inferred: return StatusBar.currentAppearance case .hidden: return (false, StatusBar.currentStyle) case .ignored: fatalError("There is no defined appearance for an ignored status bar") } } /** Returns the status bar according to a given appearance */ public static func statusBar(by appearance: Appearance) -> StatusBar { guard appearance.visible else { return .hidden } switch appearance.style { case .lightContent: return .light default: return .dark } } /** Returns the current appearance */ public static var currentAppearance: Appearance { return (StatusBar.isCurrentVisible, StatusBar.currentStyle) } /** Returns the current status bar */ public static var currentStatusBar: StatusBar { return statusBar(by: currentAppearance) } // Accessors // TODO: Use `statusBarManager` of the window scene on iOS 13 private static var currentStyle: UIStatusBarStyle { return UIApplication.shared.statusBarStyle } // TODO: Use `statusBarManager` of the window scene on iOS 13 private static var isCurrentVisible: Bool { return !UIApplication.shared.isStatusBarHidden } } }