package com.iwebpp.nodeandroid;
import android.app.Activity;
import android.content.Context;
import android.widget.Toast;
import org.mozilla.javascript.BaseFunction;
import org.mozilla.javascript.Scriptable;
/**
* Created by Jasm Sison on 1/13/15.
*
* [A Toaster singleton pattern](http://www.sirentuan.com) and
* [native global function example](http://stackoverflow.com/questions/13033080/how-are-native-functions-created-in-rhino),
*
* combined together
*
* results in a Singleton global toast/alert function in a Rhino context.
*/
public class Toaster extends BaseFunction {
private static Toaster mInstance = null;
private Context mContext;
private Toast currentToast;
private Toaster(Context context) {
this.mContext = context;
}
public Object call(org.mozilla.javascript.Context cx, Scriptable scope, Scriptable thisObj, final Object[] args) {
Activity activity = (Activity) mContext;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
toast(((org.mozilla.javascript.ConsString) args[0]).toString());
}
});
return null;
}
public int getArity()
{
return 1;
}
public static void init(Context context) {
mInstance = new Toaster(context);
}
public static Toaster getInstance()
{
return mInstance;
}
public static void toast(final String message){
if (mInstance.currentToast != null){
mInstance.currentToast.cancel();
}
mInstance.currentToast = Toast.makeText(mInstance.mContext, message, Toast.LENGTH_SHORT);
mInstance.currentToast.show();
}
}