diff --git a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt index 06711b1cc..dd3983728 100644 --- a/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt +++ b/app/src/main/java/org/linphone/activities/call/OutgoingCallActivity.kt @@ -20,11 +20,16 @@ package org.linphone.activities.call import android.Manifest +import android.animation.ValueAnimator import android.annotation.TargetApi import android.content.pm.PackageManager import android.os.Bundle +import android.util.DisplayMetrics +import android.view.Display import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider +import com.google.android.flexbox.FlexboxLayout +import org.linphone.LinphoneApplication import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.call.viewmodels.CallViewModel @@ -41,6 +46,9 @@ class OutgoingCallActivity : ProximitySensorActivity() { private lateinit var viewModel: CallViewModel private lateinit var controlsViewModel: ControlsViewModel + // We have to use lateinit here because we need to compute the screen width first + private lateinit var numpadAnimator: ValueAnimator + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -87,11 +95,29 @@ class OutgoingCallActivity : ProximitySensorActivity() { } }) + controlsViewModel.toggleNumpadEvent.observe(this, { + it.consume { open -> + if (this::numpadAnimator.isInitialized) { + if (open) { + numpadAnimator.start() + } else { + numpadAnimator.reverse() + } + } + } + }) + if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) { checkPermissions() } } + override fun onStart() { + super.onStart() + + initNumpadLayout() + } + override fun onResume() { super.onResume() @@ -151,4 +177,22 @@ class OutgoingCallActivity : ProximitySensorActivity() { } return null } + + private fun initNumpadLayout() { + val metrics = DisplayMetrics() + val display: Display = windowManager.defaultDisplay + display.getRealMetrics(metrics) + val screenWidth = metrics.widthPixels.toFloat() + numpadAnimator = ValueAnimator.ofFloat(screenWidth, 0f).apply { + addUpdateListener { + val value = it.animatedValue as Float + findViewById(R.id.numpad)?.translationX = -value + duration = if (LinphoneApplication.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) { + findViewById(R.id.numpad)?.translationX = -screenWidth + } + } } 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 b0e07ad23..69f5a05a8 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 @@ -176,21 +176,7 @@ class ControlsFragment : GenericFragment() { override fun onStart() { super.onStart() - val metrics = DisplayMetrics() - val display: Display = requireActivity().getWindowManager().getDefaultDisplay() - display.getRealMetrics(metrics) - val screenWidth = metrics.widthPixels.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 - } + initNumpadLayout() } override fun onRequestPermissionsResult( @@ -254,4 +240,22 @@ class ControlsFragment : GenericFragment() { dialog?.show() } + + private fun initNumpadLayout() { + val metrics = DisplayMetrics() + val display: Display = requireActivity().windowManager.defaultDisplay + display.getRealMetrics(metrics) + val screenWidth = metrics.widthPixels.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 + } + } } diff --git a/app/src/main/java/org/linphone/activities/call/viewmodels/CallViewModel.kt b/app/src/main/java/org/linphone/activities/call/viewmodels/CallViewModel.kt index 2dbac2375..ad2a0119b 100644 --- a/app/src/main/java/org/linphone/activities/call/viewmodels/CallViewModel.kt +++ b/app/src/main/java/org/linphone/activities/call/viewmodels/CallViewModel.kt @@ -55,6 +55,8 @@ open class CallViewModel(val call: Call) : GenericContactViewModel(call.remoteAd val isPaused = MutableLiveData() + val isOutgoingEarlyMedia = MutableLiveData() + val callEndedEvent: MutableLiveData> by lazy { MutableLiveData>() } @@ -70,6 +72,7 @@ open class CallViewModel(val call: Call) : GenericContactViewModel(call.remoteAd if (call != this@CallViewModel.call) return isPaused.value = state == Call.State.Paused + isOutgoingEarlyMedia.value = state == Call.State.OutgoingEarlyMedia if (state == Call.State.End || state == Call.State.Released || state == Call.State.Error) { timer?.cancel() diff --git a/app/src/main/res/layout/call_controls_fragment.xml b/app/src/main/res/layout/call_controls_fragment.xml index 66d23062d..a46480583 100644 --- a/app/src/main/res/layout/call_controls_fragment.xml +++ b/app/src/main/res/layout/call_controls_fragment.xml @@ -1,8 +1,7 @@ + xmlns:tools="http://schemas.android.com/tools"> @@ -272,14 +271,14 @@ diff --git a/app/src/main/res/layout/call_outgoing_activity.xml b/app/src/main/res/layout/call_outgoing_activity.xml index 7de2caa2c..d45bebfad 100644 --- a/app/src/main/res/layout/call_outgoing_activity.xml +++ b/app/src/main/res/layout/call_outgoing_activity.xml @@ -94,6 +94,18 @@ android:layout_alignParentBottom="true" android:orientation="horizontal"> + + + + \ No newline at end of file