This repository was archived by the owner on Apr 13, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathTSSettingsController.swift
86 lines (73 loc) · 2.82 KB
/
TSSettingsController.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// TSSettingsController.swift
// TrollSpeed
//
// Created by Lessica on 2024/1/24.
//
import UIKit
@objc public protocol TSSettingsControllerDelegate {
func settingHighlighted(key: String) -> Bool
func settingDidSelect(key: String) -> Void
}
@objc open class TSSettingsController : SPLarkSettingsController
{
@objc open weak var delegate: TSSettingsControllerDelegate?
@objc open var alreadyLaunched: Bool = false
internal var restartRequired = false
open override func settingsCount() -> Int {
return TSSettingsIndex.allCases.count
}
open override func settingTitle(index: Int, highlighted: Bool) -> String {
return TSSettingsIndex.allCases[index].title
}
open override func settingSubtitle(index: Int, highlighted: Bool) -> String? {
return TSSettingsIndex.allCases[index].subtitle(highlighted: highlighted, restartRequired: restartRequired)
}
private func settingKey(index: Int) -> String {
return TSSettingsIndex.allCases[index].key
}
open override func settingHighlighted(index: Int) -> Bool {
return delegate?.settingHighlighted(key: settingKey(index: index)) ?? false
}
open override func settingColorHighlighted(index: Int) -> UIColor {
return UIColor { traitCollection in
if traitCollection.userInterfaceStyle == .dark {
return UIColor(red: 28/255.0, green: 74/255.0, blue: 82/255.0, alpha: 1.0)
} else {
return UIColor(red: 22/255.0, green: 160/255.0, blue: 133/255.0, alpha: 1.0)
}
}
}
open override func settingDidSelect(index: Int, completion: @escaping () -> ()) {
if index == 0 && alreadyLaunched {
restartRequired = true
}
delegate?.settingDidSelect(key: settingKey(index: index))
completion()
}
open override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
guard let currentOrientation = view.window?.windowScene?.interfaceOrientation else {
return [.portrait]
}
switch currentOrientation {
case .unknown: fallthrough
case .portrait:
return [.portrait]
case .portraitUpsideDown:
return [.portraitUpsideDown]
case .landscapeLeft:
return [.landscapeLeft]
case .landscapeRight:
return [.landscapeRight]
@unknown default:
return [.portrait]
}
}
open override var shouldAutorotate: Bool { false }
open override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if previousTraitCollection?.userInterfaceStyle != self.traitCollection.userInterfaceStyle {
self.dismiss(animated: true, completion: nil)
}
}
}