import Foundation /// Maps a detected call app to its screen-reading adapter. One place to wire new /// adapters; `VisualObserver` is constructed from whatever this returns when the /// live visual capture is integrated into the session. enum AdapterRegistry { /// The adapter for a detected app, or nil if that app has no visual adapter /// yet (the session then runs audio-only — graceful degradation). static func adapter(for app: CallDetector.DetectedApp) -> (any AppAdapter)? { switch app { case .signal: return SignalAdapter() case .meet: return MeetAdapter() case .zoom: return ZoomAdapter() case .teams: return TeamsAdapter() } } }