diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index bfd2cd653aee..ac428f9ee5e0 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -5561,11 +5561,9 @@ public class com/facebook/react/uimanager/events/BlackHoleEventDispatcher : com/ public fun unregisterEventEmitter (I)V } -public class com/facebook/react/uimanager/events/ContentSizeChangeEvent : com/facebook/react/uimanager/events/Event { - public static final field EVENT_NAME Ljava/lang/String; +public final class com/facebook/react/uimanager/events/ContentSizeChangeEvent : com/facebook/react/uimanager/events/Event { public fun (III)V public fun (IIII)V - protected fun getEventData ()Lcom/facebook/react/bridge/WritableMap; public fun getEventName ()Ljava/lang/String; } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.java deleted file mode 100644 index 3b7ee962a996..000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.runtime.internal.bolts; - -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.bridge.UiThreadUtil; -import java.util.concurrent.Executor; - -/** - * This was created because the helper methods in {@link java.util.concurrent.Executors} do not work - * as people would normally expect. - * - *

Normally, you would think that a cached thread pool would create new threads when necessary, - * queue them when the pool is full, and kill threads when they've been inactive for a certain - * period of time. This is not how {@link java.util.concurrent.Executors#newCachedThreadPool()} - * works. - * - *

Instead, {@link java.util.concurrent.Executors#newCachedThreadPool()} executes all tasks on a - * new or cached thread immediately because corePoolSize is 0, SynchronousQueue is a queue with size - * 0 and maxPoolSize is Integer.MAX_VALUE. This is dangerous because it can create an unchecked - * amount of threads. - */ -@Nullsafe(Nullsafe.Mode.LOCAL) -/* package */ -final class Executors { - public static final Executor UI_THREAD = new UIThreadExecutor(); - - public static final Executor IMMEDIATE = new ImmediateExecutor(); - - private static class UIThreadExecutor implements Executor { - @Override - public void execute(Runnable command) { - // Otherwise, post it on the main thread handler - UiThreadUtil.runOnUiThread(command); - } - } - - /** - * An {@link java.util.concurrent.Executor} that schedules tasks to run asynchronously on the UI - * thread. - */ - private static class ImmediateExecutor implements Executor { - @Override - public void execute(Runnable command) { - command.run(); - } - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.kt new file mode 100644 index 000000000000..d6815157eec6 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Executors.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.runtime.internal.bolts + +import com.facebook.react.bridge.UiThreadUtil +import java.util.concurrent.Executor + +/** + * This was created because the helper methods in [java.util.concurrent.Executors] do not work as + * people would normally expect. + * + * Normally, you would think that a cached thread pool would create new threads when necessary, + * queue them when the pool is full, and kill threads when they've been inactive for a certain + * period of time. This is not how [java.util.concurrent.Executors.newCachedThreadPool] works. + * + * Instead, [java.util.concurrent.Executors.newCachedThreadPool] executes all tasks on a new or + * cached thread immediately because corePoolSize is 0, SynchronousQueue is a queue with size 0 and + * maxPoolSize is Integer.MAX_VALUE. This is dangerous because it can create an unchecked amount of + * threads. + */ +internal object Executors { + @JvmField public val UI_THREAD: Executor = UIThreadExecutor() + @JvmField public val IMMEDIATE: Executor = ImmediateExecutor() + + private class UIThreadExecutor : Executor { + override fun execute(command: Runnable) { + UiThreadUtil.runOnUiThread(command) + } + } + + /** + * An [java.util.concurrent.Executor] that schedules tasks to run asynchronously on the UI thread. + */ + private class ImmediateExecutor : Executor { + override fun execute(command: Runnable) { + command.run() + } + } +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java deleted file mode 100644 index 09870620d04b..000000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.react.uimanager.events; - -import com.facebook.infer.annotation.Nullsafe; -import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.uimanager.PixelUtil; - -/** - * Event dispatched when total width or height of a view's children changes. - * - * @deprecated Please define your own event for custom components - */ -@Nullsafe(Nullsafe.Mode.LOCAL) -@Deprecated -public class ContentSizeChangeEvent extends Event { - - public static final String EVENT_NAME = "topContentSizeChange"; - - private final int mWidth; - private final int mHeight; - - @Deprecated - public ContentSizeChangeEvent(int viewTag, int width, int height) { - this(-1, viewTag, width, height); - } - - public ContentSizeChangeEvent(int surfaceId, int viewTag, int width, int height) { - super(surfaceId, viewTag); - mWidth = width; - mHeight = height; - } - - @Override - public String getEventName() { - return EVENT_NAME; - } - - @Override - protected WritableMap getEventData() { - WritableMap data = Arguments.createMap(); - data.putDouble("width", PixelUtil.toDIPFromPixel(mWidth)); - data.putDouble("height", PixelUtil.toDIPFromPixel(mHeight)); - return data; - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.kt new file mode 100644 index 000000000000..91ec7d2bc6ee --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/ContentSizeChangeEvent.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +@file:Suppress("DEPRECATION") + +package com.facebook.react.uimanager.events + +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.WritableMap +import com.facebook.react.uimanager.PixelUtil.toDIPFromPixel + +/** Event dispatched when total width or height of a view's children changes. */ +@Deprecated("Please define your own event for custom components") +public class ContentSizeChangeEvent( + surfaceId: Int, + viewTag: Int, + private val width: Int, + private val height: Int +) : Event(surfaceId, viewTag) { + @Deprecated( + "Please specify surfaceId explicitly in the constructor.", + ReplaceWith("constructor(surfaceId, viewTag, width, height)")) + public constructor(viewTag: Int, width: Int, height: Int) : this(-1, viewTag, width, height) + + public override fun getEventName(): String = "topContentSizeChange" + + protected override fun getEventData(): WritableMap { + val res = Arguments.createMap() + res.putDouble("width", toDIPFromPixel(width.toFloat()).toDouble()) + res.putDouble("height", toDIPFromPixel(height.toFloat()).toDouble()) + return res + } +}