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