/*
* This file provided by Facebook is for non-commercial testing and evaluation
* purposes only. Facebook reserves all rights not expressly granted.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.facebook.fresco.sample.instrumentation;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.util.AttributeSet;
import com.facebook.drawee.controller.AbstractDraweeControllerBuilder;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.interfaces.SimpleDraweeControllerBuilder;
import com.facebook.drawee.view.SimpleDraweeView;
import javax.annotation.Nullable;
/**
* {@link SimpleDraweeView} with instrumentation.
*/
public class InstrumentedDraweeView extends SimpleDraweeView implements Instrumented {
private Instrumentation mInstrumentation;
private ControllerListener<Object> mListener;
public InstrumentedDraweeView(Context context, GenericDraweeHierarchy hierarchy) {
super(context, hierarchy);
init();
}
public InstrumentedDraweeView(Context context) {
super(context);
init();
}
public InstrumentedDraweeView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public InstrumentedDraweeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
mInstrumentation = new Instrumentation(this);
mListener = new BaseControllerListener<Object>() {
@Override
public void onSubmit(String id, Object callerContext) {
mInstrumentation.onStart();
}
@Override
public void onFinalImageSet(
String id,
@Nullable Object imageInfo,
@Nullable Animatable animatable) {
mInstrumentation.onSuccess();
}
@Override
public void onFailure(String id, Throwable throwable) {
mInstrumentation.onFailure();
}
@Override
public void onRelease(String id) {
mInstrumentation.onCancellation();
}
};
}
@Override
public void initInstrumentation(String tag, PerfListener perfListener) {
mInstrumentation.init(tag, perfListener);
}
@Override
public void onDraw(final Canvas canvas) {
super.onDraw(canvas);
mInstrumentation.onDraw(canvas);
}
@Override
public void setImageURI(Uri uri, @Nullable Object callerContext) {
SimpleDraweeControllerBuilder controllerBuilder = getControllerBuilder()
.setUri(uri)
.setCallerContext(callerContext)
.setOldController(getController());
if (controllerBuilder instanceof AbstractDraweeControllerBuilder) {
((AbstractDraweeControllerBuilder<?,?,?,?>) controllerBuilder)
.setControllerListener(mListener);
}
setController(controllerBuilder.build());
}
public ControllerListener<Object> getListener() {
return mListener;
}
}