diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index d787e503df2..9bc39f340f7 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -3544,7 +3544,9 @@ public class com/facebook/react/modules/systeminfo/ReactNativeVersion { public fun ()V } -public class com/facebook/react/modules/toast/ToastModule : com/facebook/fbreact/specs/NativeToastAndroidSpec { +public final class com/facebook/react/modules/toast/ToastModule : com/facebook/fbreact/specs/NativeToastAndroidSpec { + public static final field Companion Lcom/facebook/react/modules/toast/ToastModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun getTypedExportedConstants ()Ljava/util/Map; public fun show (Ljava/lang/String;D)V @@ -3552,6 +3554,9 @@ public class com/facebook/react/modules/toast/ToastModule : com/facebook/fbreact public fun showWithGravityAndOffset (Ljava/lang/String;DDDD)V } +public final class com/facebook/react/modules/toast/ToastModule$Companion { +} + public final class com/facebook/react/modules/vibration/VibrationModule : com/facebook/fbreact/specs/NativeVibrationSpec { public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun cancel ()V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java deleted file mode 100644 index 779861273a8..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.java +++ /dev/null @@ -1,98 +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.modules.toast; - -import android.view.Gravity; -import android.widget.Toast; -import com.facebook.fbreact.specs.NativeToastAndroidSpec; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.UiThreadUtil; -import com.facebook.react.common.MapBuilder; -import com.facebook.react.module.annotations.ReactModule; -import java.util.Map; - -/** {@link NativeModule} that allows JS to show an Android Toast. */ -@ReactModule(name = NativeToastAndroidSpec.NAME) -public class ToastModule extends NativeToastAndroidSpec { - - private static final String DURATION_SHORT_KEY = "SHORT"; - private static final String DURATION_LONG_KEY = "LONG"; - - private static final String GRAVITY_TOP_KEY = "TOP"; - private static final String GRAVITY_BOTTOM_KEY = "BOTTOM"; - private static final String GRAVITY_CENTER = "CENTER"; - - public ToastModule(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public Map getTypedExportedConstants() { - final Map constants = MapBuilder.newHashMap(); - constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT); - constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG); - constants.put(GRAVITY_TOP_KEY, Gravity.TOP | Gravity.CENTER_HORIZONTAL); - constants.put(GRAVITY_BOTTOM_KEY, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); - constants.put(GRAVITY_CENTER, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); - return constants; - } - - @Override - public void show(final String message, final double durationDouble) { - final int duration = (int) durationDouble; - - UiThreadUtil.runOnUiThread( - new Runnable() { - @Override - public void run() { - Toast.makeText(getReactApplicationContext(), message, duration).show(); - } - }); - } - - @Override - public void showWithGravity( - final String message, final double durationDouble, final double gravityDouble) { - final int duration = (int) durationDouble; - final int gravity = (int) gravityDouble; - - UiThreadUtil.runOnUiThread( - new Runnable() { - @Override - public void run() { - Toast toast = Toast.makeText(getReactApplicationContext(), message, duration); - toast.setGravity(gravity, 0, 0); - toast.show(); - } - }); - } - - @Override - public void showWithGravityAndOffset( - final String message, - final double durationDouble, - final double gravityDouble, - final double xOffsetDouble, - final double yOffsetDouble) { - final int duration = (int) durationDouble; - final int gravity = (int) gravityDouble; - final int xOffset = (int) xOffsetDouble; - final int yOffset = (int) yOffsetDouble; - - UiThreadUtil.runOnUiThread( - new Runnable() { - @Override - public void run() { - Toast toast = Toast.makeText(getReactApplicationContext(), message, duration); - toast.setGravity(gravity, xOffset, yOffset); - toast.show(); - } - }); - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.kt new file mode 100644 index 00000000000..86f0ee4b303 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/toast/ToastModule.kt @@ -0,0 +1,80 @@ +/* + * 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.modules.toast + +import android.view.Gravity +import android.widget.Toast +import com.facebook.fbreact.specs.NativeToastAndroidSpec +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.UiThreadUtil +import com.facebook.react.module.annotations.ReactModule + +/** [NativeModule] that allows JS to show an Android Toast. */ +@ReactModule(name = NativeToastAndroidSpec.NAME) +public class ToastModule(reactContext: ReactApplicationContext) : + NativeToastAndroidSpec(reactContext) { + + override public fun getTypedExportedConstants(): Map = + mutableMapOf( + DURATION_SHORT_KEY to Toast.LENGTH_SHORT, + DURATION_LONG_KEY to Toast.LENGTH_LONG, + GRAVITY_TOP_KEY to (Gravity.TOP or Gravity.CENTER_HORIZONTAL), + GRAVITY_BOTTOM_KEY to (Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL), + GRAVITY_CENTER to (Gravity.CENTER_HORIZONTAL or Gravity.CENTER_VERTICAL), + ) + + override public fun show(message: String?, durationDouble: Double) { + val duration = durationDouble.toInt() + UiThreadUtil.runOnUiThread( + Runnable { Toast.makeText(getReactApplicationContext(), message, duration).show() }) + } + + override public fun showWithGravity( + message: String?, + durationDouble: Double, + gravityDouble: Double + ) { + val duration = durationDouble.toInt() + val gravity = gravityDouble.toInt() + UiThreadUtil.runOnUiThread( + Runnable { + val toast = Toast.makeText(getReactApplicationContext(), message, duration) + toast.setGravity(gravity, 0, 0) + toast.show() + }) + } + + override public fun showWithGravityAndOffset( + message: String?, + durationDouble: Double, + gravityDouble: Double, + xOffsetDouble: Double, + yOffsetDouble: Double + ) { + val duration = durationDouble.toInt() + val gravity = gravityDouble.toInt() + val xOffset = xOffsetDouble.toInt() + val yOffset = yOffsetDouble.toInt() + UiThreadUtil.runOnUiThread( + Runnable { + val toast = Toast.makeText(getReactApplicationContext(), message, duration) + toast.setGravity(gravity, xOffset, yOffset) + toast.show() + }) + } + + public companion object { + public const val NAME: String = NativeToastAndroidSpec.NAME + private const val DURATION_SHORT_KEY = "SHORT" + private const val DURATION_LONG_KEY = "LONG" + private const val GRAVITY_TOP_KEY = "TOP" + private const val GRAVITY_BOTTOM_KEY = "BOTTOM" + private const val GRAVITY_CENTER = "CENTER" + } +}