diff --git a/app/build.gradle b/app/build.gradle index 0623451de..7a2d2d03b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -172,11 +172,10 @@ dependencies { implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.navigation:navigation-fragment-ktx:2.3.1' implementation 'androidx.navigation:navigation-ui-ktx:2.3.1' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' implementation 'com.google.android.material:material:1.2.1' implementation 'com.google.android:flexbox:2.0.0' diff --git a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt index 1ce93b273..ab436f2de 100644 --- a/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt +++ b/app/src/main/java/org/linphone/activities/call/fragments/ControlsFragment.kt @@ -81,6 +81,16 @@ class ControlsFragment : GenericFragment() { } } + private val audioRoutesMenuAnimator: ValueAnimator by lazy { + ValueAnimator.ofFloat(resources.getDimension(R.dimen.call_audio_routes_menu_translate_y), 0f).apply { + addUpdateListener { + val value = it.animatedValue as Float + view?.findViewById(R.id.audio_routes_menu)?.translationY = value + } + duration = if (corePreferences.enableAnimations) 500 else 0 + } + } + override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) @@ -169,6 +179,16 @@ class ControlsFragment : GenericFragment() { } }) + controlsViewModel.toggleAudioRoutesMenuEvent.observe(viewLifecycleOwner, { + it.consume { open -> + if (open) { + audioRoutesMenuAnimator.start() + } else { + audioRoutesMenuAnimator.reverse() + } + } + }) + controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, { it.consume { sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true) diff --git a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt index 30b719bfa..4eed33765 100644 --- a/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/call/viewmodels/ControlsViewModel.kt @@ -87,6 +87,10 @@ class ControlsViewModel : ViewModel() { MutableLiveData>() } + val toggleAudioRoutesMenuEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + val somethingClickedEvent = MutableLiveData>() val chatAllowed = !LinphoneApplication.corePreferences.disableChat @@ -249,6 +253,7 @@ class ControlsViewModel : ViewModel() { fun toggleRoutesMenu() { somethingClickedEvent.value = Event(true) audioRoutesVisibility.value = audioRoutesVisibility.value != true + toggleAudioRoutesMenuEvent.value = Event(audioRoutesVisibility.value ?: true) } fun toggleRecording(closeMenu: Boolean) { diff --git a/app/src/main/res/layout/call_secondary_buttons.xml b/app/src/main/res/layout/call_secondary_buttons.xml index 615b9000e..3d4d1e682 100644 --- a/app/src/main/res/layout/call_secondary_buttons.xml +++ b/app/src/main/res/layout/call_secondary_buttons.xml @@ -100,12 +100,52 @@ android:padding="15dp" android:src="@drawable/speaker" /> + + + + + + + + + + - - - - - - 35dp 60dp 300dp + 240dp \ No newline at end of file