diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/AlertFragment.java b/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/AlertFragment.java index 04d6d421a97357..98dd9cc0abda20 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/AlertFragment.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/AlertFragment.java @@ -28,6 +28,7 @@ /* package */ static final String ARG_BUTTON_POSITIVE = "button_positive"; /* package */ static final String ARG_BUTTON_NEGATIVE = "button_negative"; /* package */ static final String ARG_BUTTON_NEUTRAL = "button_neutral"; + /* package */ static final String ARG_ITEMS = "items"; private final @Nullable DialogModule.AlertFragmentListener mListener; @@ -39,8 +40,7 @@ public AlertFragment(@Nullable DialogModule.AlertFragmentListener listener, Bund public static Dialog createDialog( Context activityContext, Bundle arguments, DialogInterface.OnClickListener fragment) { AlertDialog.Builder builder = new AlertDialog.Builder(activityContext) - .setTitle(arguments.getString(ARG_TITLE)) - .setMessage(arguments.getString(ARG_MESSAGE)); + .setTitle(arguments.getString(ARG_TITLE)); if (arguments.containsKey(ARG_BUTTON_POSITIVE)) { builder.setPositiveButton(arguments.getString(ARG_BUTTON_POSITIVE), fragment); @@ -51,6 +51,14 @@ public static Dialog createDialog( if (arguments.containsKey(ARG_BUTTON_NEUTRAL)) { builder.setNeutralButton(arguments.getString(ARG_BUTTON_NEUTRAL), fragment); } + // if both message and items are set, Android will only show the message + // and ignore the items argument entirely + if (arguments.containsKey(ARG_MESSAGE)) { + builder.setMessage(arguments.getString(ARG_MESSAGE)); + } + if (arguments.containsKey(ARG_ITEMS)) { + builder.setItems(arguments.getCharSequenceArray(ARG_ITEMS), fragment); + } return builder.create(); } diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java index 10dfbc8d47605b..30bcedb226ac35 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogModule.java @@ -26,6 +26,7 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.common.MapBuilder; @@ -43,6 +44,7 @@ public class DialogModule extends ReactContextBaseJavaModule implements Lifecycl /* package */ static final String KEY_BUTTON_POSITIVE = "buttonPositive"; /* package */ static final String KEY_BUTTON_NEGATIVE = "buttonNegative"; /* package */ static final String KEY_BUTTON_NEUTRAL = "buttonNeutral"; + /* package */ static final String KEY_ITEMS = "items"; /* package */ static final Map CONSTANTS = MapBuilder.of( ACTION_BUTTON_CLICKED, ACTION_BUTTON_CLICKED, @@ -230,6 +232,14 @@ public void showAlert( if (options.hasKey(KEY_BUTTON_NEUTRAL)) { args.putString(AlertFragment.ARG_BUTTON_NEUTRAL, options.getString(KEY_BUTTON_NEUTRAL)); } + if (options.hasKey(KEY_ITEMS)) { + ReadableArray items = options.getArray(KEY_ITEMS); + CharSequence[] itemsArray = new CharSequence[items.size()]; + for (int i = 0; i < items.size(); i ++) { + itemsArray[i] = items.getString(i); + } + args.putCharSequenceArray(AlertFragment.ARG_ITEMS, itemsArray); + } fragmentManagerHelper.showNewAlert(mIsInForeground, args, actionCallback); }