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