Added same animation for audio routes menu in waiting room than while in call (+ same animation for conference layouts)

This commit is contained in:
Sylvain Berfini 2022-09-09 16:35:19 +02:00
parent ee2fd51103
commit a56edd5f4f
3 changed files with 46 additions and 11 deletions

View file

@ -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<String>()
@ -81,6 +81,28 @@ class ConferenceWaitingRoomViewModel : MessageNotifierViewModel() {
MutableLiveData<Event<Boolean>>()
}
val audioRoutesMenuTranslateY = MutableLiveData<Float>()
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<Float>()
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() {

View file

@ -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">
<ImageView
android:layout_width="@dimen/voip_call_button_size"
@ -176,8 +176,8 @@
android:layout_marginEnd="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_audio_routes_background"
android:orientation="vertical"
android:visibility="@{viewModel.layoutMenuSelected ? View.VISIBLE : View.GONE, default=gone}">
android:translationY="@{viewModel.conferenceLayoutMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/voip_call_button_size"

View file

@ -137,8 +137,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">
<ImageView
android:layout_width="@dimen/voip_call_button_size"
@ -180,8 +180,8 @@
android:layout_marginEnd="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_audio_routes_background"
android:orientation="vertical"
android:visibility="@{viewModel.layoutMenuSelected ? View.VISIBLE : View.GONE, default=gone}">
android:translationY="@{viewModel.conferenceLayoutMenuTranslateY, default=@dimen/voip_audio_routes_menu_translate_y}"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/voip_call_button_size"