1.1: Home-Screen-Widget + Siri-Kurzbefehl „Gassi gehen"
App Group group.app.banyaro.ios verbindet App und Widget-Extension (Entitlements in beiden Targets, CODE_SIGN_ENTITLEMENTS fürs Widget). Home-Screen-Widget (D): - BanYaroHomeWidget (klein + mittel): Tagesfoto, Hundename, nächster Termin. - App schreibt beim Heim-Laden einen Snapshot (HomeWidgetData) in die App Group und triggert WidgetCenter-Reload; Snapshot wird bei Logout/401 geleert. Siri-/Kurzbefehl (E): - StartWalkIntent „Gassi gehen" + AppShortcutsProvider (öffnet die App). - WalkLauncher überbrückt Intent → UI: Flag in der App Group, beim Aktivwerden eingelöst → Aufnehmen-Tab + Aufnahme-Start (TrackingView.startFresh). - MainTabView mit Tab-Auswahl (Tags), BanYaroGoApp liest scenePhase.
This commit is contained in:
parent
a2646a18ef
commit
d807db57a2
14 changed files with 307 additions and 6 deletions
|
|
@ -14,6 +14,7 @@ struct TrackingView: View {
|
|||
@State private var showCamera = false
|
||||
@State private var showResumeDialog = false
|
||||
@State private var didCheckResume = false
|
||||
private let launcher = WalkLauncher.shared
|
||||
|
||||
private let clockTicker = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
|
||||
private let persistTicker = Timer.publish(every: 5, on: .main, in: .common).autoconnect()
|
||||
|
|
@ -45,7 +46,13 @@ struct TrackingView: View {
|
|||
}
|
||||
.onChange(of: tracker.isPaused) { _, _ in updateLiveActivity() }
|
||||
.onChange(of: tracker.isAutoPaused) { _, _ in updateLiveActivity() }
|
||||
.onAppear { offerResumeIfNeeded() }
|
||||
.onAppear {
|
||||
offerResumeIfNeeded()
|
||||
startIfRequested()
|
||||
}
|
||||
.onChange(of: launcher.pendingStart) { _, pending in
|
||||
if pending { startIfRequested() }
|
||||
}
|
||||
.sheet(isPresented: $showFinishSheet) {
|
||||
FinishWalkSheet(
|
||||
points: tracker.points,
|
||||
|
|
@ -269,6 +276,14 @@ struct TrackingView: View {
|
|||
tracker.startOrRequest()
|
||||
}
|
||||
|
||||
/// Vom Siri-Kurzbefehl „Gassi gehen" angestoßen: Aufnahme starten, sofern
|
||||
/// nicht schon eine läuft.
|
||||
private func startIfRequested() {
|
||||
guard launcher.pendingStart, !tracker.isTracking else { return }
|
||||
launcher.pendingStart = false
|
||||
startFresh()
|
||||
}
|
||||
|
||||
private func offerResumeIfNeeded() {
|
||||
guard !didCheckResume else { return }
|
||||
didCheckResume = true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue