import Foundation @objc(LKAppModeManager) public final class AppModeManager : NSObject { private let delegate: AppModeManagerDelegate public var currentAppMode: AppMode { return delegate.getCurrentAppMode() } public static var shared: AppModeManager! @objc(configureWithDelegate:) public static func configure(delegate: AppModeManagerDelegate) { shared = AppModeManager(delegate: delegate) } private init(delegate: AppModeManagerDelegate) { self.delegate = delegate super.init() } private override init() { preconditionFailure("Use init(delegate:) instead.") } public func setCurrentAppMode(to appMode: AppMode) { delegate.setCurrentAppMode(to: appMode) } public func setAppModeToSystemDefault() { delegate.setAppModeToSystemDefault() } } @objc(LKAppModeManagerDelegate) public protocol AppModeManagerDelegate { func getCurrentAppMode() -> AppMode @objc(setCurrentAppMode:) func setCurrentAppMode(to appMode: AppMode) func setAppModeToSystemDefault() } @objc(LKAppMode) public enum AppMode : Int { case light, dark } public var isSystemDefault: Bool { return !UserDefaults.standard.dictionaryRepresentation().keys.contains("appMode") } public var isLightMode: Bool { return AppModeManager.shared.currentAppMode == .light } public var isDarkMode: Bool { return AppModeManager.shared.currentAppMode == .dark } @objc public final class LKAppModeUtilities : NSObject { @objc public static var isSystemDefault: Bool { return !UserDefaults.standard.dictionaryRepresentation().keys.contains("appMode") } @objc public static var isLightMode: Bool { return AppModeManager.shared.currentAppMode == .light } @objc public static var isDarkMode: Bool { return AppModeManager.shared.currentAppMode == .dark } }