
com.bumptech.glide.load.engine.ResourceCacheKey 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.load.Key;
import com.bumptech.glide.load.Options;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.util.LruCache;
import com.bumptech.glide.util.Util;
import java.nio.ByteBuffer;
import java.security.MessageDigest;
/**
* A cache key for downsampled and transformed resource data + any requested signature.
*/
final class ResourceCacheKey implements Key {
private static final LruCache, byte[]> RESOURCE_CLASS_BYTES = new LruCache<>(50);
private final Key sourceKey;
private final Key signature;
private final int width;
private final int height;
private final Class> decodedResourceClass;
private final Options options;
private final Transformation> transformation;
public ResourceCacheKey(Key sourceKey, Key signature, int width, int height,
Transformation> appliedTransformation, Class> decodedResourceClass, Options options) {
this.sourceKey = sourceKey;
this.signature = signature;
this.width = width;
this.height = height;
this.transformation = appliedTransformation;
this.decodedResourceClass = decodedResourceClass;
this.options = options;
}
@Override
public boolean equals(Object o) {
if (o instanceof ResourceCacheKey) {
ResourceCacheKey other = (ResourceCacheKey) o;
return height == other.height && width == other.width
&& Util.bothNullOrEqual(transformation, other.transformation)
&& decodedResourceClass.equals(other.decodedResourceClass)
&& sourceKey.equals(other.sourceKey)
&& signature.equals(other.signature)
&& options.equals(other.options);
}
return false;
}
@Override
public int hashCode() {
int result = sourceKey.hashCode();
result = 31 * result + signature.hashCode();
result = 31 * result + width;
result = 31 * result + height;
if (transformation != null) {
result = 31 * result + transformation.hashCode();
}
result = 31 * result + decodedResourceClass.hashCode();
result = 31 * result + options.hashCode();
return result;
}
// TODO: Include relevant options?
@Override
public void updateDiskCacheKey(MessageDigest messageDigest) {
byte[] dimensions = ByteBuffer.allocate(8).putInt(width).putInt(height).array();
signature.updateDiskCacheKey(messageDigest);
sourceKey.updateDiskCacheKey(messageDigest);
messageDigest.update(dimensions);
if (transformation != null) {
transformation.updateDiskCacheKey(messageDigest);
}
options.updateDiskCacheKey(messageDigest);
messageDigest.update(getResourceClassBytes());
}
private byte[] getResourceClassBytes() {
byte[] result = RESOURCE_CLASS_BYTES.get(decodedResourceClass);
if (result == null) {
result = decodedResourceClass.getName().getBytes(CHARSET);
RESOURCE_CLASS_BYTES.put(decodedResourceClass, result);
}
return result;
}
@Override
public String toString() {
return "ResourceCacheKey{"
+ "sourceKey=" + sourceKey
+ ", signature=" + signature
+ ", width=" + width
+ ", height=" + height
+ ", decodedResourceClass=" + decodedResourceClass
+ ", transformation='" + transformation + '\''
+ ", options=" + options
+ '}';
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy