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
}
}
}