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 39e0bbaf0..4ed3f65ca 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,12 +20,16 @@ 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 import android.content.pm.PackageManager.PERMISSION_GRANTED import android.os.Bundle import android.os.SystemClock +import android.view.View +import android.view.animation.LinearInterpolator +import android.widget.TextView import androidx.lifecycle.ViewModelProvider import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R @@ -53,6 +57,10 @@ class ControlsFragment : GenericFragment() { override fun getLayoutId(): Int = R.layout.call_controls_fragment + private val bounceAnimator: ValueAnimator by lazy { + ValueAnimator.ofFloat(resources.getDimension(R.dimen.tabs_fragment_unread_count_bounce_offset), 0f) + } + override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) @@ -142,6 +150,29 @@ class ControlsFragment : GenericFragment() { } } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + bounceAnimator.addUpdateListener { + val value = it.animatedValue as Float + view.findViewById(R.id.chat_unread_count).translationY = -value + } + bounceAnimator.interpolator = LinearInterpolator() + bounceAnimator.duration = 250 + bounceAnimator.repeatMode = ValueAnimator.REVERSE + bounceAnimator.repeatCount = ValueAnimator.INFINITE + } + + override fun onStart() { + super.onStart() + bounceAnimator.start() + } + + override fun onStop() { + bounceAnimator.pause() + super.onStop() + } + override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt index 71ece4865..430aea1d7 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.kt +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.kt @@ -130,7 +130,7 @@ class LinphoneUtils { return false } - fun isCallLogMissed(callLog: CallLog): Boolean{ + fun isCallLogMissed(callLog: CallLog): Boolean { return (callLog.dir == Call.Dir.Incoming && (callLog.status == Call.Status.Missed || callLog.status == Call.Status.Aborted || diff --git a/app/src/main/res/layout/call_primary_buttons.xml b/app/src/main/res/layout/call_primary_buttons.xml index 6437fe013..e02ac87b7 100644 --- a/app/src/main/res/layout/call_primary_buttons.xml +++ b/app/src/main/res/layout/call_primary_buttons.xml @@ -79,12 +79,16 @@ android:src="@drawable/footer_chat" />