Files
openclaw/apps/ios/Sources/Services/NodeServiceProtocols.swift
T
Peter SteinbergerandGitHub 59b2fbbb4b feat(ios): Talk camera flip control and mic input selection (#111044)
* feat(ios): add Talk camera flip and mic selection

* chore(ios): sync native i18n inventory and locale artifacts for talk camera/mic strings

* chore(ios): commit regenerated Localizable.xcstrings for new talk strings

* fix(ios): extract Talk composer controls

* chore(ios): resync native i18n inventory and locale artifacts atop landed Android entries

* fix(ios): repair Talk composer CI checks

* chore(i18n): commit regenerated Android locale outputs from catalog reconciliation

* chore(i18n): sync Android locale outputs after rebase
2026-07-19 01:24:53 -07:00

190 lines
6.8 KiB
Swift

import CoreLocation
import Foundation
import OpenClawKit
import UIKit
typealias OpenClawCameraSnapResult = (format: String, base64: String, width: Int, height: Int)
typealias OpenClawCameraClipResult = (format: String, base64: String, durationMs: Int, hasAudio: Bool)
protocol CameraServicing: Sendable {
func listDevices() async -> [CameraController.CameraDeviceInfo]
func snap(
params: OpenClawCameraSnapParams,
defaultFacing: OpenClawCameraFacing) async throws -> OpenClawCameraSnapResult
func clip(
params: OpenClawCameraClipParams,
defaultFacing: OpenClawCameraFacing) async throws -> OpenClawCameraClipResult
}
protocol ScreenRecordingServicing: Sendable {
func record(
screenIndex: Int?,
durationMs: Int?,
fps: Double?,
includeAudio: Bool?,
outPath: String?) async throws -> String
}
@MainActor
protocol LocationServicing: Sendable {
func authorizationStatus() -> CLAuthorizationStatus
func accuracyAuthorization() -> CLAccuracyAuthorization
func ensureAuthorization(mode: OpenClawLocationMode) async -> CLAuthorizationStatus
func currentLocation(
params: OpenClawLocationGetParams,
desiredAccuracy: OpenClawLocationAccuracy,
maxAgeMs: Int?,
timeoutMs: Int?) async throws -> CLLocation
func setBackgroundLocationUpdatesEnabled(_ enabled: Bool)
func setAuthorizationChangeHandler(
_ handler: @escaping @MainActor @Sendable (CLAuthorizationStatus) -> Void)
func startMonitoringSignificantLocationChanges(onUpdate: @escaping @Sendable (CLLocation) -> Void)
func stopMonitoringSignificantLocationChanges()
}
@MainActor
protocol DeviceStatusServicing: Sendable {
func status() async throws -> OpenClawDeviceStatusPayload
func info() -> OpenClawDeviceInfoPayload
}
protocol PhotosServicing: Sendable {
func latest(params: OpenClawPhotosLatestParams) async throws -> OpenClawPhotosLatestPayload
}
protocol ContactsServicing: Sendable {
func search(params: OpenClawContactsSearchParams) async throws -> OpenClawContactsSearchPayload
func add(params: OpenClawContactsAddParams) async throws -> OpenClawContactsAddPayload
}
protocol CalendarServicing: Sendable {
func events(params: OpenClawCalendarEventsParams) async throws -> OpenClawCalendarEventsPayload
func add(params: OpenClawCalendarAddParams) async throws -> OpenClawCalendarAddPayload
}
protocol RemindersServicing: Sendable {
func list(params: OpenClawRemindersListParams) async throws -> OpenClawRemindersListPayload
func add(params: OpenClawRemindersAddParams) async throws -> OpenClawRemindersAddPayload
}
protocol MotionServicing: Sendable {
func activities(params: OpenClawMotionActivityParams) async throws -> OpenClawMotionActivityPayload
func pedometer(params: OpenClawPedometerParams) async throws -> OpenClawPedometerPayload
}
struct WatchMessagingStatus: Equatable {
var supported: Bool
var paired: Bool
var appInstalled: Bool
var reachable: Bool
var activationState: String
}
struct WatchQuickReplyEvent: Codable, Equatable {
var replyId: String
var promptId: String
var actionId: String
var actionLabel: String?
var sessionKey: String?
var gatewayStableID: String?
var note: String?
var sentAtMs: Int64?
var transport: String
}
enum WatchMessageKind: String, Codable, Equatable {
case chat
case quickReply
}
struct WatchExecApprovalResolveEvent: Codable, Equatable {
var replyId: String
var approvalId: String
var gatewayStableID: String?
var decision: OpenClawWatchExecApprovalDecision
var sentAtMs: Int64?
var transport: String
}
struct WatchExecApprovalSnapshotRequestItem: Equatable {
var approvalId: String
var activeResolutionAttemptId: String?
}
struct WatchExecApprovalSnapshotRequestEvent: Equatable {
var requestId: String
var gatewayStableID: String?
var heldApprovals: [WatchExecApprovalSnapshotRequestItem]
var sentAtMs: Int64?
var transport: String
init(
requestId: String,
gatewayStableID: String? = nil,
heldApprovals: [WatchExecApprovalSnapshotRequestItem] = [],
sentAtMs: Int64?,
transport: String)
{
self.requestId = requestId
self.gatewayStableID = gatewayStableID
self.heldApprovals = heldApprovals
self.sentAtMs = sentAtMs
self.transport = transport
}
}
struct WatchAppSnapshotRequestEvent: Equatable {
var requestId: String
var sentAtMs: Int64?
var transport: String
}
struct WatchAppCommandEvent: Codable, Equatable {
var commandId: String
var command: OpenClawWatchAppCommand
var sessionKey: String?
var gatewayStableID: String?
var text: String?
var sentAtMs: Int64?
var transport: String
var messageKind: WatchMessageKind?
}
struct WatchNotificationSendResult: Equatable {
var deliveredImmediately: Bool
var queuedForDelivery: Bool
var transport: String
}
protocol WatchMessagingServicing: AnyObject, Sendable {
func status() async -> WatchMessagingStatus
func setStatusHandler(_ handler: (@Sendable (WatchMessagingStatus) -> Void)?)
func setReplyHandler(_ handler: (@Sendable (WatchQuickReplyEvent) -> Void)?)
func setExecApprovalResolveHandler(_ handler: (@Sendable (WatchExecApprovalResolveEvent) -> Void)?)
func setExecApprovalSnapshotRequestHandler(
_ handler: (@Sendable (WatchExecApprovalSnapshotRequestEvent) -> Void)?)
func setAppSnapshotRequestHandler(_ handler: (@Sendable (WatchAppSnapshotRequestEvent) -> Void)?)
func setAppCommandHandler(_ handler: (@Sendable (WatchAppCommandEvent) -> Void)?)
func sendDirectNodeSetup(setupCode: String) async throws -> WatchNotificationSendResult
func sendNotification(
id: String,
params: OpenClawWatchNotifyParams,
gatewayStableID: String?) async throws -> WatchNotificationSendResult
func sendExecApprovalPrompt(
_ message: OpenClawWatchExecApprovalPromptMessage) async throws -> WatchNotificationSendResult
func sendExecApprovalResolved(
_ message: OpenClawWatchExecApprovalResolvedMessage) async throws -> WatchNotificationSendResult
func sendExecApprovalExpired(
_ message: OpenClawWatchExecApprovalExpiredMessage) async throws -> WatchNotificationSendResult
func syncExecApprovalSnapshot(
_ message: OpenClawWatchExecApprovalSnapshotMessage) async throws -> WatchNotificationSendResult
func syncAppSnapshot(
_ message: OpenClawWatchAppSnapshotMessage) async throws -> WatchNotificationSendResult
func sendChatCompletion(
_ message: OpenClawWatchChatCompletionMessage) async throws -> WatchNotificationSendResult
}
extension CameraController: CameraServicing {}
extension ScreenRecordService: ScreenRecordingServicing {}
extension LocationService: LocationServicing {}