package your.package; import android.graphics.Bitmap; import android.support.annotation.NonNull; import android.support.v7.graphics.Palette; import android.widget.ImageView; import com.squareup.picasso.Callback; import java.lang.ref.WeakReference; /** * A {@link Callback} that receives {@link Palette} information in its callback. * * @see Callback */ public abstract class PaletteCallback implements Callback { private WeakReference mImageView; public PaletteCallback(@NonNull T imageView) { mImageView = new WeakReference<>(imageView); } protected abstract void onSuccess(Palette palette); @Override public final void onSuccess() { if (getImageView() == null) { return; } final Bitmap bitmap = getBitmap(); // Ew! final Palette palette = PaletteTransformation.getPalette(bitmap); onSuccess(palette); } @Override public void onError() { if (onError != null) { onError.call(); } } protected abstract Bitmap getBitmap(); protected T getImageView() { return mImageView.get(); } }