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