Move blurhash to its own module.

This commit is contained in:
Alex Hart
2026-02-02 12:17:16 -04:00
committed by GitHub
parent 35190ebb63
commit 2aa0b3700f
39 changed files with 142 additions and 181 deletions

View File

@@ -0,0 +1,81 @@
/*
* Copyright 2026 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.signal.glide.blurhash;
import androidx.annotation.NonNull;
import com.bumptech.glide.Priority;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.data.DataFetcher;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoaderFactory;
import com.bumptech.glide.load.model.MultiModelLoaderFactory;
import com.bumptech.glide.signature.ObjectKey;
import org.signal.blurhash.BlurHash;
public final class BlurHashModelLoader implements ModelLoader<BlurHash, BlurHash> {
private BlurHashModelLoader() {}
@Override
public LoadData<BlurHash> buildLoadData(@NonNull BlurHash blurHash,
int width,
int height,
@NonNull Options options)
{
return new LoadData<>(new ObjectKey(blurHash.getHash()), new BlurDataFetcher(blurHash));
}
@Override
public boolean handles(@NonNull BlurHash blurHash) {
return true;
}
private final class BlurDataFetcher implements DataFetcher<BlurHash> {
private final BlurHash blurHash;
private BlurDataFetcher(@NonNull BlurHash blurHash) {
this.blurHash = blurHash;
}
@Override
public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super BlurHash> callback) {
callback.onDataReady(blurHash);
}
@Override
public void cleanup() {
}
@Override
public void cancel() {
}
@Override
public @NonNull Class<BlurHash> getDataClass() {
return BlurHash.class;
}
@Override
public @NonNull DataSource getDataSource() {
return DataSource.LOCAL;
}
}
public static class Factory implements ModelLoaderFactory<BlurHash, BlurHash> {
@Override
public @NonNull ModelLoader<BlurHash, BlurHash> build(@NonNull MultiModelLoaderFactory multiFactory) {
return new BlurHashModelLoader();
}
@Override
public void teardown() {
}
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright 2026 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.signal.glide.blurhash;
import android.graphics.Bitmap;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.ResourceDecoder;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.resource.SimpleResource;
import org.signal.blurhash.BlurHash;
import org.signal.blurhash.BlurHashDecoder;
import java.io.IOException;
public class BlurHashResourceDecoder implements ResourceDecoder<BlurHash, Bitmap> {
private static final int MAX_DIMEN = 20;
@Override
public boolean handles(@NonNull BlurHash source, @NonNull Options options) throws IOException {
return true;
}
@Override
public @Nullable Resource<Bitmap> decode(@NonNull BlurHash source, int width, int height, @NonNull Options options) throws IOException {
final int finalWidth;
final int finalHeight;
if (width > height) {
finalWidth = Math.min(width, MAX_DIMEN);
finalHeight = (int) (finalWidth * height / (float) width);
} else {
finalHeight = Math.min(height, MAX_DIMEN);
finalWidth = (int) (finalHeight * width / (float) height);
}
return new SimpleResource<>(BlurHashDecoder.decode(source.getHash(), finalWidth, finalHeight));
}
}