diff --git a/Android/doric/src/main/java/pub/doric/plugin/ModalPlugin.java b/Android/doric/src/main/java/pub/doric/plugin/ModalPlugin.java index 2122f284..f18e86d7 100644 --- a/Android/doric/src/main/java/pub/doric/plugin/ModalPlugin.java +++ b/Android/doric/src/main/java/pub/doric/plugin/ModalPlugin.java @@ -15,10 +15,18 @@ */ package pub.doric.plugin; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.text.TextUtils; import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; import android.widget.Toast; import pub.doric.DoricContext; +import pub.doric.R; import pub.doric.extension.bridge.DoricPlugin; import pub.doric.extension.bridge.DoricMethod; import pub.doric.extension.bridge.DoricPromise; @@ -29,6 +37,7 @@ import com.github.pengfeizhou.jscore.ArchiveException; import com.github.pengfeizhou.jscore.JSDecoder; import com.github.pengfeizhou.jscore.JSObject; import com.github.pengfeizhou.jscore.JSValue; +import com.github.pengfeizhou.jscore.JavaValue; /** * @Description: Doric @@ -68,4 +77,151 @@ public class ModalPlugin extends DoricJavaPlugin { e.printStackTrace(); } } + + @DoricMethod(name = "alert", thread = ThreadMode.UI) + public void alert(JSDecoder decoder, final DoricPromise promise) { + try { + JSObject jsObject = decoder.decode().asObject(); + JSValue titleVal = jsObject.getProperty("title"); + JSValue msgVal = jsObject.getProperty("msg"); + JSValue okBtn = jsObject.getProperty("okLabel"); + + AlertDialog.Builder builder = new AlertDialog.Builder(getDoricContext().getContext(), R.style.Theme_Doric_Modal_Alert); + if (titleVal.isString()) { + builder.setTitle(titleVal.asString().value()); + } + String btnTitle = getDoricContext().getContext().getString(android.R.string.ok); + if (okBtn.isString()) { + btnTitle = okBtn.asString().value(); + } + builder.setMessage(msgVal.asString().value()) + .setPositiveButton(btnTitle, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + promise.resolve(); + } + }); + builder.setCancelable(false); + try { + builder.show(); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (ArchiveException e) { + e.printStackTrace(); + promise.reject(new JavaValue(e.getLocalizedMessage())); + } + } + + + @DoricMethod(name = "confirm", thread = ThreadMode.UI) + public void confirm(JSDecoder decoder, final DoricPromise promise) { + try { + JSObject jsObject = decoder.decode().asObject(); + JSValue titleVal = jsObject.getProperty("title"); + JSValue msgVal = jsObject.getProperty("msg"); + JSValue okBtn = jsObject.getProperty("okLabel"); + JSValue cancelBtn = jsObject.getProperty("cancelLabel"); + + AlertDialog.Builder builder = new AlertDialog.Builder(getDoricContext().getContext(), R.style.Theme_Doric_Modal_Confirm); + if (titleVal.isString()) { + builder.setTitle(titleVal.asString().value()); + } + String okLabel = getDoricContext().getContext().getString(android.R.string.ok); + if (okBtn.isString()) { + okLabel = okBtn.asString().value(); + } + String cancelLabel = getDoricContext().getContext().getString(android.R.string.cancel); + if (cancelBtn.isString()) { + cancelLabel = cancelBtn.asString().value(); + } + builder.setMessage(msgVal.asString().value()) + .setPositiveButton(okLabel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + promise.resolve(); + } + }) + .setNegativeButton(cancelLabel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + promise.reject(); + } + }); + builder.setCancelable(false); + try { + builder.show(); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (ArchiveException e) { + e.printStackTrace(); + promise.reject(new JavaValue(e.getLocalizedMessage())); + } + } + + + @DoricMethod(name = "prompt", thread = ThreadMode.UI) + public void prompt(JSDecoder decoder, final DoricPromise promise) { + try { + JSObject jsObject = decoder.decode().asObject(); + JSValue titleVal = jsObject.getProperty("title"); + JSValue msgVal = jsObject.getProperty("msg"); + JSValue okBtn = jsObject.getProperty("okLabel"); + JSValue cancelBtn = jsObject.getProperty("cancelLabel"); + JSValue defaultVal = jsObject.getProperty("defaultText"); + JSValue text = jsObject.getProperty("text"); + + AlertDialog.Builder builder = new AlertDialog.Builder(getDoricContext().getContext(), R.style.Theme_Doric_Modal_Prompt); + if (titleVal.isString()) { + builder.setTitle(titleVal.asString().value()); + } + String okLabel = getDoricContext().getContext().getString(android.R.string.ok); + if (okBtn.isString()) { + okLabel = okBtn.asString().value(); + } + String cancelLabel = getDoricContext().getContext().getString(android.R.string.cancel); + if (cancelBtn.isString()) { + cancelLabel = cancelBtn.asString().value(); + } + + + View v = LayoutInflater.from(getDoricContext().getContext()).inflate(R.layout.doric_modal_prompt, null); + TextView tvMsg = v.findViewById(R.id.tv_msg); + tvMsg.setText(msgVal.asString().value()); + final EditText editText = v.findViewById(R.id.edit_input); + if (defaultVal.isString()) { + editText.setHint(defaultVal.asString().value()); + } + if (text.isString()) { + editText.setText(text.asString().value()); + editText.setSelection(text.asString().value().length()); + } + builder.setView(v); + builder + .setPositiveButton(okLabel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + promise.resolve(new JavaValue(editText.getText().toString())); + } + }) + .setNegativeButton(cancelLabel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + promise.reject(new JavaValue(editText.getText().toString())); + } + }); + builder.setCancelable(false); + try { + builder.show(); + } catch (Exception e) { + e.printStackTrace(); + } + } catch (ArchiveException e) { + e.printStackTrace(); + promise.reject(new JavaValue(e.getLocalizedMessage())); + } + + + } } diff --git a/Android/doric/src/main/res/layout/doric_modal_prompt.xml b/Android/doric/src/main/res/layout/doric_modal_prompt.xml new file mode 100644 index 00000000..1e0c88f0 --- /dev/null +++ b/Android/doric/src/main/res/layout/doric_modal_prompt.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/Android/doric/src/main/res/values-v21/styles.xml b/Android/doric/src/main/res/values-v21/styles.xml new file mode 100644 index 00000000..5c99d8c1 --- /dev/null +++ b/Android/doric/src/main/res/values-v21/styles.xml @@ -0,0 +1,5 @@ + + + + + +