Add simple android client.
[odfkit:webodf.git] / android / src / org / webodf / WebODFView.java
1 package org.webodf;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.io.StringWriter;
6
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;
16
17 public class WebODFView extends Activity {
18         WebView mWebView;
19         FileReader filereader;
20
21         public void onCreate(Bundle savedInstanceState) {
22                 super.onCreate(savedInstanceState);
23                 setContentView(R.layout.main);
24                 
25                 filereader = new FileReader(this, getIntent().getData().getPath());
26
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");
36
37                 mWebView.loadUrl("file:///android_asset/odf.html");
38         }
39
40         private class WebODFChromeClient extends WebChromeClient {
41                 @SuppressWarnings("unused")
42                 // used in higher version of api
43                 public void onConsoleMessage(String message, int lineNumber,
44                                 String sourceID) {
45                         log(message + " -- From line " + lineNumber + " of " + sourceID);
46                 }
47         }
48
49         void log(String msg) {
50                 String tag = "WebODF";
51                 Toast.makeText(this, tag + " -- " + msg, Toast.LENGTH_LONG).show();
52                 Log.d(tag, msg);
53         }
54
55         private class WebODFViewClient extends WebViewClient {
56
57                 @Override
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));"
66                                         + "};"
67                                         + "runtime.getFileSize = function(path, callback) {"
68                                         + "    callback(filereader.length());"
69                                         + "};"
70                                         + "window.odfcontainer = new window.odf.OdfContainer('"
71                                         + "        odffile'); refreshOdf();"
72                                         + "})()");
73                 }
74
75                 @Override
76                 public void onReceivedError(WebView view, int errorCode,
77                                 String description, String failingUrl) {
78                         log("Error " + Integer.toString(errorCode) + ": " + description
79                                         + " " + failingUrl);
80                 }
81         }
82
83         @Override
84         public boolean onKeyDown(int keyCode, KeyEvent event) {
85                 if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
86                         mWebView.goBack();
87                         return true;
88                 }
89                 return super.onKeyDown(keyCode, event);
90         }
91
92         public String fileToBase64String(String path) {
93                 StringWriter sw = new StringWriter();
94                 Base64OutputStream base64 = new Base64OutputStream(sw);
95                 try {
96                         FileInputStream i = new FileInputStream(path);
97                         int c;
98                         while ((c = i.read()) != -1) {
99                                 base64.write(c);
100                         }
101                         i.close();
102                         base64.close();
103                         sw.close();
104                 } catch (IOException e) {
105                 }
106                 return sw.toString();
107         }
108 }