19a293d642c30d91e22e46e1a89e64040476d764fRobert Papppackage com.bumptech.glide.load.resource.drawable;
29a293d642c30d91e22e46e1a89e64040476d764fRobert Papp
39a293d642c30d91e22e46e1a89e64040476d764fRobert Pappimport android.graphics.drawable.Drawable;
49a293d642c30d91e22e46e1a89e64040476d764fRobert Papp
59a293d642c30d91e22e46e1a89e64040476d764fRobert Pappimport com.bumptech.glide.load.engine.Resource;
69a293d642c30d91e22e46e1a89e64040476d764fRobert Papp
79a293d642c30d91e22e46e1a89e64040476d764fRobert Papp/**
89a293d642c30d91e22e46e1a89e64040476d764fRobert Papp * Simple wrapper for an Android {@link Drawable} which returns a
99a293d642c30d91e22e46e1a89e64040476d764fRobert Papp * {@link android.graphics.drawable.Drawable.ConstantState#newDrawable() new drawable}
109a293d642c30d91e22e46e1a89e64040476d764fRobert Papp * based on it's {@link android.graphics.drawable.Drawable.ConstantState state}.
119a293d642c30d91e22e46e1a89e64040476d764fRobert Papp *
129a293d642c30d91e22e46e1a89e64040476d764fRobert Papp * <b>Suggested usages only include {@code T}s where the new drawable is of the same or descendant class.</b>
139a293d642c30d91e22e46e1a89e64040476d764fRobert Papp *
149a293d642c30d91e22e46e1a89e64040476d764fRobert Papp * @param <T> type of the wrapped {@link Drawable}
159a293d642c30d91e22e46e1a89e64040476d764fRobert Papp */
169a293d642c30d91e22e46e1a89e64040476d764fRobert Papppublic abstract class DrawableResource<T extends Drawable> implements Resource<T> {
179a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    protected final T drawable;
189a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    private boolean returnedOriginalDrawable;
199a293d642c30d91e22e46e1a89e64040476d764fRobert Papp
209a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    public DrawableResource(T drawable) {
21f4e84300ed9c3a518f4bda4d29f417202e0e3adfSam Judd        if (drawable == null) {
22f4e84300ed9c3a518f4bda4d29f417202e0e3adfSam Judd            throw new NullPointerException("Drawable must not be null!");
23f4e84300ed9c3a518f4bda4d29f417202e0e3adfSam Judd        }
249a293d642c30d91e22e46e1a89e64040476d764fRobert Papp        this.drawable = drawable;
259a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    }
269a293d642c30d91e22e46e1a89e64040476d764fRobert Papp
279a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    @SuppressWarnings("unchecked")
289a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    // drawables should always return a copy of the same class
299a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    @Override
309a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    public final T get() {
319a293d642c30d91e22e46e1a89e64040476d764fRobert Papp        if (!returnedOriginalDrawable) {
329a293d642c30d91e22e46e1a89e64040476d764fRobert Papp            returnedOriginalDrawable = true;
339a293d642c30d91e22e46e1a89e64040476d764fRobert Papp            return drawable;
349a293d642c30d91e22e46e1a89e64040476d764fRobert Papp        } else {
359a293d642c30d91e22e46e1a89e64040476d764fRobert Papp            return (T) drawable.getConstantState().newDrawable();
369a293d642c30d91e22e46e1a89e64040476d764fRobert Papp        }
379a293d642c30d91e22e46e1a89e64040476d764fRobert Papp    }
389a293d642c30d91e22e46e1a89e64040476d764fRobert Papp}
39