override fun reduce()

in azure-communication-ui/calling/src/main/java/com/azure/android/communication/ui/calling/redux/reducer/LocalParticipantReducer.kt [19:255]


    override fun reduce(localUserState: LocalUserState, action: Action): LocalUserState {
        return when (action) {
            is LocalParticipantAction.CameraOnRequested -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PENDING)
                )
            }
            is LocalParticipantAction.CameraOnTriggered -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PENDING)
                )
            }
            is LocalParticipantAction.CameraOnSucceeded -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        operation = CameraOperationalStatus.ON,
                        error = null
                    ),
                    videoStreamID = action.videoStreamID
                )
            }
            is LocalParticipantAction.CameraOnFailed -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        operation = CameraOperationalStatus.OFF,
                        error = action.error
                    )
                )
            }

            is LocalParticipantAction.CameraOffTriggered -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PENDING)
                )
            }
            is LocalParticipantAction.CameraOffSucceeded -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.OFF),
                    videoStreamID = null
                )
            }
            is LocalParticipantAction.CameraOffFailed -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        operation = CameraOperationalStatus.ON,
                        error = action.error
                    )
                )
            }

            is LocalParticipantAction.CameraSwitchTriggered -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(device = CameraDeviceSelectionStatus.SWITCHING)
                )
            }
            is LocalParticipantAction.CameraSwitchSucceeded -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        device = action.cameraDeviceSelectionStatus,
                    )
                )
            }
            is LocalParticipantAction.CameraSwitchFailed -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        device = action.previousDevice,
                        error = action.error,
                    )
                )
            }

            is LocalParticipantAction.CameraPreviewOnRequested -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PENDING)
                )
            }

            is LocalParticipantAction.CameraPreviewOnTriggered -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PENDING)
                )
            }
            is LocalParticipantAction.CameraPreviewOnSucceeded -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        operation = CameraOperationalStatus.ON,
                        error = null
                    ),
                    videoStreamID = action.videoStreamID
                )
            }
            is LocalParticipantAction.CameraPreviewOnFailed -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        operation = CameraOperationalStatus.OFF,
                        error = action.error
                    )
                )
            }

            is LocalParticipantAction.CameraPreviewOffTriggered -> {
                localUserState.copy(
                    // in this case we go straight OFF
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.OFF),
                    videoStreamID = null
                )
            }
            is LocalParticipantAction.CameraPauseFailed -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(error = action.error)
                )
            }
            is LocalParticipantAction.CameraPauseSucceeded -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(operation = CameraOperationalStatus.PAUSED),
                    videoStreamID = null
                )
            }
            is LocalParticipantAction.CamerasCountUpdated -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(camerasCount = action.count)
                )
            }

            is LocalParticipantAction.MicPreviewOffTriggered -> {
                localUserState.copy(audioState = localUserState.audioState.copy(operation = AudioOperationalStatus.OFF))
            }
            is LocalParticipantAction.MicPreviewOnTriggered -> {
                localUserState.copy(audioState = localUserState.audioState.copy(operation = AudioOperationalStatus.ON))
            }
            is LocalParticipantAction.MicOffTriggered -> {
                localUserState.copy(audioState = localUserState.audioState.copy(operation = AudioOperationalStatus.PENDING))
            }
            is LocalParticipantAction.AudioStateOperationUpdated -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        operation = action.audioOperationalStatus,
                        error = null
                    )
                )
            }
            is LocalParticipantAction.MicOffFailed -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        operation = AudioOperationalStatus.ON,
                        error = action.error
                    )
                )
            }
            is LocalParticipantAction.MicOnTriggered -> {
                localUserState.copy(audioState = localUserState.audioState.copy(operation = AudioOperationalStatus.PENDING))
            }
            is LocalParticipantAction.MicOnFailed -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        operation = AudioOperationalStatus.OFF,
                        error = action.error
                    )
                )
            }
            is LocalParticipantAction.AudioDeviceBluetoothSCOAvailable -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        bluetoothState = localUserState.audioState.bluetoothState.copy(
                            available = action.available,
                            deviceName = action.deviceName
                        )

                    )
                )
            }
            is LocalParticipantAction.AudioDeviceHeadsetAvailable -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        isHeadphonePlugged = action.available
                    )
                )
            }
            is LocalParticipantAction.AudioDeviceChangeRequested -> {

                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        device = action.requestedAudioDevice,
                        error = null
                    )
                )
            }

            is LocalParticipantAction.AudioDeviceChangeSucceeded -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        device = action.selectedAudioDevice,
                        error = null
                    )
                )
            }
            is LocalParticipantAction.AudioDeviceChangeFailed -> {
                localUserState.copy(
                    audioState = localUserState.audioState.copy(
                        device = action.previousDevice,
                        error = action.error
                    )
                )
            }
            is LocalParticipantAction.DisplayNameIsSet -> {
                localUserState.copy(
                    displayName = action.displayName
                )
            }
            is NavigationAction.CallLaunched, is NavigationAction.CallLaunchWithoutSetup -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        transmission = CameraTransmissionStatus.REMOTE
                    )
                )
            }
            is NavigationAction.SetupLaunched -> {
                localUserState.copy(
                    cameraState = localUserState.cameraState.copy(
                        transmission = CameraTransmissionStatus.LOCAL
                    )
                )
            }
            is LocalParticipantAction.RoleChanged -> {
                localUserState.copy(
                    localParticipantRole = action.participantRole
                )
            }
            is LocalParticipantAction.SetCapabilities -> {
                localUserState.copy(
                    capabilities = action.capabilities,
                    currentCapabilitiesAreDefault = false,
                )
            }
            else -> localUserState
        }
    }