Path: blob/main/SignalUI/ViewControllers/OWSWindow.swift
1 views
//
// Copyright 2019 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import UIKit
public class OWSWindow: UIWindow {
override public init(frame: CGRect) {
super.init(frame: frame)
NotificationCenter.default.addObserver(
self,
selector: #selector(themeDidChange),
name: .themeDidChange,
object: nil,
)
applyTheme()
}
// This useless override is defined so that you can call `-init` from Swift.
override public init(windowScene: UIWindowScene) {
fatalError("init(windowScene:) has not been implemented")
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc
private func themeDidChange() {
applyTheme()
}
private func applyTheme() {
// Ensure system UI elements use the appropriate styling for the selected theme.
switch Theme.getOrFetchCurrentMode() {
case .light:
overrideUserInterfaceStyle = .light
case .dark:
overrideUserInterfaceStyle = .dark
case .system:
overrideUserInterfaceStyle = .unspecified
}
}
override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
Theme.systemThemeChanged()
}
}
}