From 9bcb1bad8e8a9775f07e6fb5e9c9db557e932fe9 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 30 Sep 2021 13:00:06 -0300 Subject: [PATCH] Translate message details projection to correct coordinate system. --- .../colors/RecyclerViewColorizer.kt | 9 ++++-- .../MessageHeaderViewHolder.java | 28 ++++--------------- .../res/layout/message_details_header.xml | 5 ++-- 3 files changed, 13 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer.kt index 087a2b8dc4..38c1e7d046 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer.kt @@ -95,9 +95,12 @@ class RecyclerViewColorizer(private val recyclerView: RecyclerView) { for (i in 0 until parent.childCount) { val child = parent.getChildAt(i) - if (child != null && child is Colorizable) { - child.colorizerProjections.forEach { - c.drawPath(it.path, holePunchPaint) + if (child != null) { + val holder = parent.getChildViewHolder(child) + if (holder is Colorizable) { + holder.colorizerProjections.forEach { + c.drawPath(it.path, holePunchPaint) + } } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java index 3c5d9d9d91..9905ec3936 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java @@ -43,6 +43,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.stream.Collectors; final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements GiphyMp4Playable, Colorizable { private final TextView sentDate; @@ -55,7 +56,6 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G private final ViewStub updateStub; private final ViewStub sentStub; private final ViewStub receivedStub; - private final ClipProjectionDrawable clipProjectionDrawable; private final Colorizer colorizer; private GlideRequests glideRequests; @@ -77,9 +77,6 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G updateStub = itemView.findViewById(R.id.message_details_header_message_view_update); sentStub = itemView.findViewById(R.id.message_details_header_message_view_sent_multimedia); receivedStub = itemView.findViewById(R.id.message_details_header_message_view_received_multimedia); - - clipProjectionDrawable = new ClipProjectionDrawable(itemView.getBackground()); - itemView.setBackground(clipProjectionDrawable); } void bind(@NonNull LifecycleOwner lifecycleOwner, @Nullable ConversationMessage conversationMessage, boolean running) { @@ -225,13 +222,11 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G @Override public void showProjectionArea() { conversationItem.showProjectionArea(); - updateProjections(); } @Override public void hideProjectionArea() { conversationItem.hideProjectionArea(); - updateProjections(); } @Override @@ -256,23 +251,10 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G @Override public @NonNull List getColorizerProjections() { - List projections = conversationItem.getColorizerProjections(); - updateProjections(); - return projections; - } - - private void updateProjections() { - Set projections = new HashSet<>(); - - if (canPlayContent()) { - projections.add(conversationItem.getGiphyMp4PlayableProjection((ViewGroup) itemView)); - } - - projections.addAll(Stream.of(conversationItem.getColorizerProjections()) - .map(p -> Projection.translateFromRootToDescendantCoords(p, itemView)) - .toList()); - - clipProjectionDrawable.setProjections(projections); + return conversationItem.getColorizerProjections() + .stream() + .map(p -> Projection.translateFromRootToDescendantCoords(p, (ViewGroup) itemView.getParent())) + .collect(Collectors.toList()); } private class ExpiresUpdater implements Runnable { diff --git a/app/src/main/res/layout/message_details_header.xml b/app/src/main/res/layout/message_details_header.xml index f6ea063455..ab131c0e1f 100644 --- a/app/src/main/res/layout/message_details_header.xml +++ b/app/src/main/res/layout/message_details_header.xml @@ -1,9 +1,8 @@ - @@ -135,4 +134,4 @@ android:layout_gravity="bottom" android:background="@color/signal_inverse_transparent_05" /> - +