package org.wordpress.android.ui.reader; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.webkit.HttpAuthHandler; import android.webkit.JavascriptInterface; import android.webkit.WebSettings; import android.webkit.WebSettings.RenderPriority; import android.webkit.WebView; import android.webkit.WebViewClient; import com.actionbarsherlock.app.SherlockFragment; public abstract class ReaderBaseFragment extends SherlockFragment { protected final String interfaceNameForJS = "Android"; protected String httpuser = ""; protected String httppassword = ""; public String topicTitle; private UpdateTopicTitleListener updateTopicTitleListener; private UpdateTopicIDListener updateTopicIDListener; private ChangeTopicListener onChangeTopicListener; private GetLoadedItemsListener getLoadedItemsListener; private UpdateButtonStatusListener updateButtonStatusListener; private GetPermalinkListener getPermalinkListener; private GetLastSelectedItemListener getLastSelectedItemListener; protected void setDefaultWebViewSettings(WebView wv) { WebSettings webSettings = wv.getSettings(); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); webSettings.setBuiltInZoomControls(true); webSettings.setJavaScriptEnabled(true); webSettings.setPluginsEnabled(true); webSettings.setDomStorageEnabled(true); webSettings.setUserAgentString("wp-android-native"); webSettings.setSavePassword(false); webSettings.setRenderPriority(RenderPriority.HIGH); } public void onAttach(Activity activity) { super.onAttach(activity); try { updateTopicTitleListener = (UpdateTopicTitleListener) activity; updateTopicIDListener = (UpdateTopicIDListener) activity; onChangeTopicListener = (ChangeTopicListener) activity; getLoadedItemsListener = (GetLoadedItemsListener) activity; updateButtonStatusListener = (UpdateButtonStatusListener) activity; getPermalinkListener = (GetPermalinkListener) activity; getLastSelectedItemListener = (GetLastSelectedItemListener) activity; } catch (ClassCastException e) { activity.finish(); throw new ClassCastException(activity.toString() + " must implement Callback"); } } protected class WordPressWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { handler.proceed(httpuser, httppassword); } } protected class JavaScriptInterface { Context mContext; /** Instantiate the interface and set the context */ JavaScriptInterface(Context c) { mContext = c; } @JavascriptInterface public void setTopicTitle(String topicTitle) { updateTopicTitleListener.updateTopicTitle(topicTitle); } @JavascriptInterface public void setSelectedTopic(String topicID) { updateTopicIDListener.onUpdateTopicID(topicID); } @JavascriptInterface public void selectTopic(String topicID, String topicName) { onChangeTopicListener.onChangeTopic(topicID, topicName); } @JavascriptInterface public void getLoadedItems(String items) { getLoadedItemsListener.getLoadedItems(items); } @JavascriptInterface public void getArticlePermalink(String permalink) { getPermalinkListener.getPermalink(permalink); } @JavascriptInterface public void getLastSelectedItem(String item) { getLastSelectedItemListener.getLastSelectedItem(item); } @JavascriptInterface public void hasPrev(boolean isPrev) { updateButtonStatusListener.updateButtonStatus(0, isPrev); } @JavascriptInterface public void hasNext(String isNext) { updateButtonStatusListener.updateButtonStatus(1, Boolean.parseBoolean(isNext)); } } public interface UpdateTopicTitleListener { public void updateTopicTitle(String topicTitle); } public interface UpdateTopicIDListener { public void onUpdateTopicID(String topicID); } public interface ChangeTopicListener { public void onChangeTopic(String topicID, String topicName); } public interface GetLoadedItemsListener { public void getLoadedItems(String items); } public interface UpdateButtonStatusListener { public void updateButtonStatus(int button, boolean enabled); } public interface GetPermalinkListener { public void getPermalink(String permalink); } public interface GetLastSelectedItemListener { public void getLastSelectedItem(String lastSelectedItem); } @Override public void onSaveInstanceState(Bundle outState) { if (outState.isEmpty()) { outState.putBoolean("bug_19917_fix", true); } super.onSaveInstanceState(outState); } }