135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Juddpackage com.bumptech.glide.load.engine.prefill; 235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Juddimport android.graphics.Bitmap; 435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd/** 635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * A container for a set of options used to pre-fill a {@link com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool} 735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * with {@link Bitmap Bitmaps} of a single size and configuration. 835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Juddpublic final class PreFillType { 1035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd // Visible for testing. 1135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd static final Bitmap.Config DEFAULT_CONFIG = Bitmap.Config.RGB_565; 1235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final int width; 1335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final int height; 1435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final Bitmap.Config config; 1535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final int weight; 1635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 1735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 1835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Constructor for a single type of {@link android.graphics.Bitmap}. 1935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * 2035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param width The width in pixels of the {@link android.graphics.Bitmap Bitmaps} to 2135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * pre-fill. 2235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param height The height in pixels of the {@link android.graphics.Bitmap Bitmaps} to 2335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * pre-fill. 2435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param config The {@link android.graphics.Bitmap.Config} of the {@link android.graphics.Bitmap Bitmaps} to 2535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * pre-fill. 2635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param weight An integer indicating how to balance pre-filling this size and configuration of 2735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * {@link android.graphics.Bitmap} against any other sizes/configurations that may be being pre-filled. 2835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 2935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd PreFillType(int width, int height, Bitmap.Config config, int weight) { 3035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd if (config == null) { 3135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd throw new NullPointerException("Config must not be null"); 3235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 3335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 3435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.width = width; 3535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.height = height; 3635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.config = config; 3735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.weight = weight; 3835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 3935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 4035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 4135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns the width in pixels of the {@link android.graphics.Bitmap Bitmaps}. 4235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 4335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd int getWidth() { 4435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return width; 4535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 4635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 4735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 4835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns the height in pixels of the {@link android.graphics.Bitmap Bitmaps}. 4935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 5035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd int getHeight() { 5135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return height; 5235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 5335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 5435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 5535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns the {@link android.graphics.Bitmap.Config} of the {@link android.graphics.Bitmap Bitmaps}. 5635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 5735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd Bitmap.Config getConfig() { 5835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return config; 5935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 6035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 6135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 6235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns the weight of the {@link android.graphics.Bitmap Bitmaps} of this type. 6335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 6435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd int getWeight() { 6535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return weight; 6635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 6735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 6835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd @Override 6935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public boolean equals(Object o) { 70f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd if (o instanceof PreFillType) { 71f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd PreFillType other = (PreFillType) o; 72f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd return height == other.height 73f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd && width == other.width 74f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd && weight == other.weight 75f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd && config == other.config; 7635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 77f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd return false; 7835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 7935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 8035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd @Override 8135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public int hashCode() { 8235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd int result = width; 8335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd result = 31 * result + height; 8435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd result = 31 * result + config.hashCode(); 8535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd result = 31 * result + weight; 8635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return result; 8735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 8835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 8935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd @Override 9035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public String toString() { 9135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return "PreFillSize{" 9235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd + "width=" + width 9335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd + ", height=" + height 9435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd + ", config=" + config 9535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd + ", weight=" + weight 9635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd + '}'; 9735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 9835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 9935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 10035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Builder for {@link PreFillType}. 10135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 102f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd public static class Builder { 10335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final int width; 10435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private final int height; 10535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 10635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private Bitmap.Config config; 10735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd private int weight = 1; 10835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 10935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 11035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Constructor for a builder that uses the given size as the width and height of the Bitmaps to prefill. 11135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param size The width and height in pixels of the Bitmaps to prefill. 11235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 11335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public Builder(int size) { 11435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this(size, size); 11535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 11635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 11735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 11835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Constructor for a builder that uses the given dimensions as the dimensions of the Bitmaps to prefill. 11935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param width The width in pixels of the Bitmaps to prefill. 12035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param height The height in pixels of the Bitmaps to prefill. 12135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 12235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public Builder(int width, int height) { 123f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd if (width <= 0) { 124f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd throw new IllegalArgumentException("Width must be > 0"); 125f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd } 126f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd if (height <= 0) { 127f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd throw new IllegalArgumentException("Height must be > 0"); 128f4d511ebf70c55d9224b57e6ff390373c0e2b12eSam Judd } 12935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.width = width; 13035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.height = height; 13135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 13235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 13335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 13435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Sets the {@link android.graphics.Bitmap.Config} for the Bitmaps to pre-fill. 13535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param config The config to use, or null to use Glide's default. 13635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @return This builder. 13735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 13835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public Builder setConfig(Bitmap.Config config) { 13935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.config = config; 14035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return this; 14135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 14235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 14335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 14435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns the current {@link android.graphics.Bitmap.Config}. 14535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 14635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd Bitmap.Config getConfig() { 14735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return config; 14835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 14935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 15035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 15135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Sets the weight to use to balance how many Bitmaps of this type are prefilled relative to the other requested 15235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * types. 15335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @param weight An integer indicating how to balance pre-filling this size and configuration of 15435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * {@link android.graphics.Bitmap} against any other sizes/configurations that may be being pre-filled. 15535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * @return This builder. 15635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 15735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd public Builder setWeight(int weight) { 15835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd if (weight <= 0) { 15935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd throw new IllegalArgumentException("Weight must be > 0"); 16035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 16135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd this.weight = weight; 16235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return this; 16335ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 16435ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd 16535ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd /** 16635ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd * Returns a new {@link PreFillType}. 16735ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd */ 16835ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd PreFillType build() { 16935ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd return new PreFillType(width, height, config, weight); 17035ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 17135ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd } 17235ba01c93ca9ff3ed3b9943571a746c5cb242a24Sam Judd} 173