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