blob: 5037b3524dc9d0351db4e6b9ad24e436bbb3c819 [file] [log] [blame]
package com.bumptech.glide.load.engine.prefill;
import android.graphics.Bitmap;
/**
* A container for a set of options used to pre-fill a {@link com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool}
* with {@link Bitmap Bitmaps} of a single size and configuration.
*/
public final class PreFillType {
// Visible for testing.
static final Bitmap.Config DEFAULT_CONFIG = Bitmap.Config.RGB_565;
private final int width;
private final int height;
private final Bitmap.Config config;
private final int weight;
/**
* Constructor for a single type of {@link android.graphics.Bitmap}.
*
* @param width The width in pixels of the {@link android.graphics.Bitmap Bitmaps} to
* pre-fill.
* @param height The height in pixels of the {@link android.graphics.Bitmap Bitmaps} to
* pre-fill.
* @param config The {@link android.graphics.Bitmap.Config} of the {@link android.graphics.Bitmap Bitmaps} to
* pre-fill.
* @param weight An integer indicating how to balance pre-filling this size and configuration of
* {@link android.graphics.Bitmap} against any other sizes/configurations that may be being pre-filled.
*/
PreFillType(int width, int height, Bitmap.Config config, int weight) {
if (config == null) {
throw new NullPointerException("Config must not be null");
}
this.width = width;
this.height = height;
this.config = config;
this.weight = weight;
}
/**
* Returns the width in pixels of the {@link android.graphics.Bitmap Bitmaps}.
*/
int getWidth() {
return width;
}
/**
* Returns the height in pixels of the {@link android.graphics.Bitmap Bitmaps}.
*/
int getHeight() {
return height;
}
/**
* Returns the {@link android.graphics.Bitmap.Config} of the {@link android.graphics.Bitmap Bitmaps}.
*/
Bitmap.Config getConfig() {
return config;
}
/**
* Returns the weight of the {@link android.graphics.Bitmap Bitmaps} of this type.
*/
int getWeight() {
return weight;
}
@Override
public boolean equals(Object o) {
if (o instanceof PreFillType) {
PreFillType other = (PreFillType) o;
return height == other.height
&& width == other.width
&& weight == other.weight
&& config == other.config;
}
return false;
}
@Override
public int hashCode() {
int result = width;
result = 31 * result + height;
result = 31 * result + config.hashCode();
result = 31 * result + weight;
return result;
}
@Override
public String toString() {
return "PreFillSize{"
+ "width=" + width
+ ", height=" + height
+ ", config=" + config
+ ", weight=" + weight
+ '}';
}
/**
* Builder for {@link PreFillType}.
*/
public static class Builder {
private final int width;
private final int height;
private Bitmap.Config config;
private int weight = 1;
/**
* Constructor for a builder that uses the given size as the width and height of the Bitmaps to prefill.
* @param size The width and height in pixels of the Bitmaps to prefill.
*/
public Builder(int size) {
this(size, size);
}
/**
* Constructor for a builder that uses the given dimensions as the dimensions of the Bitmaps to prefill.
* @param width The width in pixels of the Bitmaps to prefill.
* @param height The height in pixels of the Bitmaps to prefill.
*/
public Builder(int width, int height) {
if (width <= 0) {
throw new IllegalArgumentException("Width must be > 0");
}
if (height <= 0) {
throw new IllegalArgumentException("Height must be > 0");
}
this.width = width;
this.height = height;
}
/**
* Sets the {@link android.graphics.Bitmap.Config} for the Bitmaps to pre-fill.
* @param config The config to use, or null to use Glide's default.
* @return This builder.
*/
public Builder setConfig(Bitmap.Config config) {
this.config = config;
return this;
}
/**
* Returns the current {@link android.graphics.Bitmap.Config}.
*/
Bitmap.Config getConfig() {
return config;
}
/**
* Sets the weight to use to balance how many Bitmaps of this type are prefilled relative to the other requested
* types.
* @param weight An integer indicating how to balance pre-filling this size and configuration of
* {@link android.graphics.Bitmap} against any other sizes/configurations that may be being pre-filled.
* @return This builder.
*/
public Builder setWeight(int weight) {
if (weight <= 0) {
throw new IllegalArgumentException("Weight must be > 0");
}
this.weight = weight;
return this;
}
/**
* Returns a new {@link PreFillType}.
*/
PreFillType build() {
return new PreFillType(width, height, config, weight);
}
}
}