mirror of
https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git
synced 2026-04-28 00:00:04 +08:00
94 lines
3.0 KiB
Java
94 lines
3.0 KiB
Java
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();
|
|
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;
|
|
}
|
|
} |