override fun onViewCreated()

in app/src/main/java/com/amazon/ivs/broadcast/ui/fragments/main/MainFragment.kt [65:290]


    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        Timber.d("onViewCreated")

        preferences.isOnboardingDone = true
        configurationViewModel.resolution.orientation = configurationViewModel.orientationId
        updateControlPanelVisibility(requireContext().isViewLandscape(), true)
        if (!viewModel.isStreamOnline()) {
            configurationViewModel.isLandscape = requireContext().isViewLandscape()
            viewModel.resetSession()
            configurationViewModel.isConfigurationChanged = false
            binding.videoConfiguration = configurationViewModel.newestConfiguration.video
            binding.topBarUpdate = StreamTopBarModel(streamStatus = DISCONNECTED)
        } else {
            binding.videoConfiguration = viewModel.sessionConfiguration.consumedValue?.video
            viewModel.reloadDevices()
        }

        binding.isStreamMuted = viewModel.isStreamMuted
        binding.isCameraOff = viewModel.isCameraOff
        binding.isScreenCaptureOn = viewModel.isScreenCaptureEnabled()
        binding.useCustomResolution = configurationViewModel.useCustomResolution
        binding.broadcastBottomSheet.showDebugInfo.setVisible(configurationViewModel.developerMode)

        bottomSheet.peekHeight =
            if (configurationViewModel.developerMode) resources.getDimension(R.dimen.bottom_sheet_developer_peek_height)
                .toInt() else resources.getDimension(R.dimen.bottom_sheet_peek_height).toInt()

        if (configurationViewModel.useCustomResolution) {
            binding.streamFramerate.text = getString(R.string.fps_template, configurationViewModel.framerate)
            binding.broadcastSideSheet.streamFramerateLandscape.text =
                getString(R.string.fps_template, configurationViewModel.framerate)
            binding.streamQuality.text = getString(
                R.string.resolution_template,
                configurationViewModel.resolution.width.toInt(),
                configurationViewModel.resolution.height.toInt(),
            )
            binding.broadcastSideSheet.streamQualityLandscape.text = getString(
                R.string.resolution_template,
                configurationViewModel.resolution.width.toInt(),
                configurationViewModel.resolution.height.toInt(),
            )
        } else {
            binding.streamQuality.text = getString(
                R.string.quality_template,
                configurationViewModel.resolution.shortestSide.toInt(),
                configurationViewModel.framerate
            )
            binding.broadcastSideSheet.streamQualityLandscape.text = getString(
                R.string.quality_template,
                configurationViewModel.resolution.shortestSide.toInt(),
                configurationViewModel.framerate
            )
        }

        binding.isViewLandscape = requireContext().isViewLandscape()

        binding.streamSettings.setOnClickListener {
            onSettingsClick()
        }

        binding.broadcastSideSheet.landscapeSettingsButton.setOnClickListener {
            onSettingsClick()
        }

        binding.broadcastBottomSheet.showDebugInfo.setOnClickListener {
            bottomSheet.setCollapsed()
            binding.debugInfo.setVisible()
            binding.broadcastBottomSheet.showDebugInfo.setVisible(false, View.INVISIBLE)
        }

        binding.hideDebugInfo.setOnClickListener {
            binding.debugInfo.setVisible(false)
            binding.broadcastBottomSheet.showDebugInfo.setVisible()
        }

        binding.streamContainer.setOnClickListener {
            bottomSheet.state = when (bottomSheet.state) {
                BottomSheetBehavior.STATE_COLLAPSED -> BottomSheetBehavior.STATE_HIDDEN
                BottomSheetBehavior.STATE_HIDDEN -> BottomSheetBehavior.STATE_COLLAPSED
                else -> BottomSheetBehavior.STATE_COLLAPSED
            }
        }
        binding.broadcastSideSheet.motionLayout.setVisible(requireActivity().isViewLandscape())

        binding.broadcastSideSheet.screenCaptureOn.setOnClickListener {
            updateSideSheetState()
        }
        binding.broadcastSideSheet.streamContainerLandscape.setOnClickListener {
            updateSideSheetState()
        }
        binding.broadcastBottomSheet.sendMetadata.setOnClickListener {
            onSendMetadataButtonClick()
        }
        binding.popupContainer.setOnClickListener {
            clearPopUp()
        }
        binding.broadcastBottomSheet.inviteToWatch.setOnClickListener {
            onInviteToWatchClick()
        }
        binding.broadcastSideSheet.inviteToWatch.setOnClickListener {
            onInviteToWatchClick()
        }
        binding.broadcastBottomSheet.broadcastMute.setOnClickListener {
            onMuteButtonClick()
        }
        binding.broadcastBottomSheet.broadcastCamera.setOnClickListener {
            onCameraButtonClick()
        }
        binding.broadcastBottomSheet.broadcastFlip.setOnClickListener {
            onFlipCameraButtonClick()
        }
        binding.broadcastBottomSheet.broadcastGoLive.setOnClickListener {
            onGoLiveButtonClick()
        }
        binding.broadcastBottomSheet.shareScreen.setOnClickListener {
            startScreenCapture()
        }
        binding.stopScreenShareCenterButton.setOnClickListener {
            viewModel.stopScreenShare()
        }
        binding.broadcastBottomSheet.stopScreenShareMenuButton.setOnClickListener {
            viewModel.stopScreenShare()
        }
        binding.broadcastSideSheet.stopScreenShareMenuButton.setOnClickListener {
            viewModel.stopScreenShare()
        }
        binding.broadcastSideSheet.stopScreenShareCenterButton.setOnClickListener {
            viewModel.stopScreenShare()
        }
        binding.broadcastSideSheet.broadcastCamera.setOnClickListener {
            onCameraButtonClick()
        }
        binding.broadcastSideSheet.broadcastFlip.setOnClickListener {
            onFlipCameraButtonClick()
        }
        binding.broadcastSideSheet.broadcastMute.setOnClickListener {
            onMuteButtonClick()
        }
        binding.broadcastSideSheet.broadcastGoLive.setOnClickListener {
            onGoLiveButtonClick()
        }
        binding.broadcastSideSheet.shareScreen.setOnClickListener {
            startScreenCapture()
        }
        binding.broadcastSideSheet.sendMetadata.setOnClickListener {
            onSendMetadataButtonClick()
        }

        binding.copyButton.setOnClickListener {
            val deviceHealth = viewModel.onDeviceHealthUpdate.consumedValue
            val json = JsonObject()
            json.addProperty("MEM", deviceHealth?.usedMemory)
            json.addProperty("TEMP", deviceHealth?.cpuTemp)
            json.add("VideoConfig", Gson().toJsonTree(viewModel.sessionConfiguration.consumedValue?.video))
            copyToClipBoard(json.toString())
        }

        viewModel.sessionConfiguration.observeConsumable(this) { config ->
            binding.videoConfiguration = config.video
        }

        viewModel.errorHappened.observeConsumable(this) { error ->
            showPopup(PopupModel(getString(R.string.error), error.second, PopupType.ERROR))
        }

        viewModel.isScreenShareEnabled.observeConsumable(viewLifecycleOwner) { isScreenCaptureOn ->
            Timber.d("On stream mode changed: IS screenshare on $isScreenCaptureOn")
            binding.isScreenCaptureOn = isScreenCaptureOn
            changeMiniPlayerConstraints()
            when {
                isScreenCaptureOn && !viewModel.isStreamOnline() -> showOfflineScreenShareAlert()
                !isScreenCaptureOn && !viewModel.isStreamOnline() -> clearPopUp()
                !isScreenCaptureOn && viewModel.isStreamOnline() && viewModel.isCameraOff -> {
                    binding.cameraOffSlotContainer.doOnLayout {
                        scaleToMatchResolution(it)
                    }
                }
            }
        }

        viewModel.onStreamStatusChanged.observeConsumable(viewLifecycleOwner) { streamStatus ->
            when (streamStatus) {
                CONNECTING -> {
                    binding.topBarUpdate = StreamTopBarModel(
                        streamStatus = CONNECTING,
                        pillBackground = R.drawable.bg_connecting_pill
                    )
                }
                DISCONNECTED -> {
                    binding.topBarUpdate = StreamTopBarModel(
                        streamStatus = DISCONNECTED,
                        pillBackground = R.drawable.bg_offline_pill
                    )
                    if (viewModel.isScreenCaptureEnabled()) {
                        showOfflineScreenShareAlert()
                    }
                }
                else -> { /* Ignore */ }
            }
        }

        viewModel.onStreamDataChanged.observeConsumable(viewLifecycleOwner) { topBarModel ->
            binding.topBarUpdate = StreamTopBarModel(
                formattedTime = formatTime(topBarModel.seconds),
                formattedNetwork = formatTopBarNetwork(topBarModel.usedMegaBytes),
                streamStatus = CONNECTED,
                pillBackground = R.drawable.bg_online_pill
            )
            if (binding.popupUpdate?.type == PopupType.WARNING) {
                clearPopUp()
            }
        }

        viewModel.onDeviceHealthUpdate.observeConsumable(viewLifecycleOwner) { deviceHealth ->
            binding.deviceHealthUpdate = deviceHealth
        }

        viewModel.cameraPreview.observeConsumable(viewLifecycleOwner) { textureView ->
            switchStreamContainer(textureView)
        }

        viewModel.onDevicesReloaded.observeConsumable(viewLifecycleOwner) {
            binding.isCameraOff = viewModel.isCameraOff
        }
    }