Add chat filter pill color lerp at close apex.
This commit is contained in:
parent
e4ddedcc48
commit
1712442560
1 changed files with 28 additions and 0 deletions
|
@ -2,10 +2,14 @@ package org.thoughtcrime.securesms.conversationlist.chatfilter
|
||||||
|
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
|
import android.animation.ValueAnimator
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.ColorStateList
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.core.animation.doOnEnd
|
import androidx.core.animation.doOnEnd
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import com.google.android.material.animation.ArgbEvaluatorCompat
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.animation.AnimationCompleteListener
|
import org.thoughtcrime.securesms.animation.AnimationCompleteListener
|
||||||
import org.thoughtcrime.securesms.databinding.ConversationListFilterPullViewBinding
|
import org.thoughtcrime.securesms.databinding.ConversationListFilterPullViewBinding
|
||||||
|
@ -30,6 +34,7 @@ class ConversationListFilterPullView @JvmOverloads constructor(
|
||||||
private const val ANIMATE_HELP_TEXT_VELOCITY_THRESHOLD = 1f
|
private const val ANIMATE_HELP_TEXT_VELOCITY_THRESHOLD = 1f
|
||||||
private const val ANIMATE_HELP_TEXT_THRESHOLD = 30
|
private const val ANIMATE_HELP_TEXT_THRESHOLD = 30
|
||||||
private const val ANIMATE_HELP_TEXT_START_FRACTION = 0.35f
|
private const val ANIMATE_HELP_TEXT_START_FRACTION = 0.35f
|
||||||
|
private val COLOR_EVALUATOR = ArgbEvaluatorCompat.getInstance()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val binding: ConversationListFilterPullViewBinding
|
private val binding: ConversationListFilterPullViewBinding
|
||||||
|
@ -47,10 +52,14 @@ class ConversationListFilterPullView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
private var pillAnimator: Animator? = null
|
private var pillAnimator: Animator? = null
|
||||||
|
private var pillColorAnimator: Animator? = null
|
||||||
private val velocityTracker = ProgressVelocityTracker(5)
|
private val velocityTracker = ProgressVelocityTracker(5)
|
||||||
private var animateHelpText = 0
|
private var animateHelpText = 0
|
||||||
private var helpTextStartFraction = 0.35f
|
private var helpTextStartFraction = 0.35f
|
||||||
|
|
||||||
|
private val pillDefaultBackgroundTint = ContextCompat.getColor(context, R.color.signal_colorSecondaryContainer)
|
||||||
|
private val pillWillCloseBackgroundTint = ContextCompat.getColor(context, R.color.signal_colorSurface1)
|
||||||
|
|
||||||
fun onUserDrag(progress: Float) {
|
fun onUserDrag(progress: Float) {
|
||||||
binding.filterCircle.textFieldMetrics = Pair(binding.filterText.width, binding.filterText.height)
|
binding.filterCircle.textFieldMetrics = Pair(binding.filterText.width, binding.filterText.height)
|
||||||
binding.filterCircle.progress = progress
|
binding.filterCircle.progress = progress
|
||||||
|
@ -61,9 +70,11 @@ class ConversationListFilterPullView @JvmOverloads constructor(
|
||||||
setState(FilterPullState.OPEN_APEX)
|
setState(FilterPullState.OPEN_APEX)
|
||||||
vibrate()
|
vibrate()
|
||||||
resetHelpText()
|
resetHelpText()
|
||||||
|
resetPillColor()
|
||||||
} else if (state == FilterPullState.OPEN && progress >= 1f) {
|
} else if (state == FilterPullState.OPEN && progress >= 1f) {
|
||||||
setState(FilterPullState.CLOSE_APEX)
|
setState(FilterPullState.CLOSE_APEX)
|
||||||
vibrate()
|
vibrate()
|
||||||
|
animatePillColor()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state == FilterPullState.CLOSED && animateHelpText < ANIMATE_HELP_TEXT_THRESHOLD) {
|
if (state == FilterPullState.CLOSED && animateHelpText < ANIMATE_HELP_TEXT_THRESHOLD) {
|
||||||
|
@ -166,6 +177,23 @@ class ConversationListFilterPullView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun animatePillColor() {
|
||||||
|
pillColorAnimator?.cancel()
|
||||||
|
pillColorAnimator = ValueAnimator.ofInt(pillDefaultBackgroundTint, pillWillCloseBackgroundTint).apply {
|
||||||
|
addUpdateListener {
|
||||||
|
binding.filterText.chipBackgroundColor = ColorStateList.valueOf(it.animatedValue as Int)
|
||||||
|
}
|
||||||
|
setEvaluator(COLOR_EVALUATOR)
|
||||||
|
duration = 200
|
||||||
|
start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun resetPillColor() {
|
||||||
|
pillColorAnimator?.cancel()
|
||||||
|
binding.filterText.chipBackgroundColor = ColorStateList.valueOf(pillDefaultBackgroundTint)
|
||||||
|
}
|
||||||
|
|
||||||
private fun setState(state: FilterPullState) {
|
private fun setState(state: FilterPullState) {
|
||||||
this.state = state
|
this.state = state
|
||||||
binding.filterCircle.state = state
|
binding.filterCircle.state = state
|
||||||
|
|
Loading…
Add table
Reference in a new issue