From 0bbe2b054bdbbbf1a9d73a82cf79bb617984af18 Mon Sep 17 00:00:00 2001
From: Agnieszka C <85929121+Aga-C@users.noreply.github.com>
Date: Wed, 1 Dec 2021 19:25:13 +0100
Subject: [PATCH] Added hint animation
---
.../dialer/activities/CallActivity.kt | 49 +++++++++++++++++++
app/src/main/res/layout/activity_call.xml | 30 ++++++++++++
app/src/main/res/values/dimens.xml | 1 +
3 files changed, 80 insertions(+)
diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt
index c2b30dea..ca7d29f2 100644
--- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt
@@ -13,6 +13,7 @@ import android.telecom.Call
import android.telecom.CallAudioState
import android.view.MotionEvent
import android.view.WindowManager
+import android.widget.ImageView
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.MINUTE_SECONDS
import com.simplemobiletools.commons.helpers.isOreoMr1Plus
@@ -47,6 +48,7 @@ class CallActivity : SimpleActivity() {
private val callContactAvatarHelper by lazy { CallContactAvatarHelper(this) }
private val callDurationHelper by lazy { (application as App).callDurationHelper }
private var dragDownX = 0f
+ private var stopAnimation = false
override fun onCreate(savedInstanceState: Bundle?) {
supportActionBar?.hide()
@@ -159,11 +161,30 @@ class CallActivity : SimpleActivity() {
var minDragX = 0f
var maxDragX = 0f
var initialDraggableX = 0f
+ var initialLeftArrowX = 0f
+ var initialRightArrowX = 0f
+ var initialLeftArrowScaleX = 0f
+ var initialLeftArrowScaleY = 0f
+ var initialRightArrowScaleX = 0f
+ var initialRightArrowScaleY = 0f
+ var leftArrowTranslation = 0f
+ var rightArrowTranslation = 0f
call_accept.onGlobalLayout {
minDragX = call_decline.left.toFloat()
maxDragX = call_accept.left.toFloat()
initialDraggableX = call_draggable.left.toFloat()
+ initialLeftArrowX = call_left_arrow.x
+ initialRightArrowX = call_right_arrow.x
+ initialLeftArrowScaleX = call_left_arrow.scaleX
+ initialLeftArrowScaleY = call_left_arrow.scaleY
+ initialRightArrowScaleX = call_right_arrow.scaleX
+ initialRightArrowScaleY = call_right_arrow.scaleY
+ leftArrowTranslation = -call_decline.x
+ rightArrowTranslation = call_decline.x
+
+ startArrowAnimation(call_left_arrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation)
+ startArrowAnimation(call_right_arrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation)
}
call_draggable.setOnTouchListener { v, event ->
@@ -171,6 +192,9 @@ class CallActivity : SimpleActivity() {
MotionEvent.ACTION_DOWN -> {
dragDownX = event.x
call_draggable_background.animate().alpha(0f)
+ stopAnimation = true
+ call_left_arrow.animate().alpha(0f)
+ call_right_arrow.animate().alpha(0f)
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
dragDownX = 0f
@@ -178,6 +202,11 @@ class CallActivity : SimpleActivity() {
call_draggable_background.animate().alpha(0.2f)
}
call_draggable.setImageDrawable(getDrawable(R.drawable.ic_phone_down_vector))
+ call_left_arrow.animate().alpha(1f)
+ call_right_arrow.animate().alpha(1f)
+ stopAnimation = false
+ startArrowAnimation(call_left_arrow, initialLeftArrowX, initialLeftArrowScaleX, initialLeftArrowScaleY, leftArrowTranslation)
+ startArrowAnimation(call_right_arrow, initialRightArrowX, initialRightArrowScaleX, initialRightArrowScaleY, rightArrowTranslation)
}
MotionEvent.ACTION_MOVE -> {
call_draggable.x = Math.min(maxDragX, Math.max(minDragX, event.rawX - dragDownX))
@@ -203,6 +232,26 @@ class CallActivity : SimpleActivity() {
}
}
+ private fun startArrowAnimation(arrow: ImageView, initialX: Float, initialScaleX: Float, initialScaleY: Float, translation: Float) {
+ arrow.apply {
+ alpha = 1f
+ x = initialX
+ scaleX = initialScaleX
+ scaleY = initialScaleY
+ animate()
+ .alpha(0f)
+ .translationX(translation)
+ .scaleXBy(-0.5f)
+ .scaleYBy(-0.5f)
+ .setDuration(1000)
+ .withEndAction {
+ if (!stopAnimation) {
+ startArrowAnimation(this, initialX, initialScaleX, initialScaleY, translation)
+ }
+ }
+ }
+ }
+
private fun dialpadPressed(char: Char) {
CallManager.keypad(char)
dialpad_input.addCharacter(char)
diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml
index 0d051fdc..b448de42 100644
--- a/app/src/main/res/layout/activity_call.xml
+++ b/app/src/main/res/layout/activity_call.xml
@@ -182,6 +182,21 @@
app:layout_constraintStart_toStartOf="@+id/call_decline"
app:layout_constraintTop_toBottomOf="@+id/call_decline" />
+
+
+
+
60dp
+ 50dp
72dp
30dp
120dp