3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.StringWriter;
7 import android.app.Activity;
8 import android.os.Bundle;
9 import android.util.Log;
10 import android.view.KeyEvent;
11 import android.webkit.WebChromeClient;
12 import android.webkit.WebSettings;
13 import android.webkit.WebView;
14 import android.webkit.WebViewClient;
15 import android.widget.Toast;
17 public class WebODFView extends Activity {
19 FileReader filereader;
21 public void onCreate(Bundle savedInstanceState) {
22 super.onCreate(savedInstanceState);
23 setContentView(R.layout.main);
25 filereader = new FileReader(this, getIntent().getData().getPath());
27 mWebView = (WebView) findViewById(R.id.webview);
28 mWebView.setNetworkAvailable(false);
29 mWebView.setWebViewClient(new WebODFViewClient());
30 mWebView.setWebChromeClient(new WebODFChromeClient());
31 WebSettings webSettings = mWebView.getSettings();
32 webSettings.setJavaScriptEnabled(true);
33 webSettings.setSupportZoom(true);
34 webSettings.setBuiltInZoomControls(true);
35 mWebView.addJavascriptInterface(filereader, "filereader");
37 mWebView.loadUrl("file:///android_asset/odf.html");
40 private class WebODFChromeClient extends WebChromeClient {
41 @SuppressWarnings("unused")
42 // used in higher version of api
43 public void onConsoleMessage(String message, int lineNumber,
45 log(message + " -- From line " + lineNumber + " of " + sourceID);
49 void log(String msg) {
50 String tag = "WebODF";
51 Toast.makeText(this, tag + " -- " + msg, Toast.LENGTH_LONG).show();
55 private class WebODFViewClient extends WebViewClient {
58 public void onPageFinished(WebView view, String url) {
59 //mWebView.loadUrl("javascript:(function() {alert(counter.getit());})() ");
60 //String data = fileToBase64String(getIntent().getData().getPath());
61 mWebView.loadUrl("javascript:(function() { "
62 // + "var data = window.atob(\"" + data + "\");"
63 + "runtime.read = function(path, offset, length, callback) {"
64 + " var s = filereader.read(offset, length);"
65 + " callback(null, String(s));"
67 + "runtime.getFileSize = function(path, callback) {"
68 + " callback(filereader.length());"
70 + "window.odfcontainer = new window.odf.OdfContainer('"
71 + " odffile'); refreshOdf();"
76 public void onReceivedError(WebView view, int errorCode,
77 String description, String failingUrl) {
78 log("Error " + Integer.toString(errorCode) + ": " + description
84 public boolean onKeyDown(int keyCode, KeyEvent event) {
85 if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
89 return super.onKeyDown(keyCode, event);
92 public String fileToBase64String(String path) {
93 StringWriter sw = new StringWriter();
94 Base64OutputStream base64 = new Base64OutputStream(sw);
96 FileInputStream i = new FileInputStream(path);
98 while ((c = i.read()) != -1) {
104 } catch (IOException e) {
106 return sw.toString();