From 98aae5af3772e51140f4d38ebedce7450f79392d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 7 Sep 2022 13:52:37 +0200 Subject: [PATCH] Fixed active speaker conference layout when alone or 2 for foldables + fixed UI issues --- app/build.gradle | 2 +- .../voip/fragments/ConferenceCallFragment.kt | 64 ++++++++++--------- .../voip_conference_active_speaker.xml | 2 +- .../layout/voip_conference_active_speaker.xml | 2 +- 4 files changed, 38 insertions(+), 32 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1d132fab6..160034d18 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -217,7 +217,7 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:$nav_version" implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0" - implementation 'androidx.constraintlayout:constraintlayout:2.2.0-alpha03' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation "androidx.gridlayout:gridlayout:1.0.0" implementation 'androidx.recyclerview:recyclerview:1.3.0-beta02' diff --git a/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceCallFragment.kt b/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceCallFragment.kt index d0c19d1c3..eff1aefc9 100644 --- a/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceCallFragment.kt +++ b/app/src/main/java/org/linphone/activities/voip/fragments/ConferenceCallFragment.kt @@ -258,6 +258,8 @@ class ConferenceCallFragment : GenericFragment(inflated) binding?.lifecycleOwner = viewLifecycleOwner startTimer(R.id.active_conference_timer) + + adjustActiveSpeakerLayout() } binding.stubbedConferenceGridLayout.setOnInflateListener { _, inflated -> @@ -304,17 +306,8 @@ class ConferenceCallFragment : GenericFragment switchToActiveSpeakerLayoutWhenAlone() - 2 -> switchToActiveSpeakerLayoutForTwoParticipants() - else -> switchToActiveSpeakerLayoutForMoreThanTwoParticipants() - } + if (conferenceViewModel.conferenceDisplayMode.value == ConferenceDisplayMode.ACTIVE_SPEAKER) { + adjustActiveSpeakerLayout() } } @@ -397,19 +390,39 @@ class ConferenceCallFragment : GenericFragment switchToActiveSpeakerLayoutWhenAlone() + 2 -> switchToActiveSpeakerLayoutForTwoParticipants() + else -> switchToActiveSpeakerLayoutForMoreThanTwoParticipants() + } + } + } + + private fun getConstraintSet(constraintLayout: ConstraintLayout): ConstraintSet { + val set = ConstraintSet() + set.clone(constraintLayout) + + set.clear(R.id.local_participant_background, ConstraintSet.TOP) + set.clear(R.id.local_participant_background, ConstraintSet.START) + set.clear(R.id.local_participant_background, ConstraintSet.LEFT) + set.clear(R.id.local_participant_background, ConstraintSet.BOTTOM) + set.clear(R.id.local_participant_background, ConstraintSet.END) + set.clear(R.id.local_participant_background, ConstraintSet.RIGHT) + + return set + } + private fun switchToActiveSpeakerLayoutForMoreThanTwoParticipants() { if (conferenceViewModel.conferenceDisplayMode.value != ConferenceDisplayMode.ACTIVE_SPEAKER) return val constraintLayout = binding.root.findViewById(R.id.conference_constraint_layout) ?: return - val set = ConstraintSet() - set.clone(constraintLayout) - - set.clear(R.id.local_participant_background, ConstraintSet.TOP) - set.clear(R.id.local_participant_background, ConstraintSet.START) - set.clear(R.id.local_participant_background, ConstraintSet.BOTTOM) - set.clear(R.id.local_participant_background, ConstraintSet.END) + val set = getConstraintSet(constraintLayout) val margin = resources.getDimension(R.dimen.voip_active_speaker_miniature_margin).toInt() val portraitOrientation = resources.configuration.orientation != Configuration.ORIENTATION_LANDSCAPE @@ -483,19 +496,13 @@ class ConferenceCallFragment : GenericFragment(R.id.conference_constraint_layout) ?: return - val set = ConstraintSet() - set.clone(constraintLayout) - - set.clear(R.id.local_participant_background, ConstraintSet.TOP) - set.clear(R.id.local_participant_background, ConstraintSet.START) - set.clear(R.id.local_participant_background, ConstraintSet.BOTTOM) - set.clear(R.id.local_participant_background, ConstraintSet.END) + val set = getConstraintSet(constraintLayout) val margin = resources.getDimension(R.dimen.voip_active_speaker_miniature_margin).toInt() set.connect( R.id.local_participant_background, ConstraintSet.BOTTOM, - R.id.conference_constraint_layout, + R.id.hinge_bottom, ConstraintSet.BOTTOM, margin ) @@ -532,13 +539,12 @@ class ConferenceCallFragment : GenericFragment(R.id.conference_constraint_layout) ?: return - val set = ConstraintSet() - set.clone(constraintLayout) + val set = getConstraintSet(constraintLayout) set.connect( R.id.local_participant_background, ConstraintSet.BOTTOM, - R.id.conference_constraint_layout, + R.id.hinge_bottom, ConstraintSet.BOTTOM, 0 ) diff --git a/app/src/main/res/layout-land/voip_conference_active_speaker.xml b/app/src/main/res/layout-land/voip_conference_active_speaker.xml index 596419aa8..45325bde4 100644 --- a/app/src/main/res/layout-land/voip_conference_active_speaker.xml +++ b/app/src/main/res/layout-land/voip_conference_active_speaker.xml @@ -224,7 +224,7 @@ app:layout_constraintTop_toBottomOf="@id/top_barrier" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toBottomOf="@id/hinge_bottom" android:layout_marginTop="@{controlsViewModel.fullScreenMode ? @dimen/margin_0dp : @dimen/voip_active_speaker_top_margin, default=@dimen/voip_active_speaker_top_margin}" android:background="@drawable/shape_remote_background" android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"/> diff --git a/app/src/main/res/layout/voip_conference_active_speaker.xml b/app/src/main/res/layout/voip_conference_active_speaker.xml index a0c5b7404..fd56103a6 100644 --- a/app/src/main/res/layout/voip_conference_active_speaker.xml +++ b/app/src/main/res/layout/voip_conference_active_speaker.xml @@ -224,7 +224,7 @@ app:layout_constraintTop_toBottomOf="@id/top_barrier" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toBottomOf="@id/hinge_bottom" android:layout_marginTop="@{controlsViewModel.fullScreenMode ? @dimen/margin_0dp : @dimen/voip_active_speaker_top_margin, default=@dimen/voip_active_speaker_top_margin}" android:background="@drawable/shape_remote_background" android:onClick="@{() -> controlsViewModel.toggleFullScreen()}"/>