package com.masterofcode.android.EPubBookRender; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.itri.html5webview.HTML5WebView; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import android.app.ActionBar.LayoutParams; import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.webkit.WebView; import android.widget.FrameLayout; public class FullScreenEmbeddedMediaExternalActivity extends Activity { final private String MEDIA_PAGE_HTML_PREFIX = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"+ "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"+ "<head>\n"+ "<title>Media</title>"+ "<style type='text/css'>\n"+ " body { margin: 1px; padding: 1px; align: center; height: 100px; position:relative; }\n"+ "</style>\n"+ "</head>\n"+ "<body><table border='0' width='100%' height='100%' cellpadding='10' cellspacing='20'><tr><td align='center' valign='middle'>\n"; final private String MEDIA_PAGE_HTML_POSTFIX = "</td></tr></table></body></html>"; private HTML5WebView webView; private int contentType; private String externalContent; private String baseURL; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // requestWindowFeature(Window.FEATURE_NO_TITLE); // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); // setContentView(R.layout.fullscreen_embedded_media_external_layout); // webView = (HTML5WebView) findViewById(R.id.fsWebView); webView = new HTML5WebView(this); if (savedInstanceState==null) { Intent intent = this.getIntent(); contentType = intent.getIntExtra(EPubBookRender.FULLSCREEN_CONTENT_TYPE_KEY, EmbeddedMediaElement.MEDIA_TYPE_NONE); externalContent = intent.getStringExtra(EPubBookRender.FULLSCREEN_EXTERNAL_CONTENT_KEY); baseURL = intent.getStringExtra(EPubBookRender.FULLSCREEN_BASE_URL_KEY); } else { contentType = savedInstanceState.getInt(EPubBookRender.FULLSCREEN_CONTENT_TYPE_KEY, EmbeddedMediaElement.MEDIA_TYPE_NONE); externalContent = savedInstanceState.getString(EPubBookRender.FULLSCREEN_EXTERNAL_CONTENT_KEY); baseURL = savedInstanceState.getString(EPubBookRender.FULLSCREEN_BASE_URL_KEY); // webView.restoreState(savedInstanceState); // webView.relayout(); // webView.setVisibility(View.VISIBLE); // setContentView(webView.getLayout()); // webView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } if(contentType == EmbeddedMediaElement.MEDIA_TYPE_NONE) { finish(); } else if(contentType == EmbeddedMediaElement.MEDIA_TYPE_EXTERNAL) { if(externalContent != null) loadExternalContent(); } } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(EPubBookRender.FULLSCREEN_CONTENT_TYPE_KEY, contentType); if (contentType==EmbeddedMediaElement.MEDIA_TYPE_EXTERNAL) { outState.putString(EPubBookRender.FULLSCREEN_EXTERNAL_CONTENT_KEY, externalContent); outState.putString(EPubBookRender.FULLSCREEN_BASE_URL_KEY, baseURL); } // webView.saveState(outState); } @Override public void onStop() { super.onStop(); webView.stopLoading(); callHiddenWebViewMethod("onPause"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if(webView!=null)webView.relayout(); } // these method back to small size if /* @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView.inCustomView()) { webView.hideCustomView(); return true; } } return super.onKeyDown(keyCode, event); } */ @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP) { // check full screen mode if(webView!=null) { if (!webView.inCustomView()) { webView.stopLoading(); FullScreenEmbeddedMediaExternalActivity.this.finish(); } } } return super.onTouchEvent(event); } private void loadExternalContent() { String content = MEDIA_PAGE_HTML_PREFIX + externalContent + MEDIA_PAGE_HTML_POSTFIX; if(externalContent.contains("slideshare.net/slideshow/")) { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { InputStream source = new ByteArrayInputStream(content.getBytes("UTF-8")); builder = dbFactory.newDocumentBuilder(); Document dom = builder.parse(source); NodeList headList = dom.getElementsByTagName("a"); for(int i=0; i<headList.getLength(); i++) { Node node = headList.item(i); if(node!=null) { NamedNodeMap attrs = node.getAttributes(); if(attrs!=null) { Node link = attrs.getNamedItem("href"); if(link!=null) { String linkValue = link.getTextContent(); if(linkValue!=null) { if(linkValue.matches("http://.*slideshare.net/[^/]+/[^\"']+")) { // Log.i("=======", "GO! "+linkValue); webView.setVisibility(View.VISIBLE); setContentView(webView.getLayout()); webView.loadUrl(linkValue); webView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); return; } } } } } } } catch (Exception e) { e.printStackTrace(); } } webView.setVisibility(View.VISIBLE); setContentView(webView.getLayout()); webView.loadDataWithBaseURL(baseURL, content, "text/html", "UTF-8", null); webView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } private void callHiddenWebViewMethod(String name){ if( webView != null ){ try { Method method = WebView.class.getMethod(name); method.invoke(webView); } catch (NoSuchMethodException e) { // Log.error("No such method: " + name, e); } catch (IllegalAccessException e) { // Log.error("Illegal Access: " + name, e); } catch (InvocationTargetException e) { // Log.error("Invocation Target Exception: " + name, e); } } } }