Search in sources :

Example 1 with BlurHash

use of org.thoughtcrime.securesms.blurhash.BlurHash in project Signal-Android by WhisperSystems.

the class ThumbnailView method buildPlaceholderGlideRequest.

private RequestBuilder buildPlaceholderGlideRequest(@NonNull GlideRequests glideRequests, @NonNull Slide slide) {
    GlideRequest<Bitmap> bitmap = glideRequests.asBitmap();
    BlurHash placeholderBlur = slide.getPlaceholderBlur();
    if (placeholderBlur != null) {
        bitmap = bitmap.load(placeholderBlur);
    } else {
        bitmap = bitmap.load(slide.getPlaceholderRes(getContext().getTheme()));
    }
    return applySizing(bitmap.diskCacheStrategy(DiskCacheStrategy.NONE), new CenterCrop());
}
Also used : Bitmap(android.graphics.Bitmap) CenterCrop(com.bumptech.glide.load.resource.bitmap.CenterCrop) BlurHash(org.thoughtcrime.securesms.blurhash.BlurHash)

Example 2 with BlurHash

use of org.thoughtcrime.securesms.blurhash.BlurHash in project Signal-Android by WhisperSystems.

the class ThumbnailView method setImageResource.

@UiThread
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Slide slide, boolean showControls, boolean isPreview, int naturalWidth, int naturalHeight) {
    if (showControls) {
        getTransferControls().setSlide(slide);
        getTransferControls().setDownloadClickListener(new DownloadClickDispatcher());
    } else if (transferControls.isPresent()) {
        getTransferControls().setVisibility(View.GONE);
    }
    if (slide.getUri() != null && slide.hasPlayOverlay() && (slide.getTransferState() == AttachmentDatabase.TRANSFER_PROGRESS_DONE || isPreview)) {
        this.playOverlay.setVisibility(View.VISIBLE);
    } else {
        this.playOverlay.setVisibility(View.GONE);
    }
    if (Util.equals(slide, this.slide)) {
        Log.i(TAG, "Not re-loading slide " + slide.asAttachment().getUri());
        return new SettableFuture<>(false);
    }
    if (this.slide != null && this.slide.getFastPreflightId() != null && (!slide.hasVideo() || Util.equals(this.slide.getUri(), slide.getUri())) && Util.equals(this.slide.getFastPreflightId(), slide.getFastPreflightId())) {
        Log.i(TAG, "Not re-loading slide for fast preflight: " + slide.getFastPreflightId());
        this.slide = slide;
        return new SettableFuture<>(false);
    }
    Log.i(TAG, "loading part with id " + slide.asAttachment().getUri() + ", progress " + slide.getTransferState() + ", fast preflight id: " + slide.asAttachment().getFastPreflightId());
    BlurHash previousBlurhash = this.slide != null ? this.slide.getPlaceholderBlur() : null;
    this.slide = slide;
    this.captionIcon.setVisibility(slide.getCaption().isPresent() ? VISIBLE : GONE);
    dimens[WIDTH] = naturalWidth;
    dimens[HEIGHT] = naturalHeight;
    invalidate();
    SettableFuture<Boolean> result = new SettableFuture<>();
    boolean resultHandled = false;
    if (slide.hasPlaceholder() && (previousBlurhash == null || !Objects.equals(slide.getPlaceholderBlur(), previousBlurhash))) {
        buildPlaceholderGlideRequest(glideRequests, slide).into(new GlideBitmapListeningTarget(blurhash, result));
        resultHandled = true;
    } else if (!slide.hasPlaceholder()) {
        glideRequests.clear(blurhash);
        blurhash.setImageDrawable(null);
    }
    if (slide.getUri() != null) {
        if (!MediaUtil.isJpegType(slide.getContentType()) && !MediaUtil.isVideoType(slide.getContentType())) {
            SettableFuture<Boolean> thumbnailFuture = new SettableFuture<>();
            thumbnailFuture.deferTo(result);
            thumbnailFuture.addListener(new BlurhashClearListener(glideRequests, blurhash));
        }
        buildThumbnailGlideRequest(glideRequests, slide).into(new GlideDrawableListeningTarget(image, result));
        resultHandled = true;
    } else {
        glideRequests.clear(image);
        image.setImageDrawable(null);
    }
    if (!resultHandled) {
        result.set(false);
    }
    return result;
}
Also used : SettableFuture(org.thoughtcrime.securesms.util.concurrent.SettableFuture) BlurHash(org.thoughtcrime.securesms.blurhash.BlurHash) UiThread(androidx.annotation.UiThread)

Aggregations

BlurHash (org.thoughtcrime.securesms.blurhash.BlurHash)2 Bitmap (android.graphics.Bitmap)1 UiThread (androidx.annotation.UiThread)1 CenterCrop (com.bumptech.glide.load.resource.bitmap.CenterCrop)1 SettableFuture (org.thoughtcrime.securesms.util.concurrent.SettableFuture)1