From bbedad5ebba2bbbbca6247c70b49aee478fe23ee Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Fri, 10 Feb 2023 14:33:19 +1100 Subject: [PATCH 1/2] Fixed a few layout issues with the LinkPreviewView --- .../components/GlideBitmapListeningTarget.java | 16 +++++++++++++++- .../components/GlideDrawableListeningTarget.java | 16 +++++++++++++++- .../conversation/v2/messages/LinkPreviewView.kt | 8 ++++++-- .../v2/messages/VisibleMessageContentView.kt | 4 +++- .../conversation/v2/utilities/ThumbnailView.kt | 7 ++++--- .../res/layout/view_visible_message_content.xml | 2 +- 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java index 61094fb7df..76b7dc21aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java @@ -4,30 +4,44 @@ import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import android.view.View; import android.widget.ImageView; import com.bumptech.glide.request.target.BitmapImageViewTarget; import org.session.libsignal.utilities.SettableFuture; +import java.lang.ref.WeakReference; + public class GlideBitmapListeningTarget extends BitmapImageViewTarget { private final SettableFuture loaded; + private final WeakReference loadingView; - public GlideBitmapListeningTarget(@NonNull ImageView view, @NonNull SettableFuture loaded) { + public GlideBitmapListeningTarget(@NonNull ImageView view, @Nullable View loadingView, @NonNull SettableFuture loaded) { super(view); this.loaded = loaded; + this.loadingView = new WeakReference(loadingView); } @Override protected void setResource(@Nullable Bitmap resource) { super.setResource(resource); loaded.set(true); + + if (loadingView.get() != null) { + loadingView.get().setVisibility(View.GONE); + } } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { super.onLoadFailed(errorDrawable); loaded.set(true); + + if (loadingView.get() != null) { + loadingView.get().setVisibility(View.GONE); + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java index d177900124..16c3bb0c3b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java @@ -3,30 +3,44 @@ package org.thoughtcrime.securesms.components; import android.graphics.drawable.Drawable; import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import android.view.View; import android.widget.ImageView; import com.bumptech.glide.request.target.DrawableImageViewTarget; import org.session.libsignal.utilities.SettableFuture; +import java.lang.ref.WeakReference; + public class GlideDrawableListeningTarget extends DrawableImageViewTarget { private final SettableFuture loaded; + private final WeakReference loadingView; - public GlideDrawableListeningTarget(@NonNull ImageView view, @NonNull SettableFuture loaded) { + public GlideDrawableListeningTarget(@NonNull ImageView view, @Nullable View loadingView, @NonNull SettableFuture loaded) { super(view); this.loaded = loaded; + this.loadingView = new WeakReference(loadingView); } @Override protected void setResource(@Nullable Drawable resource) { super.setResource(resource); loaded.set(true); + + if (loadingView.get() != null) { + loadingView.get().setVisibility(View.GONE); + } } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { super.onLoadFailed(errorDrawable); loaded.set(true); + + if (loadingView.get() != null) { + loadingView.get().setVisibility(View.GONE); + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/LinkPreviewView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/LinkPreviewView.kt index 45d353cc34..9677223894 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/LinkPreviewView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/LinkPreviewView.kt @@ -57,8 +57,12 @@ class LinkPreviewView : LinearLayout { val cornerRadii = MessageBubbleUtilities.calculateRadii(context, isStartOfMessageCluster, isEndOfMessageCluster, message.isOutgoing) cornerMask.setTopLeftRadius(cornerRadii[0]) cornerMask.setTopRightRadius(cornerRadii[1]) - cornerMask.setBottomRightRadius(cornerRadii[2]) - cornerMask.setBottomLeftRadius(cornerRadii[3]) + + // Only round the bottom corners if there is no body text + if (message.body.isEmpty()) { + cornerMask.setBottomRightRadius(cornerRadii[2]) + cornerMask.setBottomLeftRadius(cornerRadii[3]) + } } override fun dispatchDraw(canvas: Canvas) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt index f8e655e705..8c33e4473c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt @@ -158,7 +158,9 @@ class VisibleMessageContentView : ConstraintLayout { message is MmsMessageRecord && message.linkPreviews.isNotEmpty() -> { binding.linkPreviewView.root.bind(message, glide, isStartOfMessageCluster, isEndOfMessageCluster) onContentClick.add { event -> binding.linkPreviewView.root.calculateHit(event) } - // Body text view is inside the link preview for layout convenience + + // When in a link preview ensure the bodyTextView can expand to the full width + binding.bodyTextView.maxWidth = binding.linkPreviewView.root.layoutParams.width } message is MmsMessageRecord && message.slideDeck.audioSlide != null -> { hideBody = true diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailView.kt index e158556675..e9a085dad9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/ThumbnailView.kt @@ -123,12 +123,13 @@ open class ThumbnailView: FrameLayout { when { slide.thumbnailUri != null -> { - buildThumbnailGlideRequest(glide, slide).into(GlideDrawableListeningTarget(binding.thumbnailImage, result)) + buildThumbnailGlideRequest(glide, slide).into(GlideDrawableListeningTarget(binding.thumbnailImage, binding.thumbnailLoadIndicator, result)) } slide.hasPlaceholder() -> { - buildPlaceholderGlideRequest(glide, slide).into(GlideBitmapListeningTarget(binding.thumbnailImage, result)) + buildPlaceholderGlideRequest(glide, slide).into(GlideBitmapListeningTarget(binding.thumbnailImage, binding.thumbnailLoadIndicator, result)) } else -> { + binding.thumbnailLoadIndicator.isVisible = false glide.clear(binding.thumbnailImage) result.set(false) } @@ -190,7 +191,7 @@ open class ThumbnailView: FrameLayout { request.transforms(CenterCrop()) } - request.into(GlideDrawableListeningTarget(binding.thumbnailImage, future)) + request.into(GlideDrawableListeningTarget(binding.thumbnailImage, binding.thumbnailLoadIndicator, future)) return future } diff --git a/app/src/main/res/layout/view_visible_message_content.xml b/app/src/main/res/layout/view_visible_message_content.xml index 7b09faf832..9c617bd572 100644 --- a/app/src/main/res/layout/view_visible_message_content.xml +++ b/app/src/main/res/layout/view_visible_message_content.xml @@ -80,7 +80,7 @@ app:layout_constraintStart_toStartOf="parent" android:visibility="gone" android:id="@+id/linkPreviewView" - android:layout_width="wrap_content" + android:layout_width="300dp" android:layout_height="wrap_content"/> Date: Tue, 14 Feb 2023 14:10:47 +1100 Subject: [PATCH 2/2] Code review changes --- .../components/GlideBitmapListeningTarget.java | 12 ++++++++---- .../components/GlideDrawableListeningTarget.java | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java index 76b7dc21aa..157bc215e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java @@ -30,8 +30,10 @@ public class GlideBitmapListeningTarget extends BitmapImageViewTarget { super.setResource(resource); loaded.set(true); - if (loadingView.get() != null) { - loadingView.get().setVisibility(View.GONE); + View loadingViewInstance = loadingView.get(); + + if (loadingViewInstance != null) { + loadingViewInstance.setVisibility(View.GONE); } } @@ -40,8 +42,10 @@ public class GlideBitmapListeningTarget extends BitmapImageViewTarget { super.onLoadFailed(errorDrawable); loaded.set(true); - if (loadingView.get() != null) { - loadingView.get().setVisibility(View.GONE); + View loadingViewInstance = loadingView.get(); + + if (loadingViewInstance != null) { + loadingViewInstance.setVisibility(View.GONE); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java index 16c3bb0c3b..406c878ec9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java @@ -29,8 +29,10 @@ public class GlideDrawableListeningTarget extends DrawableImageViewTarget { super.setResource(resource); loaded.set(true); - if (loadingView.get() != null) { - loadingView.get().setVisibility(View.GONE); + View loadingViewInstance = loadingView.get(); + + if (loadingViewInstance != null) { + loadingViewInstance.setVisibility(View.GONE); } } @@ -39,8 +41,10 @@ public class GlideDrawableListeningTarget extends DrawableImageViewTarget { super.onLoadFailed(errorDrawable); loaded.set(true); - if (loadingView.get() != null) { - loadingView.get().setVisibility(View.GONE); + View loadingViewInstance = loadingView.get(); + + if (loadingViewInstance != null) { + loadingViewInstance.setVisibility(View.GONE); } } }