Utilize drawable instead of bitmap for transition.

main
Alex Hart 2023-02-14 09:35:54 -04:00 zatwierdzone przez Greyson Parrelli
rodzic 6aa4ef95b5
commit 417db2341b
9 zmienionych plików z 25 dodań i 44 usunięć

Wyświetl plik

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
@ -30,11 +31,11 @@ public class AlbumThumbnailView extends FrameLayout {
private ViewGroup albumCellContainer; private ViewGroup albumCellContainer;
private Stub<TransferControlView> transferControls; private Stub<TransferControlView> transferControls;
private Bitmap bitmap; private Drawable imageDrawable;
private final SlideClickListener defaultThumbnailClickListener = (v, slide) -> { private final SlideClickListener defaultThumbnailClickListener = (v, slide) -> {
if (thumbnailClickListener != null) { if (thumbnailClickListener != null) {
bitmap = ((ThumbnailView) v).getBitmap(); imageDrawable = ((ThumbnailView) v).getImageDrawable();
thumbnailClickListener.onClick(v, slide); thumbnailClickListener.onClick(v, slide);
} }
}; };
@ -87,8 +88,8 @@ public class AlbumThumbnailView extends FrameLayout {
showSlides(glideRequests, slides); showSlides(glideRequests, slides);
} }
public @Nullable Bitmap getBitmap() { public @Nullable Drawable getDrawable() {
return bitmap; return imageDrawable;
} }
public void setCellBackgroundColor(@ColorInt int color) { public void setCellBackgroundColor(@ColorInt int color) {

Wyświetl plik

@ -1,8 +1,8 @@
package org.thoughtcrime.securesms.components package org.thoughtcrime.securesms.components
import android.content.Context import android.content.Context
import android.graphics.Bitmap
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.drawable.Drawable
import android.os.Bundle import android.os.Bundle
import android.os.Parcelable import android.os.Parcelable
import android.util.AttributeSet import android.util.AttributeSet
@ -131,11 +131,11 @@ class ConversationItemThumbnail @JvmOverloads constructor(
state.applyState(thumbnail, album) state.applyState(thumbnail, album)
} }
fun getBitmap(): Bitmap? { fun getDrawable(): Drawable? {
return if (thumbnail.resolved()) { return if (thumbnail.resolved()) {
thumbnail.get().bitmap thumbnail.get().imageDrawable
} else { } else {
album.get().bitmap album.get().drawable
} }
} }

Wyświetl plik

@ -98,7 +98,7 @@ public class ThreadPhotoRailView extends FrameLayout {
} }
imageView.setOnClickListener(v -> { imageView.setOnClickListener(v -> {
MediaPreviewCache.INSTANCE.setBitmap(imageView.getBitmap()); MediaPreviewCache.INSTANCE.setDrawable(imageView.getImageDrawable());
if (clickedListener != null) clickedListener.onItemClicked(imageView, mediaRecord); if (clickedListener != null) clickedListener.onItemClicked(imageView, mediaRecord);
}); });
} }

Wyświetl plik

@ -6,7 +6,6 @@ import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter; import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
@ -66,7 +65,6 @@ public class ThumbnailView extends FrameLayout {
private static final int MIN_HEIGHT = 2; private static final int MIN_HEIGHT = 2;
private static final int MAX_HEIGHT = 3; private static final int MAX_HEIGHT = 3;
private Bitmap imageBitmap;
private final ImageView image; private final ImageView image;
private final ImageView blurHash; private final ImageView blurHash;
private final View playOverlay; private final View playOverlay;
@ -286,8 +284,8 @@ public class ThumbnailView extends FrameLayout {
transferControls.ifPresent(transferControlView -> transferControlView.setClickable(clickable)); transferControls.ifPresent(transferControlView -> transferControlView.setClickable(clickable));
} }
public @Nullable Bitmap getBitmap() { public @Nullable Drawable getImageDrawable() {
return imageBitmap; return image.getDrawable();
} }
private TransferControlView getTransferControls() { private TransferControlView getTransferControls() {
@ -416,7 +414,7 @@ public class ThumbnailView extends FrameLayout {
thumbnailFuture.addListener(new BlurHashClearListener(glideRequests, blurHash)); thumbnailFuture.addListener(new BlurHashClearListener(glideRequests, blurHash));
} }
buildThumbnailGlideRequest(glideRequests, slide).into(new BitmapCaptor(image, result)); buildThumbnailGlideRequest(glideRequests, slide).into(new GlideDrawableListeningTarget(image, result));
resultHandled = true; resultHandled = true;
} else { } else {
@ -456,7 +454,7 @@ public class ThumbnailView extends FrameLayout {
request = request.override(width, height); request = request.override(width, height);
} }
GlideDrawableListeningTarget target = new BitmapCaptor(image, future); GlideDrawableListeningTarget target = new GlideDrawableListeningTarget(image, future);
Request previousRequest = target.getRequest(); Request previousRequest = target.getRequest();
boolean previousRequestRunning = previousRequest != null && previousRequest.isRunning(); boolean previousRequestRunning = previousRequest != null && previousRequest.isRunning();
request.into(target); request.into(target);
@ -486,7 +484,7 @@ public class ThumbnailView extends FrameLayout {
request = request.override(width, height); request = request.override(width, height);
} }
request.into(new BitmapCaptor(image, future)); request.into(new GlideDrawableListeningTarget(image, future));
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
return future; return future;
@ -642,22 +640,4 @@ public class ThumbnailView extends FrameLayout {
blurHash.setImageDrawable(null); blurHash.setImageDrawable(null);
} }
} }
public class BitmapCaptor extends GlideDrawableListeningTarget {
public BitmapCaptor(@NonNull ImageView view, @NonNull SettableFuture<Boolean> loaded) {
super(view, loaded);
}
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
imageBitmap = ((BitmapDrawable) resource).getBitmap();
super.onResourceReady(resource, transition);
}
@Override public void onLoadCleared(@Nullable Drawable placeholder) {
imageBitmap = null;
super.onLoadCleared(placeholder);
}
}
} }

