Allow changing appearance

This commit is contained in:
Ethan Pippin 2021-07-26 13:44:14 -06:00
parent e370bb37ed
commit 4fa6059a2a
3 changed files with 34 additions and 0 deletions

View File

@ -20,6 +20,7 @@ struct SettingsView: View {
@Default(.isAutoSelectSubtitles) var isAutoSelectSubtitles
@Default(.autoSelectSubtitlesLangCode) var autoSelectSubtitlesLangcode
@Default(.autoSelectAudioLangCode) var autoSelectAudioLangcode
@Default(.appAppearance) var appAppearance
@State private var username: String = ""
func onAppear() {
@ -61,6 +62,15 @@ struct SettingsView: View {
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 {

View File

@ -16,4 +16,5 @@ extension Defaults.Keys {
static let isAutoSelectSubtitles = Key<Bool>("isAutoSelectSubtitles", default: false)
static let autoSelectSubtitlesLangCode = Key<String>("AutoSelectSubtitlesLangCode", default: "Auto")
static let autoSelectAudioLangCode = Key<String>("AutoSelectAudioLangCode", default: "Auto")
static let appAppearance = Key<String>("appAppearance", default: AppAppearance.system.rawValue)
}

View File

@ -8,6 +8,7 @@
*/
import Foundation
import SwiftUI
struct UserSettings: Decodable {
var LocalMaxBitrate: Int
@ -30,10 +31,32 @@ struct TrackLanguage: Hashable {
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 {
let currentLocale = Locale.current
var bitrates: [Bitrates] = []
var langs = [TrackLanguage]()
let appearances = AppAppearance.allCases
init() {
let url = Bundle.main.url(forResource: "bitrates", withExtension: "json")!