mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-21 18:26:57 +00:00
Move blurhash to its own module.
This commit is contained in:
@@ -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() {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user