AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/LocalUserState.swift (140 lines of code) (raw):

// // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. // import Foundation struct LocalUserState { enum CameraOperationalStatus: Equatable { case on case off case paused case pending static func == (lhs: LocalUserState.CameraOperationalStatus, rhs: LocalUserState.CameraOperationalStatus) -> Bool { switch (lhs, rhs) { case (.on, .on), (.off, .off), (.paused, paused), (.pending, .pending): return true default: return false } } } enum CameraDeviceSelectionStatus: Equatable { case front case back case switching static func == (lhs: LocalUserState.CameraDeviceSelectionStatus, rhs: LocalUserState.CameraDeviceSelectionStatus) -> Bool { switch (lhs, rhs) { case (.front, .front), (.back, .back), (.switching, switching): return true default: return false } } } enum CameraTransmissionStatus: Equatable { case local case remote static func == (lhs: LocalUserState.CameraTransmissionStatus, rhs: LocalUserState.CameraTransmissionStatus) -> Bool { switch (lhs, rhs) { case (.local, .local), (.remote, .remote): return true default: return false } } } enum AudioOperationalStatus: Equatable { case on case off case pending static func == (lhs: LocalUserState.AudioOperationalStatus, rhs: LocalUserState.AudioOperationalStatus) -> Bool { switch (lhs, rhs) { case (.on, .on), (.off, .off), (.pending, .pending): return true default: return false } } } enum AudioDeviceSelectionStatus: Equatable { case speakerSelected case speakerRequested case receiverSelected case receiverRequested case bluetoothSelected case bluetoothRequested case headphonesSelected case headphonesRequested static func == (lhs: LocalUserState.AudioDeviceSelectionStatus, rhs: LocalUserState.AudioDeviceSelectionStatus) -> Bool { switch (lhs, rhs) { case (.speakerSelected, .speakerSelected), (.speakerRequested, .speakerRequested), (.receiverSelected, receiverSelected), (.receiverRequested, .receiverRequested), (.bluetoothSelected, bluetoothSelected), (.bluetoothRequested, .bluetoothRequested), (.headphonesSelected, headphonesSelected), (.headphonesRequested, .headphonesRequested): return true default: return false } } static func isSelected(for audioDeviceStatus: LocalUserState.AudioDeviceSelectionStatus) -> Bool { switch audioDeviceStatus { case .speakerSelected, .receiverSelected, .bluetoothSelected, .headphonesSelected: return true default: return false } } } struct CameraState { let operation: CameraOperationalStatus let device: CameraDeviceSelectionStatus let transmission: CameraTransmissionStatus var error: Error? } struct AudioState { let operation: AudioOperationalStatus let device: AudioDeviceSelectionStatus var error: Error? } let cameraState: CameraState let audioState: AudioState let displayName: String? let userId: String? let localVideoStreamIdentifier: String? let participantRole: ParticipantRoleEnum? let capabilities: Set<ParticipantCapabilityType> let currentCapabilitiesAreDefault: Bool init(cameraState: CameraState = CameraState(operation: .off, device: .front, transmission: .local), audioState: AudioState = AudioState(operation: .off, device: .receiverSelected), displayName: String? = nil, userId: String? = nil, localVideoStreamIdentifier: String? = nil, participantRole: ParticipantRoleEnum? = nil, capabilities: Set<ParticipantCapabilityType> = [.unmuteMicrophone, .turnVideoOn], currentCapabilitiesAreDefault: Bool = true) { self.cameraState = cameraState self.audioState = audioState self.displayName = displayName self.userId = userId self.localVideoStreamIdentifier = localVideoStreamIdentifier self.participantRole = participantRole self.capabilities = capabilities self.currentCapabilitiesAreDefault = currentCapabilitiesAreDefault } }