diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java index a85b58aefa..094af74f10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java @@ -6,6 +6,7 @@ import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -53,15 +54,15 @@ public class BorderlessImageView extends FrameLayout { image.setOnLongClickListener(l); } - public void setSlide(@NonNull RequestManager requestManager, @NonNull Slide slide) { + public void setSlide(@NonNull RequestManager requestManager, @NonNull Slide slide, @ColorInt int missingBackgroundColor) { boolean showControls = slide.asAttachment().getUri() == null; if (slide.hasSticker()) { image.setScaleType(ImageView.ScaleType.FIT_CENTER); - image.setImageResource(requestManager, slide, showControls, false); + image.setImageResource(requestManager, slide, showControls, false, 0, 0, missingBackgroundColor); } else { image.setScaleType(ImageView.ScaleType.CENTER_CROP); - image.setImageResource(requestManager, slide, showControls, false, slide.asAttachment().width, slide.asAttachment().height); + image.setImageResource(requestManager, slide, showControls, false, slide.asAttachment().width, slide.asAttachment().height, missingBackgroundColor); } missingShade.setVisibility(showControls ? View.VISIBLE : View.GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt index 8de7e91f19..897d9c8a1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt @@ -195,7 +195,8 @@ class ConversationItemThumbnail @JvmOverloads constructor( requestManager: RequestManager, slides: List, showControls: Boolean, - isPreview: Boolean + isPreview: Boolean, + @ColorInt missingThumbnailBackgroundColor: Int ) { if (slides.size == 1) { val slide = slides[0] @@ -223,7 +224,7 @@ class ConversationItemThumbnail @JvmOverloads constructor( val attachment = slides[0].asAttachment() - thumbnail.get().setImageResource(requestManager, slides[0], showControls, isPreview, attachment.width, attachment.height) + thumbnail.get().setImageResource(requestManager, slides[0], showControls, isPreview, attachment.width, attachment.height, missingThumbnailBackgroundColor) touchDelegate = thumbnail.get().touchDelegate } else { state = state.copy( diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java index 54870bf298..bb1fd6ee37 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.drawable.Drawable; @@ -20,6 +21,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Px; @@ -328,13 +330,13 @@ public class ThumbnailView extends FrameLayout { public ListenableFuture setImageResource(@NonNull RequestManager requestManager, @NonNull Slide slide, boolean showControls, boolean isPreview) { - return setImageResource(requestManager, slide, showControls, isPreview, 0, 0); + return setImageResource(requestManager, slide, showControls, isPreview, 0, 0, Color.TRANSPARENT); } @UiThread public ListenableFuture setImageResource(@NonNull RequestManager requestManager, @NonNull Slide slide, boolean showControls, boolean isPreview, - int naturalWidth, int naturalHeight) + int naturalWidth, int naturalHeight, @ColorInt int missingBackgroundColor) { if (slide.asAttachment().isPermanentlyFailed()) { this.slide = slide; @@ -347,6 +349,7 @@ public class ThumbnailView extends FrameLayout { requestManager.clear(image); image.setImageDrawable(null); + image.setBackgroundColor(Color.TRANSPARENT); int errorImageResource; if (slide instanceof ImageSlide) { @@ -359,6 +362,8 @@ public class ThumbnailView extends FrameLayout { errorImage.setImageResource(errorImageResource); errorImage.setVisibility(View.VISIBLE); + image.setBackgroundColor(missingBackgroundColor); + return new SettableFuture<>(true); } else { errorImage.setVisibility(View.GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 4c6b3b2399..4e0857c093 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -1188,7 +1188,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo mediaThumbnailStub.require().setVisibility(VISIBLE); mediaThumbnailStub.require().setMinimumThumbnailWidth(readDimen(R.dimen.media_bubble_min_width_with_content)); mediaThumbnailStub.require().setMaximumThumbnailHeight(readDimen(R.dimen.media_bubble_max_height)); - mediaThumbnailStub.require().setImageResource(requestManager, Collections.singletonList(new ImageSlide(linkPreview.getThumbnail().get())), showControls, false); + mediaThumbnailStub.require().setImageResource(requestManager, Collections.singletonList(new ImageSlide(linkPreview.getThumbnail().get())), showControls, false, getDefaultBubbleColor(hasWallpaper)); mediaThumbnailStub.require().setThumbnailClickListener(new LinkPreviewThumbnailClickListener()); mediaThumbnailStub.require().setStartTransferClickListener(downloadClickListener); mediaThumbnailStub.require().setCancelTransferClickListener(attachmentCancelClickListener); @@ -1291,11 +1291,11 @@ public final class ConversationItem extends RelativeLayout implements BindableCo if (hasSticker(messageRecord)) { //noinspection ConstantConditions - stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getStickerSlide()); + stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getStickerSlide(), getDefaultBubbleColor(hasWallpaper)); stickerStub.get().setThumbnailClickListener(new StickerClickListener()); } else { //noinspection ConstantConditions - stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getThumbnailSlide()); + stickerStub.get().setSlide(requestManager, ((MmsMessageRecord) messageRecord).getSlideDeck().getThumbnailSlide(), getDefaultBubbleColor(hasWallpaper)); stickerStub.get().setThumbnailClickListener((v, slide) -> performClick()); } @@ -1337,7 +1337,8 @@ public final class ConversationItem extends RelativeLayout implements BindableCo mediaThumbnailStub.require().setImageResource(requestManager, thumbnailSlides, showControls, - false); + false, + getDefaultBubbleColor(hasWallpaper)); if (!messageRecord.isOutgoing()) { mediaThumbnailStub.require().setConversationColor(getDefaultBubbleColor(hasWallpaper)); mediaThumbnailStub.require().setStartTransferClickListener(downloadClickListener);