Fix reaction shade on new conversations.

fork-5.53.8
Alex Hart 2021-11-03 13:13:50 -03:00 zatwierdzone przez Greyson Parrelli
rodzic dc22b27cd8
commit 09dd2583b9
3 zmienionych plików z 27 dodań i 5 usunięć

Wyświetl plik

@ -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();

Wyświetl plik

@ -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)
}
}
}

Wyświetl plik

@ -27,6 +27,15 @@
android:overScrollMode="ifContentScrolls"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/reactions_shade"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/reactions_screen_shade_color"
android:visibility="gone"
app:layout_constrainedHeight="true"
app:layout_constraintTop_toBottomOf="@android:id/list" />
<TextView
android:id="@+id/scroll_date_header"
style="@style/Signal.Text.Preview"