Specify scale type for glide thumbnails.

This commit is contained in:
Clark
2023-06-29 15:32:04 -04:00
committed by GitHub
parent 1baebe7475
commit 8714e4298e
13 changed files with 59 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
/*
* Copyright 2023 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.signal.glide.transforms
import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy
import kotlin.math.max
import kotlin.math.min
object SignalDownsampleStrategy {
/**
* Center outside, but don't up-scale, only downscale. You should be setting centerOutside
* on the target image view to still maintain center outside behavior.
*/
@JvmField
val CENTER_OUTSIDE_NO_UPSCALE: DownsampleStrategy = CenterOutsideNoUpscale()
private class CenterOutsideNoUpscale : DownsampleStrategy() {
override fun getScaleFactor(
sourceWidth: Int,
sourceHeight: Int,
requestedWidth: Int,
requestedHeight: Int
): Float {
val widthPercentage = requestedWidth / sourceWidth.toFloat()
val heightPercentage = requestedHeight / sourceHeight.toFloat()
return min(MAX_SCALE_FACTOR, max(widthPercentage, heightPercentage))
}
override fun getSampleSizeRounding(
sourceWidth: Int,
sourceHeight: Int,
requestedWidth: Int,
requestedHeight: Int
): SampleSizeRounding {
return SampleSizeRounding.QUALITY
}
companion object {
private const val MAX_SCALE_FACTOR = 1f
}
}
}

View File

@@ -125,6 +125,7 @@ public class RecentPhotoViewRail extends FrameLayout implements LoaderManager.Lo
.signature(signature)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.transition(DrawableTransitionOptions.withCrossFade())
.centerCrop()
.into(viewHolder.imageView);
viewHolder.imageView.setOnClickListener(v -> {

View File

@@ -28,6 +28,7 @@ import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import org.signal.core.util.logging.Log;
import org.signal.glide.transforms.SignalDownsampleStrategy;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.blurhash.BlurHash;
import org.thoughtcrime.securesms.database.AttachmentTable;
@@ -454,6 +455,7 @@ public class ThumbnailView extends FrameLayout {
GlideRequest<Drawable> request = glideRequests.load(new DecryptableUri(uri))
.diskCacheStrategy(DiskCacheStrategy.NONE)
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.listener(listener);
if (animate) {
@@ -486,6 +488,7 @@ public class ThumbnailView extends FrameLayout {
GlideRequest<Drawable> request = glideRequests.load(model)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.placeholder(model.getPlaceholder())
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.transition(withCrossFade());
request = override(request, width, height);
@@ -554,6 +557,7 @@ public class ThumbnailView extends FrameLayout {
private GlideRequest<Drawable> buildThumbnailGlideRequest(@NonNull GlideRequests glideRequests, @NonNull Slide slide) {
GlideRequest<Drawable> request = applySizing(glideRequests.load(new DecryptableUri(Objects.requireNonNull(slide.getUri())))
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.transition(withCrossFade()));
boolean doNotShowMissingThumbnailImage = Build.VERSION.SDK_INT < 23;

View File

@@ -263,6 +263,7 @@ public class CallParticipantView extends ConstraintLayout {
.fallback(fallbackPhoto.asCallCard(getContext()))
.error(fallbackPhoto.asCallCard(getContext()))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.fitCenter()
.into(pipAvatar);
pipAvatar.setScaleType(contactPhoto == null ? ImageView.ScaleType.CENTER_INSIDE : ImageView.ScaleType.CENTER_CROP);

View File

@@ -68,6 +68,7 @@ public class ConversationStickerSuggestionAdapter extends RecyclerView.Adapter<C
void bind(@NonNull GlideRequests glideRequests, @NonNull EventListener eventListener, @NonNull StickerRecord sticker) {
glideRequests.load(new DecryptableUri(sticker.getUri()))
.transition(DrawableTransitionOptions.withCrossFade())
.fitCenter()
.into(image);
itemView.setOnClickListener(v -> {

View File

@@ -100,6 +100,7 @@ final class GiphyMp4ViewHolder extends MappingViewHolder<GiphyImage> implements
.placeholder(placeholder)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.transition(DrawableTransitionOptions.withCrossFade())
.centerCrop()
.into(stillImage);
}
}

View File

@@ -41,7 +41,7 @@ public class MediaSendGifFragment extends Fragment implements MediaSendPageFragm
super.onViewCreated(view, savedInstanceState);
uri = getArguments().getParcelable(KEY_URI);
GlideApp.with(this).load(new DecryptableStreamUriLoader.DecryptableUri(uri)).into((ImageView) view);
GlideApp.with(this).load(new DecryptableStreamUriLoader.DecryptableUri(uri)).fitCenter().into((ImageView) view);
}
@Override

View File

@@ -143,6 +143,7 @@ public class ViewOnceMessageActivity extends PassphraseRequiredActivity implemen
GlideApp.with(this)
.load(new DecryptableUri(uri))
.fitCenter()
.into(image);
}

View File

@@ -273,6 +273,7 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter<String
glideRequests.load(new DecryptableUri(stickerPack.getCover().getUri()))
.transition(DrawableTransitionOptions.withCrossFade())
.fitCenter()
.set(ApngOptions.ANIMATE, allowApngAnimation)
.into(cover);

View File

@@ -206,6 +206,7 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity
: new StickerRemoteUri(cover.getPackId(), cover.getPackKey(), cover.getId());
GlideApp.with(this).load(model)
.transition(DrawableTransitionOptions.withCrossFade())
.fitCenter()
.set(ApngOptions.ANIMATE, DeviceProperties.shouldAllowApngStickerAnimation(this))
.into(coverImage);
} else {

View File

@@ -82,6 +82,7 @@ public final class StickerPackPreviewAdapter extends RecyclerView.Adapter<Sticke
glideRequests.load(currentGlideModel)
.transition(DrawableTransitionOptions.withCrossFade())
.set(ApngOptions.ANIMATE, allowApngAnimation)
.centerInside()
.into(image);
image.setOnLongClickListener(v -> {

View File

@@ -40,6 +40,7 @@ final class StickerPreviewPopup extends PopupWindow {
emojiText.setText(emoji);
glideRequests.load(stickerGlideModel)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.fitCenter()
.into(image);
}
}

View File

@@ -58,6 +58,7 @@ public final class AvatarUtil {
GlideApp.with(target)
.load(photo)
.transform(new BlurTransformation(context, 0.25f, BlurTransformation.MAX_RADIUS))
.centerCrop()
.into(new CustomViewTarget<View, Drawable>(target) {
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {