mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 01:07:47 +00:00
Fixed ThumbnailView sizing problems.
Glide will use the dimensions of the target ImageView as the dimensions for the image it's loading. This caused problems in the case of ThumbnailView, as we were constantly changing the ImageView dimensions, meaning Glide may not have the most recent values (it may be called in between measure calls, for instance). To solve this, we now will always override the default image dimensions when we load an image. If no dimensions are present, we will default to the layout_width and layout_height of the ThumbnailView. Fixes #7810
This commit is contained in:
parent
07e8ae716c
commit
a792a6e6ae
@ -10,6 +10,7 @@ import android.util.AttributeSet;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.widget.FrameLayout;
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
@ -225,10 +226,6 @@ public class ThumbnailView extends FrameLayout {
|
|||||||
boolean showControls, boolean isPreview, int naturalWidth,
|
boolean showControls, boolean isPreview, int naturalWidth,
|
||||||
int naturalHeight)
|
int naturalHeight)
|
||||||
{
|
{
|
||||||
dimens[WIDTH] = naturalWidth;
|
|
||||||
dimens[HEIGHT] = naturalHeight;
|
|
||||||
invalidate();
|
|
||||||
|
|
||||||
if (showControls) {
|
if (showControls) {
|
||||||
getTransferControls().setSlide(slide);
|
getTransferControls().setSlide(slide);
|
||||||
getTransferControls().setDownloadClickListener(new DownloadClickDispatcher());
|
getTransferControls().setDownloadClickListener(new DownloadClickDispatcher());
|
||||||
@ -263,6 +260,10 @@ public class ThumbnailView extends FrameLayout {
|
|||||||
|
|
||||||
this.slide = slide;
|
this.slide = slide;
|
||||||
|
|
||||||
|
dimens[WIDTH] = naturalWidth;
|
||||||
|
dimens[HEIGHT] = naturalHeight;
|
||||||
|
invalidate();
|
||||||
|
|
||||||
if (slide.getThumbnailUri() != null) buildThumbnailGlideRequest(glideRequests, slide).into(image);
|
if (slide.getThumbnailUri() != null) buildThumbnailGlideRequest(glideRequests, slide).into(image);
|
||||||
else if (slide.hasPlaceholder()) buildPlaceholderGlideRequest(glideRequests, slide).into(image);
|
else if (slide.hasPlaceholder()) buildPlaceholderGlideRequest(glideRequests, slide).into(image);
|
||||||
else glideRequests.clear(image);
|
else glideRequests.clear(image);
|
||||||
@ -316,14 +317,31 @@ public class ThumbnailView extends FrameLayout {
|
|||||||
.diskCacheStrategy(DiskCacheStrategy.NONE), new FitCenter());
|
.diskCacheStrategy(DiskCacheStrategy.NONE), new FitCenter());
|
||||||
}
|
}
|
||||||
|
|
||||||
private GlideRequest applySizing(@NonNull GlideRequest request, @NonNull BitmapTransformation unavailableDimensSizing) {
|
private GlideRequest applySizing(@NonNull GlideRequest request, @NonNull BitmapTransformation fitting) {
|
||||||
int[] size = new int[2];
|
int[] size = new int[2];
|
||||||
fillTargetDimensions(size, dimens, bounds);
|
fillTargetDimensions(size, dimens, bounds);
|
||||||
if (size[WIDTH] == 0 && size[HEIGHT] == 0) {
|
if (size[WIDTH] == 0 && size[HEIGHT] == 0) {
|
||||||
return request.transforms(unavailableDimensSizing, new RoundedCorners(radius));
|
size[WIDTH] = getDefaultWidth();
|
||||||
|
size[HEIGHT] = getDefaultHeight();
|
||||||
}
|
}
|
||||||
return request.override(size[WIDTH], size[HEIGHT])
|
return request.override(size[WIDTH], size[HEIGHT])
|
||||||
.transforms(new CenterCrop(), new RoundedCorners(radius));
|
.transforms(fitting, new RoundedCorners(radius));
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getDefaultWidth() {
|
||||||
|
ViewGroup.LayoutParams params = getLayoutParams();
|
||||||
|
if (params != null) {
|
||||||
|
return Math.max(params.width, 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getDefaultHeight() {
|
||||||
|
ViewGroup.LayoutParams params = getLayoutParams();
|
||||||
|
if (params != null) {
|
||||||
|
return Math.max(params.height, 0);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ThumbnailClickDispatcher implements View.OnClickListener {
|
private class ThumbnailClickDispatcher implements View.OnClickListener {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user