diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyLegacyViewManager.java b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyLegacyViewManager.java index de2d8e244ed..33d9fbf37a2 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyLegacyViewManager.java +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyLegacyViewManager.java @@ -11,12 +11,14 @@ import android.graphics.Color; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.common.MapBuilder; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.uimanager.SimpleViewManager; import com.facebook.react.uimanager.ThemedReactContext; import com.facebook.react.uimanager.ViewProps; import com.facebook.react.uimanager.annotations.ReactProp; import java.util.Collections; +import java.util.HashMap; import java.util.Map; /** Legacy View manager (non Fabric compatible) for {@link MyNativeView} components. */ @@ -59,4 +61,19 @@ public class MyLegacyViewManager extends SimpleViewManager { public final Map getExportedViewConstants() { return Collections.singletonMap("PI", 3.14); } + + @Override + public final Map getExportedCustomBubblingEventTypeConstants() { + Map eventTypeConstants = new HashMap(); + eventTypeConstants.putAll( + MapBuilder.builder() + .put( + "onColorChanged", + MapBuilder.of( + "phasedRegistrationNames", + MapBuilder.of( + "bubbled", "onColorChanged", "captured", "onColorChangedCapture"))) + .build()); + return eventTypeConstants; + } } diff --git a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyNativeView.java b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyNativeView.java index 1e527cc53a7..5ef03a48a36 100644 --- a/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyNativeView.java +++ b/packages/rn-tester/android/app/src/main/java/com/facebook/react/uiapp/component/MyNativeView.java @@ -8,11 +8,41 @@ package com.facebook.react.uiapp.component; import android.content.Context; +import android.graphics.Color; import android.view.View; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.uimanager.events.RCTEventEmitter; class MyNativeView extends View { + private int currentColor = 0; + public MyNativeView(Context context) { super(context); } + + @Override + public void setBackgroundColor(int color) { + super.setBackgroundColor(color); + if (color != currentColor) { + currentColor = color; + emitNativeEvent(color); + } + } + + private void emitNativeEvent(int color) { + WritableMap event = Arguments.createMap(); + WritableMap backgroundColor = Arguments.createMap(); + float[] hsv = new float[3]; + Color.colorToHSV(color, hsv); + backgroundColor.putDouble("hue", hsv[0]); + backgroundColor.putDouble("saturation", hsv[1]); + backgroundColor.putDouble("brightness", hsv[2]); + backgroundColor.putDouble("alpha", Color.alpha(color)); + event.putMap("backgroundColor", backgroundColor); + ReactContext reactContext = (ReactContext) getContext(); + reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(getId(), "onColorChanged", event); + } }