Allow changing appearance
This commit is contained in:
parent
e370bb37ed
commit
4fa6059a2a
|
@ -20,6 +20,7 @@ struct SettingsView: View {
|
||||||
@Default(.isAutoSelectSubtitles) var isAutoSelectSubtitles
|
@Default(.isAutoSelectSubtitles) var isAutoSelectSubtitles
|
||||||
@Default(.autoSelectSubtitlesLangCode) var autoSelectSubtitlesLangcode
|
@Default(.autoSelectSubtitlesLangCode) var autoSelectSubtitlesLangcode
|
||||||
@Default(.autoSelectAudioLangCode) var autoSelectAudioLangcode
|
@Default(.autoSelectAudioLangCode) var autoSelectAudioLangcode
|
||||||
|
@Default(.appAppearance) var appAppearance
|
||||||
@State private var username: String = ""
|
@State private var username: String = ""
|
||||||
|
|
||||||
func onAppear() {
|
func onAppear() {
|
||||||
|
@ -61,6 +62,15 @@ struct SettingsView: View {
|
||||||
set: { autoSelectAudioLangcode = $0.isoCode}
|
set: { autoSelectAudioLangcode = $0.isoCode}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
Picker(NSLocalizedString("Appearance", comment: ""), selection: $appAppearance) {
|
||||||
|
ForEach(self.viewModel.appearances, id: \.self) { appearance in
|
||||||
|
Text(appearance.localizedName).tag(appearance.rawValue)
|
||||||
|
}
|
||||||
|
}.onChange(of: appAppearance, perform: { value in
|
||||||
|
guard let window = UIApplication.shared.windows.first else { return }
|
||||||
|
guard let appearance = AppAppearance(rawValue: value) else { return }
|
||||||
|
window.overrideUserInterfaceStyle = appearance.style
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
|
|
|
@ -16,4 +16,5 @@ extension Defaults.Keys {
|
||||||
static let isAutoSelectSubtitles = Key<Bool>("isAutoSelectSubtitles", default: false)
|
static let isAutoSelectSubtitles = Key<Bool>("isAutoSelectSubtitles", default: false)
|
||||||
static let autoSelectSubtitlesLangCode = Key<String>("AutoSelectSubtitlesLangCode", default: "Auto")
|
static let autoSelectSubtitlesLangCode = Key<String>("AutoSelectSubtitlesLangCode", default: "Auto")
|
||||||
static let autoSelectAudioLangCode = Key<String>("AutoSelectAudioLangCode", default: "Auto")
|
static let autoSelectAudioLangCode = Key<String>("AutoSelectAudioLangCode", default: "Auto")
|
||||||
|
static let appAppearance = Key<String>("appAppearance", default: AppAppearance.system.rawValue)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
struct UserSettings: Decodable {
|
struct UserSettings: Decodable {
|
||||||
var LocalMaxBitrate: Int
|
var LocalMaxBitrate: Int
|
||||||
|
@ -30,10 +31,32 @@ struct TrackLanguage: Hashable {
|
||||||
static let auto = TrackLanguage(name: "Auto", isoCode: "Auto")
|
static let auto = TrackLanguage(name: "Auto", isoCode: "Auto")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum AppAppearance: String, CaseIterable {
|
||||||
|
case system
|
||||||
|
case dark
|
||||||
|
case light
|
||||||
|
|
||||||
|
var localizedName: String {
|
||||||
|
return NSLocalizedString(self.rawValue.capitalized, comment: "")
|
||||||
|
}
|
||||||
|
|
||||||
|
var style: UIUserInterfaceStyle {
|
||||||
|
switch self {
|
||||||
|
case .system:
|
||||||
|
return .unspecified
|
||||||
|
case .dark:
|
||||||
|
return .dark
|
||||||
|
case .light:
|
||||||
|
return .light
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final class SettingsViewModel: ObservableObject {
|
final class SettingsViewModel: ObservableObject {
|
||||||
let currentLocale = Locale.current
|
let currentLocale = Locale.current
|
||||||
var bitrates: [Bitrates] = []
|
var bitrates: [Bitrates] = []
|
||||||
var langs = [TrackLanguage]()
|
var langs = [TrackLanguage]()
|
||||||
|
let appearances = AppAppearance.allCases
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
let url = Bundle.main.url(forResource: "bitrates", withExtension: "json")!
|
let url = Bundle.main.url(forResource: "bitrates", withExtension: "json")!
|
||||||
|
|
Loading…
Reference in New Issue