Wyświetl plik

@ -2393,7 +2393,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo
mediaThumbnailStub.require().getCorners().getBottomRight(), mediaThumbnailStub.require().getCorners().getBottomRight(),
mediaThumbnailStub.require().getCorners().getBottomLeft() mediaThumbnailStub.require().getCorners().getBottomLeft()
)); ));
MediaPreviewCache.INSTANCE.setBitmap(mediaThumbnailStub.require().getBitmap()); MediaPreviewCache.INSTANCE.setDrawable(mediaThumbnailStub.require().getDrawable());
eventListener.goToMediaPreview(ConversationItem.this, mediaThumbnailStub.require(), args); eventListener.goToMediaPreview(ConversationItem.this, mediaThumbnailStub.require(), args);
} else if (slide.getUri() != null) { } else if (slide.getUri() != null) {
Log.i(TAG, "Clicked: " + slide.getUri() + " , " + slide.getContentType()); Log.i(TAG, "Clicked: " + slide.getUri() + " , " + slide.getContentType());

Wyświetl plik

@ -347,7 +347,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
thumbnailView.setImageResource(glideRequests, slide, false, false); thumbnailView.setImageResource(glideRequests, slide, false, false);
thumbnailView.setOnClickListener(view -> { thumbnailView.setOnClickListener(view -> {
MediaPreviewCache.INSTANCE.setBitmap(thumbnailView.getBitmap()); MediaPreviewCache.INSTANCE.setDrawable(thumbnailView.getImageDrawable());
itemClickListener.onMediaClicked(thumbnailView, mediaRecord); itemClickListener.onMediaClicked(thumbnailView, mediaRecord);
}); });
thumbnailView.setOnLongClickListener(view -> onLongClick()); thumbnailView.setOnLongClickListener(view -> onLongClick());
@ -598,7 +598,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
@Override @Override
protected @NonNull View getTransitionAnchor() { protected @NonNull View getTransitionAnchor() {
MediaPreviewCache.INSTANCE.setBitmap(null); MediaPreviewCache.INSTANCE.setDrawable(null);
return thumbnailView; return thumbnailView;
} }

Wyświetl plik

@ -1,6 +1,6 @@
package org.thoughtcrime.securesms.mediapreview 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 * Stores the bitmap for a thumbnail we are animating from via a shared
@ -8,5 +8,5 @@ import android.graphics.Bitmap
* receiving end. * receiving end.
*/ */
object MediaPreviewCache { object MediaPreviewCache {
var bitmap: Bitmap? = null var drawable: Drawable? = null
} }

Wyświetl plik

@ -36,7 +36,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) { override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
val args = MediaIntentFactory.requireArguments(intent.extras!!) val args = MediaIntentFactory.requireArguments(intent.extras!!)
if (MediaPreviewCache.bitmap != null) { if (MediaPreviewCache.drawable != null) {
val originalCorners = ShapeAppearanceModel.Builder() val originalCorners = ShapeAppearanceModel.Builder()
.setTopLeftCornerSize(args.sharedElementArgs.topLeft) .setTopLeftCornerSize(args.sharedElementArgs.topLeft)
.setTopRightCornerSize(args.sharedElementArgs.topRight) .setTopRightCornerSize(args.sharedElementArgs.topRight)
@ -85,8 +85,8 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
setContentView(R.layout.activity_mediapreview_v2) setContentView(R.layout.activity_mediapreview_v2)
transitionImageView = findViewById(R.id.transition_image_view) transitionImageView = findViewById(R.id.transition_image_view)
if (MediaPreviewCache.bitmap != null) { if (MediaPreviewCache.drawable != null) {
transitionImageView.setImageBitmap(MediaPreviewCache.bitmap) transitionImageView.setImageDrawable(MediaPreviewCache.drawable)
} else { } else {
transitionImageView.visibility = View.INVISIBLE transitionImageView.visibility = View.INVISIBLE
viewModel.setIsInSharedAnimation(false) viewModel.setIsInSharedAnimation(false)
@ -119,7 +119,7 @@ class MediaPreviewV2Activity : PassphraseRequiredActivity(), VoiceNoteMediaContr
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
MediaPreviewCache.bitmap = null MediaPreviewCache.drawable = null
} }
companion object { companion object {

Wyświetl plik

@ -542,7 +542,7 @@ public class AttachmentManager {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (slide.isPresent()) { if (slide.isPresent()) {
MediaPreviewCache.INSTANCE.setBitmap(((ThumbnailView) v).getBitmap()); MediaPreviewCache.INSTANCE.setDrawable(((ThumbnailView) v).getImageDrawable());
previewImageDraft(slide.get()); previewImageDraft(slide.get());
} }
} }