package nl.xservices.plugins; import android.view.Gravity; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; /* // TODO nice way for the Toast plugin to offer a longer delay than the default short and long options // TODO also look at https://github.com/JohnPersano/Supertoasts new CountDownTimer(6000, 1000) { public void onTick(long millisUntilFinished) {toast.show();} public void onFinish() {toast.show();} }.start(); Also, check https://github.com/JohnPersano/SuperToasts */ public class Toast extends CordovaPlugin { private static final String ACTION_SHOW_EVENT = "show"; private static final String ACTION_HIDE_EVENT = "hide"; private android.widget.Toast mostRecentToast; // note that webView.isPaused() is not Xwalk compatible, so tracking it poor-man style private boolean isPaused; @Override public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException { if (ACTION_HIDE_EVENT.equals(action)) { if (mostRecentToast != null) { mostRecentToast.cancel(); callbackContext.success(); } else { callbackContext.error("No Toast has been shows yet"); } return true; } else if (ACTION_SHOW_EVENT.equals(action)) { if (this.isPaused) { return true; } final JSONObject options = args.getJSONObject(0); final String message = options.getString("message"); final String duration = options.getString("duration"); final String position = options.getString("position"); cordova.getActivity().runOnUiThread(new Runnable() { public void run() { android.widget.Toast toast = android.widget.Toast.makeText( webView.getContext(), message, "short".equals(duration) ? android.widget.Toast.LENGTH_SHORT : android.widget.Toast.LENGTH_LONG); if ("top".equals(position)) { toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 20); } else if ("bottom".equals(position)) { toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 20); } else if ("center".equals(position)) { toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0); } else { callbackContext.error("invalid position. valid options are 'top', 'center' and 'bottom'"); return; } toast.show(); mostRecentToast = toast; callbackContext.success(); } }); return true; } else { callbackContext.error("toast." + action + " is not a supported function. Did you mean '" + ACTION_SHOW_EVENT + "'?"); return false; } } @Override public void onPause(boolean multitasking) { if (mostRecentToast != null) { mostRecentToast.cancel(); } this.isPaused = true; } @Override public void onResume(boolean multitasking) { this.isPaused = false; } }