in vito/litho/src/main/java/com/facebook/fresco/vito/litho/FrescoVitoTapToRetryImageSpec.java [70:127]
static Component onCreateLayout(
final ComponentContext c,
@Prop final ImageSource imageSource,
@Prop(optional = true) final @Nullable ImageSource fallbackImageSource,
@Prop(optional = true) final @Nullable Object callerContext,
@Prop(optional = true, resType = ResType.FLOAT) final float imageAspectRatio,
@Prop(optional = true) final @Nullable EventHandler<ClickEvent> imageClickHandler,
@Prop(optional = true) final @Nullable EventHandler<LongClickEvent> imageLongClickHandler,
@Prop(optional = true) final @Nullable EventHandler<TouchEvent> imageTouchHandler,
@Prop(optional = true) final @Nullable ImageListener imageListener,
@Prop(optional = true) final @Nullable ImageOptions imageOptions,
@Prop(optional = true) final int maxTapCount,
@Prop(optional = true) final OnFadeListener onFadeListener,
@Prop(optional = true) final @Nullable FrescoVitoImage2Spec.Prefetch prefetch,
@Prop(optional = true) final @Nullable RequestListener prefetchRequestListener,
@Prop(resType = ResType.DRAWABLE, optional = true) final @Nullable Drawable retryImage,
@Prop(optional = true) final @Nullable ScalingUtils.ScaleType retryImageScaleType,
@State final boolean isTapToRetry,
@State final boolean useFallbackImageSource,
@State final int tapCount) {
if (isTapToRetry) {
Drawable scaledRetryDrawable =
(retryImageScaleType == null || retryImage == null)
? retryImage
: new ScaleTypeDrawable(retryImage, retryImageScaleType);
return Image.create(c)
.drawable(scaledRetryDrawable)
.scaleType(ImageView.ScaleType.FIT_XY)
.clickHandler(FrescoVitoTapToRetryImage.onRetryClickEvent(c))
.aspectRatio(imageAspectRatio)
.build();
}
final ImageListener internalListener =
new BaseImageListener() {
@Override
public void onFailure(long id, @Nullable Drawable error, @Nullable Throwable throwable) {
if (tapCount < maxTapCount) {
FrescoVitoTapToRetryImage.onImageFailure(c);
}
}
};
boolean useFallback = fallbackImageSource != null && useFallbackImageSource;
return FrescoVitoImage2.create(c)
.callerContext(callerContext)
.imageAspectRatio(imageAspectRatio)
.imageListener(ForwardingImageListener.create(internalListener, imageListener))
.imageOptions(imageOptions)
.imageSource(useFallback ? fallbackImageSource : imageSource)
.onFadeListener(onFadeListener)
.prefetch(prefetch)
.clickHandler(imageClickHandler)
.longClickHandler(imageLongClickHandler)
.touchHandler(imageTouchHandler)
.prefetchRequestListener(prefetchRequestListener)
.build();
}