From 417db2341b9fb6955fcf435be726633e3f65282a Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Tue, 14 Feb 2023 09:35:54 -0400 Subject: [PATCH] Utilize drawable instead of bitmap for transition. --- .../components/AlbumThumbnailView.java | 9 +++--- .../components/ConversationItemThumbnail.kt | 8 ++--- .../components/ThreadPhotoRailView.java | 2 +- .../securesms/components/ThumbnailView.java | 30 ++++--------------- .../conversation/ConversationItem.java | 2 +- .../mediaoverview/MediaGalleryAllAdapter.java | 4 +-- .../mediapreview/MediaPreviewCache.kt | 4 +-- .../mediapreview/MediaPreviewV2Activity.kt | 8 ++--- .../securesms/mms/AttachmentManager.java | 2 +- 9 files changed, 25 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java index ba733fb67..5d25e43f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/AlbumThumbnailView.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components; import android.content.Context; import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -30,11 +31,11 @@ public class AlbumThumbnailView extends FrameLayout { private ViewGroup albumCellContainer; private Stub transferControls; - private Bitmap bitmap; + private Drawable imageDrawable; private final SlideClickListener defaultThumbnailClickListener = (v, slide) -> { if (thumbnailClickListener != null) { - bitmap = ((ThumbnailView) v).getBitmap(); + imageDrawable = ((ThumbnailView) v).getImageDrawable(); thumbnailClickListener.onClick(v, slide); } }; @@ -87,8 +88,8 @@ public class AlbumThumbnailView extends FrameLayout { showSlides(glideRequests, slides); } - public @Nullable Bitmap getBitmap() { - return bitmap; + public @Nullable Drawable getDrawable() { + return imageDrawable; } public void setCellBackgroundColor(@ColorInt int color) { 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 0676f053f..611c1172e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.components import android.content.Context -import android.graphics.Bitmap import android.graphics.Canvas +import android.graphics.drawable.Drawable import android.os.Bundle import android.os.Parcelable import android.util.AttributeSet @@ -131,11 +131,11 @@ class ConversationItemThumbnail @JvmOverloads constructor( state.applyState(thumbnail, album) } - fun getBitmap(): Bitmap? { + fun getDrawable(): Drawable? { return if (thumbnail.resolved()) { - thumbnail.get().bitmap + thumbnail.get().imageDrawable } else { - album.get().bitmap + album.get().drawable } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java index b4684f8ec..d27a5f1f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThreadPhotoRailView.java @@ -98,7 +98,7 @@ public class ThreadPhotoRailView extends FrameLayout { } imageView.setOnClickListener(v -> { - MediaPreviewCache.INSTANCE.setBitmap(imageView.getBitmap()); + MediaPreviewCache.INSTANCE.setDrawable(imageView.getImageDrawable()); if (clickedListener != null) clickedListener.onItemClicked(imageView, mediaRecord); }); } 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 c397938d8..ef2f8a14b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -6,7 +6,6 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; -import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; @@ -66,7 +65,6 @@ public class ThumbnailView extends FrameLayout { private static final int MIN_HEIGHT = 2; private static final int MAX_HEIGHT = 3; - private Bitmap imageBitmap; private final ImageView image; private final ImageView blurHash; private final View playOverlay; @@ -286,8 +284,8 @@ public class ThumbnailView extends FrameLayout { transferControls.ifPresent(transferControlView -> transferControlView.setClickable(clickable)); } - public @Nullable Bitmap getBitmap() { - return imageBitmap; + public @Nullable Drawable getImageDrawable() { + return image.getDrawable(); } private TransferControlView getTransferControls() { @@ -416,7 +414,7 @@ public class ThumbnailView extends FrameLayout { thumbnailFuture.addListener(new BlurHashClearListener(glideRequests, blurHash)); } - buildThumbnailGlideRequest(glideRequests, slide).into(new BitmapCaptor(image, result)); + buildThumbnailGlideRequest(glideRequests, slide).into(new GlideDrawableListeningTarget(image, result)); resultHandled = true; } else { @@ -456,7 +454,7 @@ public class ThumbnailView extends FrameLayout { request = request.override(width, height); } - GlideDrawableListeningTarget target = new BitmapCaptor(image, future); + GlideDrawableListeningTarget target = new GlideDrawableListeningTarget(image, future); Request previousRequest = target.getRequest(); boolean previousRequestRunning = previousRequest != null && previousRequest.isRunning(); request.into(target); @@ -486,7 +484,7 @@ public class ThumbnailView extends FrameLayout { request = request.override(width, height); } - request.into(new BitmapCaptor(image, future)); + request.into(new GlideDrawableListeningTarget(image, future)); blurHash.setImageDrawable(null); return future; @@ -642,22 +640,4 @@ public class ThumbnailView extends FrameLayout { blurHash.setImageDrawable(null); } } - - public class BitmapCaptor extends GlideDrawableListeningTarget { - - public BitmapCaptor(@NonNull ImageView view, @NonNull SettableFuture loaded) { - super(view, loaded); - } - - @Override - public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { - imageBitmap = ((BitmapDrawable) resource).getBitmap(); - super.onResourceReady(resource, transition); - } - - @Override public void onLoadCleared(@Nullable Drawable placeholder) { - imageBitmap = null; - super.onLoadCleared(placeholder); - } - } } 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 58e9e06b3..c7618e3b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -2393,7 +2393,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo mediaThumbnailStub.require().getCorners().getBottomRight(), mediaThumbnailStub.require().getCorners().getBottomLeft() )); - MediaPreviewCache.INSTANCE.setBitmap(mediaThumbnailStub.require().getBitmap()); + MediaPreviewCache.INSTANCE.setDrawable(mediaThumbnailStub.require().getDrawable()); eventListener.goToMediaPreview(ConversationItem.this, mediaThumbnailStub.require(), args); } else if (slide.getUri() != null) { Log.i(TAG, "Clicked: " + slide.getUri() + " , " + slide.getContentType()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java index f62e93c09..ebca48a55 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -347,7 +347,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setOnClickListener(view -> { - MediaPreviewCache.INSTANCE.setBitmap(thumbnailView.getBitmap()); + MediaPreviewCache.INSTANCE.setDrawable(thumbnailView.getImageDrawable()); itemClickListener.onMediaClicked(thumbnailView, mediaRecord); }); thumbnailView.setOnLongClickListener(view -> onLongClick()); @@ -598,7 +598,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @Override protected @NonNull View getTransitionAnchor() { - MediaPreviewCache.INSTANCE.setBitmap(null); + MediaPreviewCache.INSTANCE.setDrawable(null); return thumbnailView; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewCache.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewCache.kt index 423d07005..5684a7162 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewCache.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewCache.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.mediapreview -import android.graphics.Bitmap +import android.graphics.drawable.Drawable /** * Stores the bitmap for a thumbnail we are animating from via a shared @@ -8,5 +8,5 @@ import android.graphics.Bitmap * receiving end. */ object MediaPreviewCache { - var bitmap: Bitmap? = null + var drawable: Drawable? = null } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt index fae63552e..f1c660f84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewV2Activity.kt @@ -36,7 +36,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { val args = MediaIntentFactory.requireArguments(intent.extras!!) - if (MediaPreviewCache.bitmap != null) { + if (MediaPreviewCache.drawable != null) { val originalCorners = ShapeAppearanceModel.Builder() .setTopLeftCornerSize(args.sharedElementArgs.topLeft) .setTopRightCornerSize(args.sharedElementArgs.topRight) @@ -85,8 +85,8 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr setContentView(R.layout.activity_mediapreview_v2) transitionImageView = findViewById(R.id.transition_image_view) - if (MediaPreviewCache.bitmap != null) { - transitionImageView.setImageBitmap(MediaPreviewCache.bitmap) + if (MediaPreviewCache.drawable != null) { + transitionImageView.setImageDrawable(MediaPreviewCache.drawable) } else { transitionImageView.visibility = View.INVISIBLE viewModel.setIsInSharedAnimation(false) @@ -119,7 +119,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr override fun onPause() { super.onPause() - MediaPreviewCache.bitmap = null + MediaPreviewCache.drawable = null } companion object { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index cb3bb5bc3..e5d072a42 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -542,7 +542,7 @@ public class AttachmentManager { @Override public void onClick(View v) { if (slide.isPresent()) { - MediaPreviewCache.INSTANCE.setBitmap(((ThumbnailView) v).getBitmap()); + MediaPreviewCache.INSTANCE.setDrawable(((ThumbnailView) v).getImageDrawable()); previewImageDraft(slide.get()); } }