From 72150f57ced3c626bb1c3a48a8609585c9a5a9d7 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Mon, 6 Apr 2020 18:23:43 -0700 Subject: [PATCH] Extend Android ImageViewManager to support analyticsTag prop Summary: This diff extends the Android Image View manager to support the new analyticsTag prop. this prop is going to be used to track performance for images in android changelog: [Android][Added] Add analyticsTag prop into ImageView component Reviewed By: JoshuaGross Differential Revision: D20880602 fbshipit-source-id: e302e8fa83706e6517b228d44a3094a1686830f7 --- .../react/views/image/ReactCallerContextFactory.java | 3 ++- .../facebook/react/views/image/ReactImageManager.java | 11 ++++++++++- .../facebook/react/views/image/ReactImageView.java | 7 ++++++- 3 files changed, 18 insertions(+), 3 deletions(-) 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;