From a56edd5f4fe8fe2aa1ae26804e16b41aa574b295 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 9 Sep 2022 16:35:19 +0200 Subject: [PATCH] Added same animation for audio routes menu in waiting room than while in call (+ same animation for conference layouts) --- .../ConferenceWaitingRoomViewModel.kt | 41 +++++++++++++++++-- .../conference_waiting_room_fragment.xml | 8 ++-- .../conference_waiting_room_fragment.xml | 8 ++-- 3 files changed, 46 insertions(+), 11 deletions(-) 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 174758b0d..fd1572d7e 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 @@ -20,17 +20,17 @@ package org.linphone.activities.main.conference.viewmodels import android.Manifest +import android.animation.ValueAnimator import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.main.viewmodels.MessageNotifierViewModel import org.linphone.activities.voip.ConferenceDisplayMode import org.linphone.core.* import org.linphone.core.tools.Log -import org.linphone.utils.AudioRouteUtils +import org.linphone.utils.* import org.linphone.utils.Event -import org.linphone.utils.LinphoneUtils -import org.linphone.utils.PermissionHelper class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { val subject = MutableLiveData() @@ -81,6 +81,28 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { MutableLiveData>() } + val audioRoutesMenuTranslateY = MutableLiveData() + private val audioRoutesMenuAnimator: ValueAnimator by lazy { + ValueAnimator.ofFloat(AppUtils.getDimension(R.dimen.voip_audio_routes_menu_translate_y), 0f).apply { + addUpdateListener { + val value = it.animatedValue as Float + audioRoutesMenuTranslateY.value = value + } + duration = if (corePreferences.enableAnimations) 500 else 0 + } + } + + val conferenceLayoutMenuTranslateY = MutableLiveData() + private val conferenceLayoutMenuAnimator: ValueAnimator by lazy { + ValueAnimator.ofFloat(AppUtils.getDimension(R.dimen.voip_audio_routes_menu_translate_y), 0f).apply { + addUpdateListener { + val value = it.animatedValue as Float + conferenceLayoutMenuTranslateY.value = value + } + duration = if (corePreferences.enableAnimations) 500 else 0 + } + } + private val callParams: CallParams = coreContext.core.createCallParams(null)!! private val listener: CoreListenerStub = object : CoreListenerStub() { @@ -132,6 +154,9 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { val core = coreContext.core core.addListener(listener) + audioRoutesMenuTranslateY.value = AppUtils.getDimension(R.dimen.voip_audio_routes_menu_translate_y) + conferenceLayoutMenuTranslateY.value = AppUtils.getDimension(R.dimen.voip_audio_routes_menu_translate_y) + val reachable = core.isNetworkReachable networkReachable.value = reachable if (!reachable) { @@ -217,6 +242,11 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { fun toggleAudioRoutesMenu() { audioRoutesSelected.value = audioRoutesSelected.value != true + if (audioRoutesSelected.value == true) { + audioRoutesMenuAnimator.start() + } else { + audioRoutesMenuAnimator.reverse() + } } fun setBluetoothAudioRoute() { @@ -254,6 +284,11 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() { fun toggleLayoutMenu() { layoutMenuSelected.value = layoutMenuSelected.value != true + if (layoutMenuSelected.value == true) { + conferenceLayoutMenuAnimator.start() + } else { + conferenceLayoutMenuAnimator.reverse() + } } fun setMosaicLayout() { diff --git a/app/src/main/res/layout-land/conference_waiting_room_fragment.xml b/app/src/main/res/layout-land/conference_waiting_room_fragment.xml index 7356b9812..16491bcf9 100644 --- a/app/src/main/res/layout-land/conference_waiting_room_fragment.xml +++ b/app/src/main/res/layout-land/conference_waiting_room_fragment.xml @@ -133,8 +133,8 @@ android:layout_centerHorizontal="true" android:layout_marginBottom="10dp" android:background="@drawable/shape_audio_routes_background" - android:orientation="vertical" - android:visibility="@{viewModel.audioRoutesSelected ? View.VISIBLE : View.GONE, default=gone}"> + android:translationY="@{viewModel.audioRoutesMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}" + android:orientation="vertical"> + android:translationY="@{viewModel.conferenceLayoutMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}" + android:orientation="vertical"> + android:translationY="@{viewModel.audioRoutesMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}" + android:orientation="vertical"> + android:translationY="@{viewModel.conferenceLayoutMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}" + android:orientation="vertical">