package org.wikipedia.views;
import android.content.Context;
import android.graphics.PointF;
import android.net.Uri;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import org.wikipedia.WikipediaApp;
public class FaceAndColorDetectImageView extends SimpleDraweeView {
public interface OnImageLoadListener {
void onImageLoaded(int bmpHeight, @Nullable PointF faceLocation, @ColorInt int mainColor);
void onImageFailed();
}
@NonNull private OnImageLoadListener listener = new DefaultListener();
public FaceAndColorDetectImageView(Context context) {
super(context);
}
public FaceAndColorDetectImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FaceAndColorDetectImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void setOnImageLoadListener(@Nullable OnImageLoadListener listener) {
this.listener = listener == null ? new DefaultListener() : listener;
}
public void loadImage(@Nullable Uri uri) {
if (!WikipediaApp.getInstance().isImageDownloadEnabled() || uri == null) {
setImageURI((Uri) null);
return;
}
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setProgressiveRenderingEnabled(true)
.setPostprocessor(new FacePostprocessor(listener))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setAutoPlayAnimations(true)
.build();
setController(controller);
}
private class DefaultListener implements OnImageLoadListener {
@Override
public void onImageLoaded(int bmpHeight, @Nullable final PointF faceLocation, @ColorInt int mainColor) {
post(new Runnable() {
@Override
public void run() {
if (faceLocation != null) {
getHierarchy().setActualImageFocusPoint(faceLocation);
}
}
});
}
@Override
public void onImageFailed() {
}
}
}