fun start()

in azure-communication-ui/calling/src/main/java/com/azure/android/communication/ui/calling/presentation/fragment/calling/localuser/LocalParticipantView.kt [92:210]


    fun start(
        viewLifecycleOwner: LifecycleOwner,
        viewModel: LocalParticipantViewModel,
        videoViewManager: VideoViewManager,
        avatarViewManager: AvatarViewManager,
    ) {

        this.viewModel = viewModel
        this.videoViewManager = videoViewManager

        setupAccessibility()
        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getVideoStatusFlow().collect {
                setLocalParticipantVideo(it)
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getDisplayFullScreenAvatarFlow().collect {
                avatarHolder.visibility = if (it) View.VISIBLE else View.GONE
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getDisplayNameStateFlow().collect {
                it?.let {
                    avatar.name = it
                    pipAvatar.name = it
                    displayNameText.text = it
                    avatarViewManager.callCompositeLocalOptions?.participantViewData?.let { participantViewData ->
                        participantViewData.avatarBitmap?.let { image ->
                            avatar.avatarImageBitmap = image
                            avatar.adjustViewBounds = true
                            avatar.scaleType = participantViewData.scaleType
                            pipAvatar.avatarImageBitmap = image
                            pipAvatar.adjustViewBounds = true
                            pipAvatar.scaleType = participantViewData.scaleType
                        }
                        participantViewData.displayName?.let { name ->
                            avatar.name = name
                            pipAvatar.name = name
                            displayNameText.text = name
                        }
                    }
                }
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getLocalUserMutedStateFlow().collect { isMuted ->
                micImage.visibility = if (isMuted) View.VISIBLE else View.GONE
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getDisplaySwitchCameraButtonFlow().collect {
                switchCameraButton.visibility = if (it) View.VISIBLE else View.GONE
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getDisplayPipSwitchCameraButtonFlow().collect {
                pipSwitchCameraButton.visibility = if (it) View.VISIBLE else View.GONE
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getEnableCameraSwitchFlow().collect {
                switchCameraButton.isEnabled = it
                pipSwitchCameraButton.isEnabled = it
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getCameraDeviceSelectionFlow().collect { cameraDeviceSelectionStatus ->
                listOf(switchCameraButton, pipSwitchCameraButton).forEach {
                    it.contentDescription = context.getString(
                        when (cameraDeviceSelectionStatus) {
                            CameraDeviceSelectionStatus.FRONT -> R.string.azure_communication_ui_calling_switch_camera_button_front
                            else -> R.string.azure_communication_ui_calling_switch_camera_button_back
                        }
                    )
                }
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getIsOverlayDisplayedFlow().collect {
                if (it) {
                    ViewCompat.setImportantForAccessibility(
                        this@LocalParticipantView,
                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
                    )
                } else {
                    ViewCompat.setImportantForAccessibility(
                        this@LocalParticipantView,
                        ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES
                    )
                }
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getNumberOfRemoteParticipantsFlow().collect {
                if ((!accessibilityManager.isEnabled || isAndroidTV(context)) && it >= 1) {
                    dragTouchListener.setView(localPipWrapper)
                    localPipWrapper.setOnTouchListener(dragTouchListener)
                } else {
                    localPipWrapper.setOnTouchListener(null)
                }
            }
        }

        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getIsVisibleFlow().collect {
                visibility = if (it) View.VISIBLE else View.GONE
            }
        }
    }