From 97574157ed95bc9da586b43f9d8e95d281bbcd1d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 23 Feb 2022 14:02:03 +0100 Subject: [PATCH] Added audio only conference layout --- .../ConferenceWaitingRoomViewModel.kt | 4 + .../ConferencesSettingsViewModel.kt | 3 + .../ActiveCallOrConferenceFragment.kt | 15 ++ .../fragments/ConferenceLayoutFragment.kt | 14 ++ .../voip/viewmodels/ConferenceViewModel.kt | 5 +- .../java/org/linphone/core/CoreContext.kt | 3 + ...oip_active_call_or_conference_fragment.xml | 10 ++ .../res/layout/voip_conference_audio_only.xml | 140 ++++++++++++++++++ 8 files changed, 192 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/voip_conference_audio_only.xml diff --git a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt index 14268c6af..8625c6168 100644 --- a/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/conference/viewmodels/ConferenceWaitingRoomViewModel.kt @@ -133,6 +133,10 @@ class ConferenceWaitingRoomViewModel : ViewModel() { } fun start() { + // Hide menus + audioRoutesSelected.value = false + layoutMenuSelected.value = false + joinInProgress.value = true joinConferenceEvent.value = Event(callParams) } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ConferencesSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ConferencesSettingsViewModel.kt index 52d1c005c..07c593fb0 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ConferencesSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/ConferencesSettingsViewModel.kt @@ -48,6 +48,9 @@ class ConferencesSettingsViewModel : GenericSettingsViewModel() { labels.add(prefs.getString(R.string.conference_display_mode_mosaic)) layoutValues.add(ConferenceLayout.Grid.toInt()) + labels.add(prefs.getString(R.string.conference_display_mode_audio_only)) + layoutValues.add(ConferenceLayout.Legacy.toInt()) // TODO: FIXME: Use AudioOnly + layoutLabels.value = labels layoutIndex.value = layoutValues.indexOf(core.defaultConferenceLayout.toInt()) } diff --git a/app/src/main/java/org/linphone/activities/voip/fragments/ActiveCallOrConferenceFragment.kt b/app/src/main/java/org/linphone/activities/voip/fragments/ActiveCallOrConferenceFragment.kt index c61f22a40..4b5003241 100644 --- a/app/src/main/java/org/linphone/activities/voip/fragments/ActiveCallOrConferenceFragment.kt +++ b/app/src/main/java/org/linphone/activities/voip/fragments/ActiveCallOrConferenceFragment.kt @@ -115,6 +115,14 @@ class ActiveCallOrConferenceFragment : GenericFragment + Log.i("[Call] Audio only conference layout inflated") + val binding = DataBindingUtil.bind(inflated) + binding?.lifecycleOwner = viewLifecycleOwner + startTimer(R.id.audio_only_conference_timer) + } + binding.stubbedAudioRoutes.setOnInflateListener { _, inflated -> val binding = DataBindingUtil.bind(inflated) binding?.lifecycleOwner = viewLifecycleOwner diff --git a/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceLayoutFragment.kt b/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceLayoutFragment.kt index ae01dcb17..8c70d994a 100644 --- a/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceLayoutFragment.kt +++ b/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceLayoutFragment.kt @@ -74,6 +74,20 @@ class ConferenceLayoutFragment : GenericFragment maxParticipantsForMosaicLayout) { + if (count > maxParticipantsForMosaicLayout && conferenceMosaicDisplayMode.value == true) { Log.w("[Conference] More than $maxParticipantsForMosaicLayout participants ($count), forcing active speaker layout") conferenceMosaicDisplayMode.value = false conferenceActiveSpeakerDisplayMode.value = true @@ -292,8 +292,9 @@ class ConferenceViewModel : ViewModel() { private fun updateConferenceLayout(conference: Conference) { val layout = conference.layout - conferenceMosaicDisplayMode.value = layout == ConferenceLayout.Grid || layout == ConferenceLayout.Legacy + conferenceMosaicDisplayMode.value = layout == ConferenceLayout.Grid conferenceActiveSpeakerDisplayMode.value = layout == ConferenceLayout.ActiveSpeaker + conferenceAudioOnlyDisplayMode.value = layout == ConferenceLayout.Legacy // TODO: FIXME: Use AudioOnly layout Log.i("[Conference] Conference current layout is: $layout") } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 99b216b69..c3744cdf1 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -354,6 +354,9 @@ class CoreContext(val context: Context, coreConfig: Config) { core.isVibrationOnIncomingCallEnabled = true core.config.setBool("app", "incoming_call_vibration", false) } + if (core.defaultConferenceLayout == ConferenceLayout.Legacy) { + core.defaultConferenceLayout = ConferenceLayout.ActiveSpeaker + } initUserCertificates() diff --git a/app/src/main/res/layout/voip_active_call_or_conference_fragment.xml b/app/src/main/res/layout/voip_active_call_or_conference_fragment.xml index 4e5f52de4..96aa3b285 100644 --- a/app/src/main/res/layout/voip_active_call_or_conference_fragment.xml +++ b/app/src/main/res/layout/voip_active_call_or_conference_fragment.xml @@ -59,6 +59,16 @@ app:conferenceViewModel="@{conferenceViewModel}" app:controlsViewModel="@{controlsViewModel}"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file