From 5bb0b1246bb1d5ef4bcad4b0dba72e15109f4b0b Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 26 Sep 2022 17:47:06 +0800 Subject: [PATCH] Add the voice selection view --- .../TextToSpeechVoiceSelectionView.swift | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 apple/OmnivoreKit/Sources/App/Views/Profile/TextToSpeechVoiceSelectionView.swift diff --git a/apple/OmnivoreKit/Sources/App/Views/Profile/TextToSpeechVoiceSelectionView.swift b/apple/OmnivoreKit/Sources/App/Views/Profile/TextToSpeechVoiceSelectionView.swift new file mode 100644 index 000000000..ea4639cb5 --- /dev/null +++ b/apple/OmnivoreKit/Sources/App/Views/Profile/TextToSpeechVoiceSelectionView.swift @@ -0,0 +1,72 @@ +import Models +import Services +import SwiftUI +import Views + +struct TextToSpeechVoiceSelectionView: View { + @EnvironmentObject var audioController: AudioController + let language: VoiceLanguage + + init(forLanguage: VoiceLanguage) { + self.language = forLanguage + } + + var body: some View { + Group { + #if os(iOS) + Form { + Section("Language") { + NavigationLink(destination: TextToSpeechLanguageView().navigationTitle("Language")) { + Text(audioController.currentVoiceLanguage.name) + } + } + innerBody + } + #elseif os(macOS) + List { + innerBody + } + .listStyle(InsetListStyle()) + #endif + } + .navigationTitle("Choose a Voice") + } + + private var innerBody: some View { + ForEach(language.categories, id: \.self) { category in + Section(category.rawValue) { + ForEach(audioController.voiceList?.filter { $0.category == category } ?? [], id: \.key.self) { voice in + HStack { + // Voice samples are not working yet +// Button(action: { +// audioController.playVoiceSample(voice: voice.key) +// }) { +// Image(systemName: "play.circle").font(.appTitleTwo) +// } +// .buttonStyle(PlainButtonStyle()) + + Button(action: { + audioController.setPreferredVoice(voice.key, forLanguage: language.key) + audioController.currentVoice = voice.key + }) { + HStack { + Text(voice.name) + Spacer() + + if voice.selected { + if audioController.isLoading { + ProgressView() + } else { + Image(systemName: "checkmark") + } + } + } + .contentShape(Rectangle()) + } + .buttonStyle(PlainButtonStyle()) + } + } + } + } + } +}