com.bumptech.glide.load.engine.DecodeHelper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of glide Show documentation
Show all versions of glide Show documentation
A fast and efficient image loading library for Android focused on smooth scrolling.
package com.bumptech.glide.load.engine;
import com.bumptech.glide.GlideContext;
import com.bumptech.glide.Priority;
import com.bumptech.glide.Registry;
import com.bumptech.glide.load.Encoder;
import com.bumptech.glide.load.Key;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.ResourceEncoder;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.data.DataRewinder;
import com.bumptech.glide.load.engine.DecodeJob.DiskCacheProvider;
import com.bumptech.glide.load.engine.bitmap_recycle.ArrayPool;
import com.bumptech.glide.load.engine.cache.DiskCache;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoader.LoadData;
import com.bumptech.glide.load.resource.UnitTransformation;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
final class DecodeHelper {
private final List> loadData = new ArrayList<>();
private final List cacheKeys = new ArrayList<>();
private GlideContext glideContext;
private Object model;
private int width;
private int height;
private Class> resourceClass;
private DecodeJob.DiskCacheProvider diskCacheProvider;
private Options options;
private Map, Transformation>> transformations;
private Class transcodeClass;
private boolean isLoadDataSet;
private boolean isCacheKeysSet;
private Key signature;
private Priority priority;
private DiskCacheStrategy diskCacheStrategy;
private boolean isTransformationRequired;
private boolean isScaleOnlyOrNoTransform;
@SuppressWarnings("unchecked")
void init(
GlideContext glideContext,
Object model,
Key signature,
int width,
int height,
DiskCacheStrategy diskCacheStrategy,
Class> resourceClass,
Class transcodeClass,
Priority priority,
Options options,
Map, Transformation>> transformations,
boolean isTransformationRequired,
boolean isScaleOnlyOrNoTransform,
DiskCacheProvider diskCacheProvider) {
this.glideContext = glideContext;
this.model = model;
this.signature = signature;
this.width = width;
this.height = height;
this.diskCacheStrategy = diskCacheStrategy;
this.resourceClass = resourceClass;
this.diskCacheProvider = diskCacheProvider;
this.transcodeClass = (Class) transcodeClass;
this.priority = priority;
this.options = options;
this.transformations = transformations;
this.isTransformationRequired = isTransformationRequired;
this.isScaleOnlyOrNoTransform = isScaleOnlyOrNoTransform;
}
void clear() {
glideContext = null;
model = null;
signature = null;
resourceClass = null;
transcodeClass = null;
options = null;
priority = null;
transformations = null;
diskCacheStrategy = null;
loadData.clear();
isLoadDataSet = false;
cacheKeys.clear();
isCacheKeysSet = false;
}
DiskCache getDiskCache() {
return diskCacheProvider.getDiskCache();
}
DiskCacheStrategy getDiskCacheStrategy() {
return diskCacheStrategy;
}
DataRewinder getRewinder(T data) {
return glideContext.getRegistry().getRewinder(data);
}
Priority getPriority() {
return priority;
}
Options getOptions() {
return options;
}
Key getSignature() {
return signature;
}
int getWidth() {
return width;
}
int getHeight() {
return height;
}
ArrayPool getArrayPool() {
return glideContext.getArrayPool();
}
Class> getTranscodeClass() {
return transcodeClass;
}
Class> getModelClass() {
return model.getClass();
}
List> getRegisteredResourceClasses() {
return glideContext
.getRegistry()
.getRegisteredResourceClasses(model.getClass(), resourceClass, transcodeClass);
}
boolean hasLoadPath(Class> dataClass) {
return getLoadPath(dataClass) != null;
}
LoadPath getLoadPath(Class dataClass) {
return glideContext.getRegistry().getLoadPath(dataClass, resourceClass, transcodeClass);
}
boolean isScaleOnlyOrNoTransform() {
return isScaleOnlyOrNoTransform;
}
@SuppressWarnings("unchecked")
Transformation getTransformation(Class resourceClass) {
Transformation result = (Transformation) transformations.get(resourceClass);
if (result == null) {
for (Entry, Transformation>> entry : transformations.entrySet()) {
if (entry.getKey().isAssignableFrom(resourceClass)) {
result = (Transformation) entry.getValue();
break;
}
}
}
if (result == null) {
if (transformations.isEmpty() && isTransformationRequired) {
throw new IllegalArgumentException(
"Missing transformation for "
+ resourceClass
+ ". If you wish to"
+ " ignore unknown resource types, use the optional transformation methods.");
} else {
return UnitTransformation.get();
}
}
return result;
}
boolean isResourceEncoderAvailable(Resource> resource) {
return glideContext.getRegistry().isResourceEncoderAvailable(resource);
}
ResourceEncoder getResultEncoder(Resource resource) {
return glideContext.getRegistry().getResultEncoder(resource);
}
List> getModelLoaders(File file)
throws Registry.NoModelLoaderAvailableException {
return glideContext.getRegistry().getModelLoaders(file);
}
boolean isSourceKey(Key key) {
List> loadData = getLoadData();
//noinspection ForLoopReplaceableByForEach to improve perf
for (int i = 0, size = loadData.size(); i < size; i++) {
LoadData> current = loadData.get(i);
if (current.sourceKey.equals(key)) {
return true;
}
}
return false;
}
List> getLoadData() {
if (!isLoadDataSet) {
isLoadDataSet = true;
loadData.clear();
List> modelLoaders = glideContext.getRegistry().getModelLoaders(model);
//noinspection ForLoopReplaceableByForEach to improve perf
for (int i = 0, size = modelLoaders.size(); i < size; i++) {
ModelLoader