From bd772889795888bf3c14c6742d356aa2ae97d6e6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 6 Nov 2020 12:56:11 +0100 Subject: [PATCH] Added animation for in-call numpad --- .../call/fragments/ControlsFragment.kt | 34 +++++++++++++++++++ .../call/viewmodels/ControlsViewModel.kt | 5 +++ .../layout-land/call_controls_fragment.xml | 1 - .../res/layout/call_controls_fragment.xml | 1 - app/src/main/res/layout/numpad.xml | 1 + 5 files changed, 40 insertions(+), 2 deletions(-) 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 4d48b976a..6d1f44e45 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 @@ -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() { 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() { } }) + 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() { } } + 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(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(R.id.numpad)?.translationX = -screenWidth + } + } + override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, 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 aa2c2c826..a865a6ad5 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 @@ -100,6 +100,10 @@ class ControlsViewModel : ViewModel() { val audioRoutesMenuTranslateY = MutableLiveData() + val toggleNumpadEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + 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() { diff --git a/app/src/main/res/layout-land/call_controls_fragment.xml b/app/src/main/res/layout-land/call_controls_fragment.xml index e09b37488..20dd6c62e 100644 --- a/app/src/main/res/layout-land/call_controls_fragment.xml +++ b/app/src/main/res/layout-land/call_controls_fragment.xml @@ -141,7 +141,6 @@