Files
OrderScheduling/Pods/SwiftEntryKit/Source/Model/EntryAttributes/EKAttributes+StatusBar.swift
DDIsFriend f0e8a1709d initial
2023-08-18 17:28:57 +08:00

92 lines
2.9 KiB
Swift

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