Add ui wiring for archive thumbnail support.

This commit is contained in:
Clark
2024-05-22 19:02:20 -04:00
committed by Cody Henthorne
parent 3d382ee15e
commit 2a3cb80217
15 changed files with 451 additions and 100 deletions

View File

@@ -370,7 +370,16 @@ public class ThumbnailView extends FrameLayout {
transferControlViewStub.get().setSlides(List.of(slide));
}
int transferState = TransferControlView.getTransferState(List.of(slide));
transferControlViewStub.get().setVisible(showControls && transferState != AttachmentTable.TRANSFER_PROGRESS_DONE && transferState != AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE);
boolean isOffloadedImage = transferState == AttachmentTable.TRANSFER_RESTORE_OFFLOADED && MediaUtil.isImageType(slide.getContentType());
if (!showControls ||
transferState == AttachmentTable.TRANSFER_PROGRESS_DONE ||
transferState == AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE ||
isOffloadedImage) {
transferControlViewStub.get().setVisible(false);
} else {
transferControlViewStub.get().setVisible(true);
}
if (slide.getUri() != null && slide.hasPlayOverlay() &&
(slide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE || isPreview))
@@ -412,7 +421,10 @@ public class ThumbnailView extends FrameLayout {
SettableFuture<Boolean> result = new SettableFuture<>();
boolean resultHandled = false;
if (slide.hasPlaceholder() && (previousBlurHash == null || !Objects.equals(slide.getPlaceholderBlur(), previousBlurHash))) {
if (slide.hasThumbnail()) {
buildArchiveThumbnailRequestBuilder(requestManager, slide).into(new GlideBitmapListeningTarget(blurHash, result));
resultHandled = true;
} else if (slide.hasPlaceholder() && (previousBlurHash == null || !Objects.equals(slide.getPlaceholderBlur(), previousBlurHash))) {
buildPlaceholderRequestBuilder(requestManager, slide).into(new GlideBitmapListeningTarget(blurHash, result));
resultHandled = true;
} else if (!slide.hasPlaceholder()) {
@@ -420,7 +432,7 @@ public class ThumbnailView extends FrameLayout {
blurHash.setImageDrawable(null);
}
if (slide.getUri() != null) {
if (slide.getDisplayUri() != null) {
if (!MediaUtil.isJpegType(slide.getContentType()) && !MediaUtil.isVideoType(slide.getContentType())) {
SettableFuture<Boolean> thumbnailFuture = new SettableFuture<>();
thumbnailFuture.deferTo(result);
@@ -542,7 +554,7 @@ public class ThumbnailView extends FrameLayout {
}
private RequestBuilder<Drawable> buildThumbnailRequestBuilder(@NonNull RequestManager requestManager, @NonNull Slide slide) {
RequestBuilder<Drawable> requestBuilder = applySizing(requestManager.load(new DecryptableUri(Objects.requireNonNull(slide.getUri())))
RequestBuilder<Drawable> requestBuilder = applySizing(requestManager.load(new DecryptableUri(Objects.requireNonNull(slide.getDisplayUri())))
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
.transition(withCrossFade()));
@@ -611,6 +623,25 @@ public class ThumbnailView extends FrameLayout {
}
}
private RequestBuilder<Bitmap> buildArchiveThumbnailRequestBuilder(@NonNull RequestManager requestManager, @NonNull Slide slide) {
RequestBuilder<Bitmap> bitmap = requestManager.asBitmap();
Uri thumbnailUri = slide.getThumbnailUri();
if (thumbnailUri != null) {
bitmap = bitmap.load(slide.getThumbnailUri());
} else {
bitmap = bitmap.load(slide.getPlaceholderRes(getContext().getTheme()));
}
final RequestBuilder<Bitmap> resizedRequest = applySizing(bitmap.diskCacheStrategy(DiskCacheStrategy.NONE));
if (thumbnailUri != null) {
return resizedRequest.centerCrop();
} else {
return resizedRequest;
}
}
private <TranscodeType> RequestBuilder<TranscodeType> applySizing(@NonNull RequestBuilder<TranscodeType> request) {
int[] size = new int[2];
fillTargetDimensions(size, dimens, bounds);
@@ -648,13 +679,8 @@ public class ThumbnailView extends FrameLayout {
private class ThumbnailClickDispatcher implements View.OnClickListener {
@Override
public void onClick(View view) {
boolean validThumbnail = slide != null &&
slide.asAttachment().getUri() != null &&
slide.getTransferState() == AttachmentTable.TRANSFER_PROGRESS_DONE;
boolean permanentFailure = slide != null && slide.asAttachment().isPermanentlyFailed();
if (thumbnailClickListener != null && (validThumbnail || permanentFailure)) {
boolean controlsVisible = transferControlViewStub.getVisibility() == View.VISIBLE;
if (thumbnailClickListener != null && !controlsVisible) {
thumbnailClickListener.onClick(view, slide);
} else if (parentClickListener != null) {
parentClickListener.onClick(view);