package org.wordpress.android.ui.reader;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import com.justsystems.hpb.pad.R;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.wordpress.android.Constants;
import org.wordpress.android.WordPress;
import org.wordpress.android.WordPressDB;
public class ReaderImplFragment extends ReaderBaseFragment {
/** Called when the activity is first created. */
public WebView wv;
public String topicsID;
private PostSelectedListener onPostSelectedListener;
private LoadDetailListener loadDetailListener;
public TextView topicTV;
public static ReaderImplFragment newInstance() {
ReaderImplFragment f = new ReaderImplFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Make sure WP.com auth cookie is cleared out
CookieSyncManager.createInstance(this.getActivity()
.getApplicationContext());
CookieManager.getInstance().removeAllCookie();
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.reader_wpcom, container, false);
wv = (WebView) v.findViewById(R.id.webView);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.addJavascriptInterface(new JavaScriptInterface(getActivity()
.getApplicationContext()), interfaceNameForJS);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (isAdded()) { // check if the fragment is currently added to its activity
if (url.equalsIgnoreCase(Constants.readerDetailURL)) {
view.stopLoading();
wv.loadUrl("javascript:Reader2.get_loaded_items();");
wv.loadUrl("javascript:Reader2.get_last_selected_item();");
onPostSelectedListener.onPostSelected(url);
} else {
((ReaderActivity) getActivity()).startAnimatingButton();
}
if (url.contains("chrome=no")) {
loadDetailListener.onLoadDetail();
}
}
}
@Override
public void onPageFinished(WebView view, String url) {
if (getActivity() != null && !getActivity().isFinishing())
((ReaderActivity) getActivity()).stopAnimatingButton();
wv.requestLayout();
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (getActivity() != null && !getActivity().isFinishing())
((ReaderActivity) getActivity()).stopAnimatingButton();
super.onReceivedError(view, errorCode, description, failingUrl);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
/*
* if (url.equalsIgnoreCase(Constants.readerDetailURL)) {
* onPostSelectedListener.onPostSelected(url,
* WPCOMReaderImpl.this.cachedDetailPage); return true; }
*/
return false;
}
});
this.setDefaultWebViewSettings(wv);
WebSettings webSettings = wv.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setDomStorageEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCacheMaxSize(1024 * 1024 * 10);
webSettings.setAppCachePath(getActivity().getApplicationContext()
.getCacheDir().getAbsolutePath());
reloadReader();
return v;
}
public void reloadReader() {
new loadReaderTask().execute(null, null, null, null);
}
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
// check that the containing activity implements our callback
onPostSelectedListener = (PostSelectedListener) activity;
loadDetailListener = (LoadDetailListener) activity;
} catch (ClassCastException e) {
activity.finish();
throw new ClassCastException(activity.toString()
+ " must implement Callback");
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onPause() {
super.onPause();
CookieSyncManager.getInstance().stopSync();
if (wv != null) {
wv.stopLoading();
}
}
@Override
public void onResume() {
super.onResume();
CookieSyncManager.getInstance().startSync();
}
public void refreshReader() {
wv.reload();
new Thread(new Runnable() {
public void run() {
// refresh stat
try {
HttpClient httpclient = new DefaultHttpClient();
HttpProtocolParams.setUserAgent(httpclient.getParams(),
"wp-android-native");
String readerURL = Constants.readerURL
+ "/?template=stats&stats_name=home_page_refresh";
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4) {
readerURL += "&per_page=20";
}
httpclient.execute(new HttpGet(readerURL));
} catch (Exception e) {
// oh well
}
}
}).start();
}
private class loadReaderTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
((ReaderActivity) getActivity()).startAnimatingButton();
}
protected void onPostExecute(Void result) {
if (getActivity() != null)
((ReaderActivity) getActivity()).stopAnimatingButton();
// Read the WordPress.com cookies from the wv and pass them to the
// connections below!
CookieManager cookieManager = CookieManager.getInstance();
final String cookie = cookieManager.getCookie("wordpress.com");
new Thread(new Runnable() {
public void run() {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpProtocolParams.setUserAgent(httpclient.getParams(),
"wp-android-native");
String readerURL = Constants.readerURL
+ "/?template=stats&stats_name=home_page";
HttpGet httpGet = new HttpGet(readerURL);
httpGet.setHeader("Cookie", cookie);
httpclient.execute(httpGet);
} catch (Exception e) {
// oh well
e.printStackTrace();
}
}
}).start();
}
@Override
protected Void doInBackground(Void... args) {
if (getActivity() == null
|| !WordPress.hasValidWPComCredentials(getActivity()
.getApplicationContext())) {
return null;
}
SharedPreferences settings = PreferenceManager
.getDefaultSharedPreferences(getActivity()
.getApplicationContext());
String username = settings.getString(
WordPress.WPCOM_USERNAME_PREFERENCE, null);
String password = WordPressDB.decryptPassword(settings.getString(
WordPress.WPCOM_PASSWORD_PREFERENCE, null));
String readerURL = Constants.readerURL_v3;
try {
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4) {
if (readerURL.contains("?"))
readerURL += "&per_page=20";
else
readerURL += "?per_page=20";
}
} catch (Exception e) {
e.printStackTrace();
}
try {
final String responseContent = "<head>"
+ "<script type=\"text/javascript\">"
+ "function submitform(){document.loginform.submit();} </script>"
+ "</head>"
+ "<body onload=\"submitform()\">"
+ "<form style=\"visibility:hidden;\" name=\"loginform\" id=\"loginform\" action=\""
+ Constants.wpcomLoginURL
+ "\" method=\"post\">"
+ "<input type=\"text\" name=\"log\" id=\"user_login\" value=\""
+ username
+ "\"/></label>"
+ "<input type=\"password\" name=\"pwd\" id=\"user_pass\" value=\""
+ password
+ "\" /></label>"
+ "<input type=\"submit\" name=\"wp-submit\" id=\"wp-submit\" value=\"Log In\" />"
+ "<input type=\"hidden\" name=\"redirect_to\" value=\""
+ readerURL + "\" />" + "</form>" + "</body>";
getActivity().runOnUiThread(new Runnable() {
public void run() {
wv.loadData(Uri.encode(responseContent), "text/html",
HTTP.UTF_8);
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
public interface ChangePageListener {
public void onChangePage(int position);
}
public interface PostSelectedListener {
public void onPostSelected(String requestedURL);
}
public interface ShowTopicsListener {
public void showTopics();
}
public interface LoadDetailListener {
public void onLoadDetail();
}
}