From 68655194a6abc3f4e3fe186a4da6ad3c4a5e09b9 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 21 Oct 2021 14:33:09 -0300 Subject: [PATCH] Add bubble resize animation. --- .../BodyBubbleLayoutTransition.kt | 41 +++++++++++++++++++ .../ConversationItemBodyBubble.java | 3 ++ 2 files changed, 44 insertions(+) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition.kt new file mode 100644 index 0000000000..c148fa9269 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/BodyBubbleLayoutTransition.kt @@ -0,0 +1,41 @@ +package org.thoughtcrime.securesms.conversation + +import android.animation.LayoutTransition +import android.animation.ValueAnimator +import androidx.core.animation.addListener +import androidx.recyclerview.widget.RecyclerView +import java.lang.IllegalStateException + +class BodyBubbleLayoutTransition(bodyBubble: ConversationItemBodyBubble) : LayoutTransition() { + + private val animator: ValueAnimator = ValueAnimator.ofFloat(0f, 1f) + + init { + disableTransitionType(APPEARING) + disableTransitionType(DISAPPEARING) + disableTransitionType(CHANGE_APPEARING) + disableTransitionType(CHANGING) + + setDuration(100L) + + animator.duration = getAnimator(CHANGE_DISAPPEARING).duration + animator.addUpdateListener { + val parentRecycler: RecyclerView? = bodyBubble.parent.parent as? RecyclerView + + try { + parentRecycler?.invalidateItemDecorations() + } catch (e: IllegalStateException) { + // In scroll or layout. Skip this frame. + } + } + + getAnimator(CHANGE_DISAPPEARING).addListener( + onStart = { + animator.start() + }, + onEnd = { + animator.end() + } + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java index bde706acd4..c218f1a5e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java @@ -33,14 +33,17 @@ public class ConversationItemBodyBubble extends LinearLayout { public ConversationItemBodyBubble(Context context) { super(context); + setLayoutTransition(new BodyBubbleLayoutTransition(this)); } public ConversationItemBodyBubble(Context context, @Nullable AttributeSet attrs) { super(context, attrs); + setLayoutTransition(new BodyBubbleLayoutTransition(this)); } public ConversationItemBodyBubble(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); + setLayoutTransition(new BodyBubbleLayoutTransition(this)); } public void setOutliners(@NonNull List outliners) {