diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactCallerContextFactory.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactCallerContextFactory.java index 0964ec1d030..7ccc594b946 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactCallerContextFactory.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactCallerContextFactory.java @@ -7,6 +7,7 @@ package com.facebook.react.views.image; +import androidx.annotation.Nullable; import com.facebook.react.uimanager.ThemedReactContext; /** @@ -21,5 +22,5 @@ public interface ReactCallerContextFactory { * @param reactContext {@link ThemedReactContext} used to create the {@link ReactImageView} * @return an {@link Object} that represents the CallerContext. */ - Object getOrCreateCallerContext(ThemedReactContext reactContext); + Object getOrCreateCallerContext(ThemedReactContext reactContext, @Nullable String analyticTag); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java index fdc7ec2c0e1..c3a689f27c5 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java @@ -107,7 +107,7 @@ public class ReactImageManager extends SimpleViewManager { public ReactImageView createViewInstance(ThemedReactContext context) { Object callerContext = mCallerContextFactory != null - ? mCallerContextFactory.getOrCreateCallerContext(context) + ? mCallerContextFactory.getOrCreateCallerContext(context, null) : getCallerContext(); return new ReactImageView( context, getDraweeControllerBuilder(), mGlobalImageLoadListener, callerContext); @@ -124,6 +124,15 @@ public class ReactImageManager extends SimpleViewManager { view.setBlurRadius(blurRadius); } + @ReactProp(name = "analyticTag") + public void setAnalyticsTag(ReactImageView view, @Nullable String analyticTag) { + if (mCallerContextFactory != null) { + view.updateCallerContext( + mCallerContextFactory.getOrCreateCallerContext( + (ThemedReactContext) view.getContext(), analyticTag)); + } + } + // In JS this is Image.props.defaultSource @ReactProp(name = "defaultSrc") public void setDefaultSource(ReactImageView view, @Nullable String source) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java index ac6ae3fd1f9..515b2c4c419 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java @@ -90,6 +90,11 @@ public class ReactImageView extends GenericDraweeView { private static final Matrix sInverse = new Matrix(); private ImageResizeMethod mResizeMethod = ImageResizeMethod.AUTO; + public void updateCallerContext(@Nullable Object callerContext) { + mCallerContext = callerContext; + mIsDirty = true; + } + private class RoundedCornerPostprocessor extends BasePostprocessor { void getRadii(Bitmap source, float[] computedCornerRadii, float[] mappedRadii) { @@ -197,7 +202,7 @@ public class ReactImageView extends GenericDraweeView { private @Nullable ControllerListener mControllerListener; private @Nullable ControllerListener mControllerForTesting; private @Nullable GlobalImageLoadListener mGlobalImageLoadListener; - private final @Nullable Object mCallerContext; + private @Nullable Object mCallerContext; private int mFadeDurationMs = -1; private boolean mProgressiveRenderingEnabled; private ReadableMap mHeaders;