Live Activity Launch Consistency
Nucleic-Session: 9D2EE9AB-2E44-485B-A196-54D250F9D89B Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
@@ -1584,6 +1584,32 @@ final class RemoteStore: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tell every capable, live host the current foreground state so it can pick the Live Activity
|
||||||
|
/// path: defer to the phone's own creation while foreground, or push-to-start the glance while
|
||||||
|
/// backgrounded (UX_IOS §5.3). De-duped per host against the value already sent; the set is
|
||||||
|
/// cleared by `setForegroundState` when the value flips, and a host that dropped re-learns it when
|
||||||
|
/// it returns (via the `didUpdate` re-sync). Gated on the dedicated capability bit — an older host
|
||||||
|
/// (even one advertising push-to-start) throws on the unknown `setForeground` tag.
|
||||||
|
private func syncForegroundState() {
|
||||||
|
foregroundSentTo = foregroundSentTo.filter { connections[$0]?.connectivity.isLive == true }
|
||||||
|
for (id, conn) in connections {
|
||||||
|
guard conn.connectivity.isLive, conn.capabilities.canReceiveForegroundState,
|
||||||
|
!foregroundSentTo.contains(id) else { continue }
|
||||||
|
conn.send(.setForeground(isForeground))
|
||||||
|
foregroundSentTo.insert(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Record a foreground/background transition and push it to the hosts. No-op when unchanged so an
|
||||||
|
/// `inactive`↔`active` flutter (or a repeat call) doesn't re-notify; on a real flip it clears the
|
||||||
|
/// per-host dedup so `syncForegroundState` re-sends to everyone.
|
||||||
|
private func setForegroundState(_ foreground: Bool) {
|
||||||
|
guard isForeground != foreground else { return }
|
||||||
|
isForeground = foreground
|
||||||
|
foregroundSentTo.removeAll()
|
||||||
|
syncForegroundState()
|
||||||
|
}
|
||||||
|
|
||||||
// MARK: - Demo simulator (offline, interactive)
|
// MARK: - Demo simulator (offline, interactive)
|
||||||
//
|
//
|
||||||
// In demo mode there's no host, so writes can't go over the wire. Instead they mutate the
|
// In demo mode there's no host, so writes can't go over the wire. Instead they mutate the
|
||||||
|
|||||||
Reference in New Issue
Block a user