From d81d951f43277e8f0d907edc10d62d86de41eab4 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 28 Mar 2023 17:35:13 +0200 Subject: [PATCH] Default volume setting --- LeCountdown/Utils/Preferences.swift | 2 ++ LeCountdown/Views/ContentView.swift | 2 +- LeCountdown/Views/Reusable/VolumeView.swift | 18 +++++++++++++++++- LeCountdown/Views/SettingsView.swift | 16 ++++++++++++++-- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/LeCountdown/Utils/Preferences.swift b/LeCountdown/Utils/Preferences.swift index dbe47a7..0c3c66c 100644 --- a/LeCountdown/Utils/Preferences.swift +++ b/LeCountdown/Utils/Preferences.swift @@ -18,6 +18,7 @@ enum PreferenceKey: String { case tips case timerSiriTips case cloudKitSchemaInitialized + case defaultVolume } class Preferences { @@ -30,6 +31,7 @@ class Preferences { @UserDefault(PreferenceKey.playConfirmationSound.rawValue, defaultValue: true) static var playConfirmationSound: Bool @UserDefault(PreferenceKey.playCancellationSound.rawValue, defaultValue: true) static var playCancellationSound: Bool @UserDefault(PreferenceKey.cloudKitSchemaInitialized.rawValue, defaultValue: false) static var cloudKitSchemaInitialized: Bool + @UserDefault(PreferenceKey.defaultVolume.rawValue, defaultValue: 0.5) static var defaultVolume: Float static var hideSilentModeAlerts: Bool { return UserDefaults.standard.bool(forKey: PreferenceKey.showSilentModeAlert.rawValue) diff --git a/LeCountdown/Views/ContentView.swift b/LeCountdown/Views/ContentView.swift index 5c6a5fb..2e02318 100644 --- a/LeCountdown/Views/ContentView.swift +++ b/LeCountdown/Views/ContentView.swift @@ -119,7 +119,7 @@ struct ContentView: View { }) .sheet(isPresented: self.$showSettingsSheet, content: { SettingsView() - .presentationDetents([.height(150.0)]) + .presentationDetents([.height(240.0)]) }) .toolbar { ToolbarItem(placement: .navigationBarLeading) { diff --git a/LeCountdown/Views/Reusable/VolumeView.swift b/LeCountdown/Views/Reusable/VolumeView.swift index 0a29a79..b4c17b5 100644 --- a/LeCountdown/Views/Reusable/VolumeView.swift +++ b/LeCountdown/Views/Reusable/VolumeView.swift @@ -13,14 +13,30 @@ struct VolumeView: UIViewRepresentable { func makeUIView(context: Context) -> MPVolumeView { let volumeView = MPVolumeView(frame: .zero) - volumeView.showsLargeContentViewer = false +// volumeView.showsLargeContentViewer = false + +// if let slider = volumeView.subviews.first(where: { $0 is UISlider }) as? UISlider { +// slider.setValue(0.15, animated: false) +// } + self._setVolume(volumeView: volumeView) + return volumeView } func updateUIView(_ view: MPVolumeView, context: Context) { Logger.log("update volume view") + } + fileprivate func _setVolume(volumeView: MPVolumeView) { + if let slider = volumeView.subviews.first(where: { $0 is UISlider }) as? UISlider { + + DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01) { + slider.setValue(Preferences.defaultVolume, animated: false) + } + } + } + } struct VolumeView_Previews: PreviewProvider { diff --git a/LeCountdown/Views/SettingsView.swift b/LeCountdown/Views/SettingsView.swift index c26eac4..59ec738 100644 --- a/LeCountdown/Views/SettingsView.swift +++ b/LeCountdown/Views/SettingsView.swift @@ -11,18 +11,30 @@ struct SettingsView: View { @State var confirmationSound = Preferences.playConfirmationSound @State var cancellationSound = Preferences.playCancellationSound + @State var defaultVolume: Float = Preferences.defaultVolume @State var showMailView: Bool = false var body: some View { Form { - Toggle("Play confirmation sound", isOn: self.$confirmationSound).onChange(of: self.confirmationSound) { newValue in + Toggle("Play confirmation sound", isOn: self.$confirmationSound) + .onChange(of: self.confirmationSound) { newValue in Preferences.playConfirmationSound = newValue } - Toggle("Play cancellation sound", isOn: self.$cancellationSound).onChange(of: self.cancellationSound) { newValue in + Toggle("Play cancellation sound", isOn: self.$cancellationSound) + .onChange(of: self.cancellationSound) { newValue in Preferences.playCancellationSound = newValue } + HStack { + Text("Default Volume") + Spacer() + Slider(value: self.$defaultVolume) + .onChange(of: self.defaultVolume, perform: { newValue in + Preferences.defaultVolume = self.defaultVolume + }) + .frame(width: 120.0) + } Button { self.showMailView = true } label: {