Blog


Add Javascript Interface Android Write File

A useful snippet HTML5 hybrid app for Android, using the method addJavascriptInterface to save and write file in external storage:

// write storage permission in your manifest file of Android project

    
    ...


// start code
@SuppressLint({"SetJavaScriptEnabled","JavascriptInterface"})
public class MainActivity extends Activity {
public WebView webView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main); // source activity_main.xml
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
webView.setWebViewClient(new WebViewClient());
// important set Web Chrome Client
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl(url); //local or remote
}
// final class for save and write file in external storage
final class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }
        public void writeToFile(String data, String filename, String tag) {
            try {
                File root = android.os.Environment.getExternalStorageDirectory();
                File dir = new File (root.getAbsolutePath() + "/foldercustom");
                dir.mkdirs();
                File file = new File(dir, filename);
                FileOutputStream f = new FileOutputStream(file);
                PrintWriter pw = new PrintWriter(f);
                pw.println(data);
                pw.flush();
                pw.close();
                f.close();
            }
            catch (IOException e) {
                Log.e(tag, "File write failed: " + e.toString());
            }
        }
    }

}
// Now open html file in www folder













Undoredo pure js

var undoStack = [], 
redoStack = [],
areaeditor,
undoBtn,
redoBtn;
function undoRedoButtonControl() {
    undoBtn.style.color = undoStack.length > 0 ? "black" : "gray";
    redoBtn.style.color = redoStack.length > 0 ? "black" : "gray";
}
function undo_push(a) {
    var b = undoStack.pop();
    undoStack.push(b);
    b !== a && undoStack.push(a);
    undoRedoButtonControl();
}

function redo_push(a) {
    redoStack.push(a);
    undoRedoButtonControl();
}

function undo_pop() {
    if (undoStack.length > 0) {
        redo_push(areaeditor.value);
        areaeditor.value = undoStack.pop();
        undoRedoButtonControl();       
    }
}

function redo_pop() {
    if (redoStack.length > 0) {
        undo_push(areaeditor.value);
        areaeditor.value = redoStack.pop();
        undoRedoButtonControl();        
    }
}
function process_keystrokes() {
    undo_push(areaeditor.value);
    areaeditor.focus();
}

function process_paste() {
    undo_push(areaeditor.value);    
    areaeditor.focus();
}



Google Chart Js Function


function GoogleChart(id, title, tcolor, tsize, type, bwidth, labels, legends, colors, bgfill, width, height, data)
		{
		   var types =
		   {
		      'line'    : 'lc',
		      'vbar'    : 'bvg',
		      'hbar'    : 'bhg',
		      'gometer' : 'gom',
		      'pie'     : 'p',
		      'pie3d'   : 'p3',
		      'venn'    : 'v',
		      'radar'   : 'r'
		   }

		   if (typeof type == undefined) type = 'pie'

		   var t1                     = escape(title)
		   var t2                     = types[type]
		   var tail                   = 'chtt='          + t1
		                              + '&cht='      + t2
		                              + '&chs='      + width  + 'x' + height
		                              + '&chbh='     + bwidth
		                              + '&chxt=x,y'
		                              + '&chd=t:'    + data

		   if (tcolor && tsize) tail += '&chts='     + tcolor + ',' + tsize
		   if (labels)          tail += '&chl='      + labels
		   if (legends)         tail += '&chdl='     + legends
		   if (colors)          tail += '&chco='     + colors
		   if (bgfill)          tail += '&chf=bg,s,' + bgfill

		   Htmlgraft(id, "")
		}
function Htmlgraft(id, value) {
   if (typeof value != undefined);
     document.getElementById(id).innerHTML = value;
   return document.getElementById(id).innerHTML;
}



MathTeX: LaTeX Mathematics

Uno dei principali motivi che hanno incitato Donald Knuth a ideare e poi sviluppare il sistema TeX è stato quello di poter rendere disponibile a tutta la comunità scientifica uno strumento di interpretazione e compilazione capace di poter renderizzare su uno schermo di un computer le formule, le equazioni e le funzioni matematiche avanzate. L’obiettivo di base di questa applicazione è proprio questo: compilare e salvare sul tuo device mobile il codice sorgente del linguaggio TeX con il corrispondente output delle formule matematiche più articolate. MathTeX è anche un’applicazione preziosa per apprendere o approfondire il sistema TeX: all’interno sono disponibili i simboli, le formule matematiche e le equazioni più celebri pronte per l’uso. Con MathTeX è possibile compilare il codice TeX, condividerlo e salvarlo nel formato html e pdf all’interno dell’external storage del tuo device e se lo desideri importare nell’editor dell’applicazione, dal tuo sistema di archiviazione Android, il file con estensione tex impiegando il corrispondente bottone “Open TeX” incluso nell’interfaccia grafica dell’applicazione.
Get it on Google Play




Chess Ulm Pro

Desidero informarti che grazie nuovamente al mio impiego del prodigioso metodo “Javascriptinterface” offerto dalla libreria Android ora è disponibile il download di Chess Ulm Pro che contiene tutte le caratteristiche della versione base di Chess Ulm, ma con la possibilità di poter salvare le tua partita di scacchi in un unico file con estensione pgn (portable game notification) e riprenderla quando lo desideri caricando il medesimo file con due click all’interno di questo straordinario gioco. Se vuoi ricevere maggiori dettagli sulla nuova versione di Chess Ulm Pro clicca sul badge in basso. Buona partita !
Get it on Google Play