Added animation for in-call numpad

This commit is contained in:
Sylvain Berfini 2020-11-06 12:56:11 +01:00
parent 1eb4d3f4ec
commit bd77288979
5 changed files with 40 additions and 2 deletions

View file

@ -20,6 +20,7 @@
package org.linphone.activities.call.fragments
import android.Manifest
import android.animation.ValueAnimator
import android.annotation.TargetApi
import android.app.Dialog
import android.content.Intent
@ -27,7 +28,9 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.os.Bundle
import android.os.SystemClock
import androidx.lifecycle.ViewModelProvider
import com.google.android.flexbox.FlexboxLayout
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.activities.GenericFragment
import org.linphone.activities.call.viewmodels.CallsViewModel
@ -53,6 +56,9 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
override fun getLayoutId(): Int = R.layout.call_controls_fragment
// We have to use lateinit here because we need to compute the screen width first
private lateinit var numpadAnimator: ValueAnimator
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
@ -131,6 +137,18 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
}
})
controlsViewModel.toggleNumpadEvent.observe(viewLifecycleOwner, {
it.consume { open ->
if (this::numpadAnimator.isInitialized) {
if (open) {
numpadAnimator.start()
} else {
numpadAnimator.reverse()
}
}
}
})
controlsViewModel.somethingClickedEvent.observe(viewLifecycleOwner, {
it.consume {
sharedViewModel.resetHiddenInterfaceTimerInVideoCallEvent.value = Event(true)
@ -142,6 +160,22 @@ class ControlsFragment : GenericFragment<CallControlsFragmentBinding>() {
}
}
override fun onStart() {
super.onStart()
val screenWidth = requireActivity().windowManager.defaultDisplay.width.toFloat()
numpadAnimator = ValueAnimator.ofFloat(screenWidth, 0f).apply {
addUpdateListener {
val value = it.animatedValue as Float
view?.findViewById<FlexboxLayout>(R.id.numpad)?.translationX = -value
duration = if (corePreferences.enableAnimations) 500 else 0
}
}
// Hide the numpad here as we can't set the translationX property on include tag in layout
if (controlsViewModel.numpadVisibility.value == false) {
view?.findViewById<FlexboxLayout>(R.id.numpad)?.translationX = -screenWidth
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,

View file

@ -100,6 +100,10 @@ class ControlsViewModel : ViewModel() {
val audioRoutesMenuTranslateY = MutableLiveData<Float>()
val toggleNumpadEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
private val bounceAnimator: ValueAnimator by lazy {
ValueAnimator.ofFloat(AppUtils.getDimension(R.dimen.tabs_fragment_unread_count_bounce_offset), 0f).apply {
addUpdateListener {
@ -293,6 +297,7 @@ class ControlsViewModel : ViewModel() {
fun toggleNumpadVisibility() {
somethingClickedEvent.value = Event(true)
numpadVisibility.value = numpadVisibility.value != true
toggleNumpadEvent.value = Event(numpadVisibility.value ?: true)
}
fun toggleRoutesMenu() {

View file

@ -141,7 +141,6 @@
<include
layout="@layout/numpad"
android:visibility="@{controlsViewModel.numpadVisibility ? View.VISIBLE : View.GONE, default=gone}"
bind:keyListener="@{controlsViewModel.onKeyClick}"
android:layout_above="@id/primary_buttons_row"
android:layout_width="match_parent"

View file

@ -256,7 +256,6 @@
<include
layout="@layout/numpad"
android:visibility="@{controlsViewModel.numpadVisibility ? View.VISIBLE : View.GONE, default=gone}"
bind:keyListener="@{controlsViewModel.onKeyClick}"
android:layout_above="@id/primary_buttons_row"
android:layout_width="match_parent"

View file

@ -9,6 +9,7 @@
</data>
<com.google.android.flexbox.FlexboxLayout
android:id="@+id/numpad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"