Unverified Commit 2625c52c authored by Hussein El Feky's avatar Hussein El Feky Committed by GitHub

Added animation when expanding/collapsing login options

parent acb0f6f3
package chat.rocket.android.authentication.loginoptions.ui
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.app.Activity
import android.content.Intent
import android.graphics.PorterDuff
......@@ -7,10 +10,13 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.widget.Button
import android.widget.LinearLayout
import androidx.appcompat.view.ContextThemeWrapper
import androidx.core.view.isVisible
import androidx.core.view.marginTop
import androidx.fragment.app.Fragment
import chat.rocket.android.R
import chat.rocket.android.analytics.AnalyticsManager
......@@ -532,17 +538,80 @@ class LoginOptionsFragment : Fragment(), LoginOptionsView {
}
private fun expandAccountsView() {
(0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && !it.isVisible }
.forEach { it.isVisible = true }
val collapsedHeight = accounts_container.height
var expandedHeight = collapsedHeight
val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
for (i in 0 until accounts_container.childCount) {
val bt = accounts_container.getChildAt(i) as Button
if (bt.isClickable && !bt.isVisible) {
expandedHeight += optionHeight
}
}
val animation = ValueAnimator.ofInt(collapsedHeight, expandedHeight)
animation.addUpdateListener {
val params = accounts_container.layoutParams
params.height = animation.animatedValue as Int
accounts_container.layoutParams = params
}
animation.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
for (i in 0 until accounts_container.childCount) {
val bt = accounts_container.getChildAt(i) as Button
if (!bt.isVisible) {
bt.isVisible = true
val anim = AlphaAnimation(0.0f, 1.0f)
anim.duration = 400
bt.startAnimation(anim)
}
}
}
})
animation.setDuration(400).start()
}
private fun collapseAccountsView() {
(0..accounts_container.childCount)
.mapNotNull { accounts_container.getChildAt(it) as? Button }
.filter { it.isClickable && it.isVisible }
.drop(3)
.forEach { it.isVisible = false }
val expandedHeight = accounts_container.height
var collapsedHeight = expandedHeight
val optionHeight = accounts_container.getChildAt(1).height +
accounts_container.getChildAt(1).marginTop
for (i in 3 until accounts_container.childCount) {
val bt = accounts_container.getChildAt(i) as Button
if (bt.isClickable && bt.isVisible) {
collapsedHeight -= optionHeight
}
}
val animation = ValueAnimator.ofInt(expandedHeight, collapsedHeight)
animation.addUpdateListener {
val params = accounts_container.layoutParams
params.height = animation.animatedValue as Int
accounts_container.layoutParams = params
}
animation.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animator: Animator) {
for (i in 3 until accounts_container.childCount) {
val bt = accounts_container.getChildAt(i) as Button
if (bt.isVisible) {
val anim = AlphaAnimation(1.0f, 0.0f)
anim.duration = 400
anim.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation) {
}
override fun onAnimationEnd(animation: Animation) {
bt.isVisible = false
}
override fun onAnimationRepeat(animation: Animation) {
}
})
bt.startAnimation(anim)
}
}
}
})
animation.setDuration(400).start()
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment