blob: 5e898d92a412b5ac3874b743ab29a20b436afa0a [file] [log] [blame]
package org.wordpress.android.ui.posts;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.webkit.WebView;
import android.widget.TextView;
import org.wordpress.android.R;
import org.wordpress.android.models.Post;
import org.wordpress.android.util.StringUtils;
import org.wordpress.android.util.WPHtml;
public class EditPostPreviewFragment extends Fragment {
// TODO: remove mActivity and rely on getActivity()
private EditPostActivity mActivity;
private WebView mWebView;
private TextView mTextView;
private LoadPostPreviewTask mLoadTask;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mActivity = (EditPostActivity)getActivity();
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.edit_post_preview_fragment, container, false);
mWebView = (WebView) rootView.findViewById(R.id.post_preview_webview);
mTextView = (TextView) rootView.findViewById(R.id.post_preview_textview);
mTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (mActivity != null) {
loadPost();
}
mTextView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
return rootView;
}
@Override
public void onResume() {
super.onResume();
if (mActivity != null && !mTextView.isLayoutRequested()) {
loadPost();
}
}
@Override
public void onPause() {
super.onPause();
if (mLoadTask != null) {
mLoadTask.cancel(true);
mLoadTask = null;
}
}
public void loadPost() {
if (mLoadTask == null) {
mLoadTask = new LoadPostPreviewTask();
mLoadTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
// Load post content in the background
private class LoadPostPreviewTask extends AsyncTask<Void, Void, Spanned> {
@Override
protected Spanned doInBackground(Void... params) {
Spanned contentSpannable;
if (mActivity == null || mActivity.getPost() == null) {
return null;
}
Post post = mActivity.getPost();
String postTitle = "<h1>" + post.getTitle() + "</h1>";
String postContent = postTitle + post.getDescription() + "\n\n" + post.getMoreText();
if (post.isLocalDraft()) {
contentSpannable = WPHtml.fromHtml(
postContent.replaceAll("\uFFFC", ""),
mActivity,
post,
Math.min(mTextView.getWidth(), mTextView.getHeight())
);
} else {
String htmlText = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"webview.css\" /></head><body><div id=\"container\">%s</div></body></html>";
htmlText = String.format(htmlText, StringUtils.addPTags(postContent));
contentSpannable = new SpannableString(htmlText);
}
return contentSpannable;
}
@Override
protected void onPostExecute(Spanned spanned) {
if (mActivity != null && mActivity.getPost() != null && spanned != null) {
if (mActivity.getPost().isLocalDraft()) {
mTextView.setVisibility(View.VISIBLE);
mWebView.setVisibility(View.GONE);
mTextView.setText(spanned);
} else {
mTextView.setVisibility(View.GONE);
mWebView.setVisibility(View.VISIBLE);
mWebView.loadDataWithBaseURL("file:///android_asset/", spanned.toString(),
"text/html", "utf-8", null);
}
}
mLoadTask = null;
}
}
}