From 09dd2583b9e9af0380c9d305fbe4a9e51d674259 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 3 Nov 2021 13:13:50 -0300 Subject: [PATCH] Fix reaction shade on new conversations. --- .../securesms/conversation/ConversationFragment.java | 12 ++++++++++-- .../securesms/giph/mp4/GiphyMp4ItemDecoration.kt | 11 ++++++++--- app/src/main/res/layout/conversation_fragment.xml | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index d1f125939..e03106050 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -105,7 +105,6 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.ReactionRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ItemDecoration; -import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackController; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicy; import org.thoughtcrime.securesms.giph.mp4.GiphyMp4ProjectionPlayerHolder; @@ -173,6 +172,8 @@ import java.util.Locale; import java.util.Objects; import java.util.Set; +import kotlin.Unit; + @SuppressLint("StaticFieldLeak") public class ConversationFragment extends LoggingFragment implements MultiselectForwardFragment.Callback { private static final String TAG = Log.tag(ConversationFragment.class); @@ -219,6 +220,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect private Stopwatch startupStopwatch; private LayoutTransition layoutTransition; private TransitionListener transitionListener; + private View reactionsShade; private GiphyMp4ProjectionRecycler giphyMp4ProjectionRecycler; private Colorizer colorizer; @@ -259,6 +261,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect scrollToMentionButton = view.findViewById(R.id.scroll_to_mention); scrollDateHeader = view.findViewById(R.id.scroll_date_header); toolbarShadow = requireActivity().findViewById(R.id.conversation_toolbar_shadow); + reactionsShade = view.findViewById(R.id.reactions_shade); final LinearLayoutManager layoutManager = new SmoothScrollingLinearLayoutManager(getActivity(), true); final ConversationItemAnimator conversationItemAnimator = new ConversationItemAnimator( @@ -376,7 +379,10 @@ public class ConversationFragment extends LoggingFragment implements Multiselect GiphyMp4ProjectionRecycler callback = new GiphyMp4ProjectionRecycler(holders); GiphyMp4PlaybackController.attach(list, callback, maxPlayback); - list.addItemDecoration(new GiphyMp4ItemDecoration(callback), 0); + list.addItemDecoration(new GiphyMp4ItemDecoration(callback, translationY -> { + reactionsShade.setTranslationY(translationY); + return Unit.INSTANCE; + }), 0); return callback; } @@ -1326,9 +1332,11 @@ public class ConversationFragment extends LoggingFragment implements Multiselect list.invalidateItemDecorations(); isReacting = true; + reactionsShade.setVisibility(View.VISIBLE); list.setLayoutFrozen(true); listener.handleReaction(item.getConversationMessage(), new ReactionsToolbarListener(item.getConversationMessage()), () -> { isReacting = false; + reactionsShade.setVisibility(View.GONE); list.setLayoutFrozen(false); WindowUtil.setLightStatusBarFromTheme(requireActivity()); clearFocusedItem(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration.kt b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration.kt index cc10be6b4..5e5b382ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ItemDecoration.kt @@ -9,7 +9,10 @@ import kotlin.math.min /** * Decoration that will make the video display params update on each recycler redraw. */ -class GiphyMp4ItemDecoration(val callback: GiphyMp4PlaybackController.Callback) : RecyclerView.ItemDecoration() { +class GiphyMp4ItemDecoration( + val callback: GiphyMp4PlaybackController.Callback, + val onRecyclerVerticalTranslationSet: (Float) -> Unit +) : RecyclerView.ItemDecoration() { override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) { setParentRecyclerTranslationY(parent) @@ -21,6 +24,7 @@ class GiphyMp4ItemDecoration(val callback: GiphyMp4PlaybackController.Callback) private fun setParentRecyclerTranslationY(parent: RecyclerView) { if (parent.childCount == 0 || parent.canScrollVertically(-1) || parent.canScrollVertically(1)) { parent.translationY = 0f + onRecyclerVerticalTranslationSet(parent.translationY) } else { val footerViewHolder = parent.children .map { parent.getChildViewHolder(it) } @@ -29,12 +33,13 @@ class GiphyMp4ItemDecoration(val callback: GiphyMp4PlaybackController.Callback) if (footerViewHolder == null) { parent.translationY = 0f + onRecyclerVerticalTranslationSet(parent.translationY) return } val childTop = footerViewHolder.itemView.top - parent.translationY = min(0, -childTop).toFloat().also { - } + parent.translationY = min(0, -childTop).toFloat() + onRecyclerVerticalTranslationSet(parent.translationY) } } } diff --git a/app/src/main/res/layout/conversation_fragment.xml b/app/src/main/res/layout/conversation_fragment.xml index 1e60cbb72..46698a5e3 100644 --- a/app/src/main/res/layout/conversation_fragment.xml +++ b/app/src/main/res/layout/conversation_fragment.xml @@ -27,6 +27,15 @@ android:overScrollMode="ifContentScrolls" app:layout_constraintTop_toTopOf="parent" /> + +