From 685c35ae8f584b496e37f55f004b5027140c3d2e Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 17 Mar 2023 14:32:52 +0100 Subject: [PATCH] Improves siri tips for ipad --- LeCountdown/Views/ContentView.swift | 45 +++++++++++++++---- .../Views/Reusable/SiriTimerView.swift | 6 +-- LeCountdown/Views/TimersView.swift | 22 ++++----- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/LeCountdown/Views/ContentView.swift b/LeCountdown/Views/ContentView.swift index 0d79031..d44996e 100644 --- a/LeCountdown/Views/ContentView.swift +++ b/LeCountdown/Views/ContentView.swift @@ -60,7 +60,9 @@ struct ContentView: View { VStack { - TimersView(isEditing: self.$isEditing) + TimersView(isEditing: self.$isEditing, siriHandler: { timer in + self._handleSiriTips(timer: timer) + }) .environment(\.managedObjectContext, viewContext) .environmentObject(self.boringContext) @@ -74,13 +76,27 @@ struct ContentView: View { Spacer() - SiriTimerView(timer: self.boringContext.siriTimer) - - HStack(alignment: .center) { - VolumeView().padding(12.0) - }.frame(width: 300.0, height: 40.0) - .background(Color(white: 0.9)) - .cornerRadius(16.0) + if UIDevice.isPhoneIdiom { + + SiriTimerView(timer: self.boringContext.siriTimer, isVisible: self.$siriTipShown) + + HStack(alignment: .center) { + VolumeView().padding(12.0) + }.frame(width: 300.0, height: 40.0) + .background(Color(white: 0.9)) + .cornerRadius(16.0) + } else { + + HStack() { + if self.siriTipShown { + SiriTimerView(timer: self.boringContext.siriTimer, isVisible: self.$siriTipShown) + Spacer() + } + VolumeView().padding(12.0).frame(width: 300.0, height: 40.0) + .background(Color(white: 0.9)) + .cornerRadius(16.0) + }.padding(.horizontal) + } LiveTimerListView() .environment(\.managedObjectContext, viewContext) @@ -134,6 +150,19 @@ struct ContentView: View { } + fileprivate func _handleSiriTips(timer: AbstractTimer) { + let timerId = timer.stringId + if !Preferences.timerSiriTips.contains(timerId) { + self.boringContext.siriTimer = timer + Preferences.timerSiriTips.insert(timerId) + self.siriTipShown = true + } else { + self.boringContext.siriTimer = nil + self.siriTipShown = false + } + } + + // MARK: - Business fileprivate func _hideTip(_ tip: Tip) { diff --git a/LeCountdown/Views/Reusable/SiriTimerView.swift b/LeCountdown/Views/Reusable/SiriTimerView.swift index 99f8a3d..01bda28 100644 --- a/LeCountdown/Views/Reusable/SiriTimerView.swift +++ b/LeCountdown/Views/Reusable/SiriTimerView.swift @@ -12,11 +12,11 @@ struct SiriTimerView: View { var timer: AbstractTimer? = nil - @State var isVisible = true + var isVisible: Binding var body: some View { if self.timer != nil { - SiriTipView(intent: self.intent(), isVisible: self.$isVisible) + SiriTipView(intent: self.intent(), isVisible: self.isVisible) .siriTipViewStyle(SiriTipViewStyle.dark).padding() } else { EmptyView() @@ -35,6 +35,6 @@ struct SiriTimerView: View { struct SiriTimerView_Previews: PreviewProvider { static var previews: some View { - SiriTimerView() + SiriTimerView(isVisible: .constant(true)) } } diff --git a/LeCountdown/Views/TimersView.swift b/LeCountdown/Views/TimersView.swift index f4dee58..d038337 100644 --- a/LeCountdown/Views/TimersView.swift +++ b/LeCountdown/Views/TimersView.swift @@ -12,8 +12,10 @@ struct TimersView: View { @EnvironmentObject var boringContext: BoringContext @Environment(\.managedObjectContext) private var viewContext - + @Binding var isEditing: Bool + + var siriHandler: ((AbstractTimer) -> ()) @FetchRequest( sortDescriptors: [NSSortDescriptor(keyPath: \AbstractTimer.order, ascending: true)], @@ -21,7 +23,7 @@ struct TimersView: View { private var timers: FetchedResults fileprivate let itemSpacing: CGFloat = 10.0 - + var body: some View { let abstractTimers: [AbstractTimer] = Array(self.timers) @@ -42,7 +44,10 @@ struct TimersView: View { ReorderableForEach(items: abstractTimers) { timer in DialView(timer: timer, isEditingBinding: self.$isEditing, frameSize: width, handler: { timer in - self._handleSiriTips(timer: timer) + + self.siriHandler(timer) + +// self._handleSiriTips(timer: timer) }) .environment(\.managedObjectContext, viewContext) .environmentObject(Conductor.maestro) @@ -75,15 +80,6 @@ struct TimersView: View { } } - fileprivate func _handleSiriTips(timer: AbstractTimer) { - - let timerId = timer.stringId - if !Preferences.timerSiriTips.contains(timerId) { - self.boringContext.siriTimer = timer - Preferences.timerSiriTips.insert(timerId) - } - } - fileprivate func _columnCount() -> Int { #if os(iOS) if UIDevice.isPhoneIdiom { @@ -104,6 +100,6 @@ struct TimersView: View { struct TimersView_Previews: PreviewProvider { static var previews: some View { - TimersView(isEditing: .constant(false)) + TimersView(isEditing: .constant(false), siriHandler: { _ in }) } }