diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/posts/PostPreviewFragment.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/posts/PostPreviewFragment.java | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostPreviewFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostPreviewFragment.java new file mode 100644 index 000000000..e1afd0cd3 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostPreviewFragment.java @@ -0,0 +1,133 @@ +package org.wordpress.android.ui.posts; + +import android.app.Fragment; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebView; + +import org.wordpress.android.R; +import org.wordpress.android.WordPress; +import org.wordpress.android.models.Post; +import org.wordpress.android.util.StringUtils; +import org.wordpress.android.util.ToastUtils; +import org.wordpress.android.util.WPWebViewClient; + +public class PostPreviewFragment extends Fragment { + + private int mLocalBlogId; + private long mLocalPostId; + private WebView mWebView; + + public static PostPreviewFragment newInstance(int localBlogId, long localPostId) { + Bundle args = new Bundle(); + args.putInt(PostPreviewActivity.ARG_LOCAL_BLOG_ID, localBlogId); + args.putLong(PostPreviewActivity.ARG_LOCAL_POST_ID, localPostId); + PostPreviewFragment fragment = new PostPreviewFragment(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void setArguments(Bundle args) { + super.setArguments(args); + mLocalBlogId = args.getInt(PostPreviewActivity.ARG_LOCAL_BLOG_ID); + mLocalPostId = args.getLong(PostPreviewActivity.ARG_LOCAL_POST_ID); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (savedInstanceState != null) { + mLocalBlogId = savedInstanceState.getInt(PostPreviewActivity.ARG_LOCAL_BLOG_ID); + mLocalPostId = savedInstanceState.getLong(PostPreviewActivity.ARG_LOCAL_POST_ID); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(PostPreviewActivity.ARG_LOCAL_BLOG_ID, mLocalBlogId); + outState.putLong(PostPreviewActivity.ARG_LOCAL_POST_ID, mLocalPostId); + super.onSaveInstanceState(outState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.post_preview_fragment, container, false); + + mWebView = (WebView) view.findViewById(R.id.webView); + WPWebViewClient client = new WPWebViewClient(WordPress.wpDB.instantiateBlogByLocalId(mLocalBlogId)); + mWebView.setWebViewClient(client); + + return view; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + refreshPreview(); + } + + void refreshPreview() { + if (!isAdded()) return; + + new Thread() { + @Override + public void run() { + Post post = WordPress.wpDB.getPostForLocalTablePostId(mLocalPostId); + final String htmlContent = formatPostContentForWebView(getActivity(), post); + + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + if (!isAdded()) return; + + if (htmlContent != null) { + mWebView.loadDataWithBaseURL( + "file:///android_asset/", + htmlContent, + "text/html", + "utf-8", + null); + } else { + ToastUtils.showToast(getActivity(), R.string.post_not_found); + } + } + }); + } + }.start(); + } + + private String formatPostContentForWebView(Context context, Post post) { + if (context == null || post == null) { + return null; + } + + String title = (TextUtils.isEmpty(post.getTitle()) + ? "(" + getResources().getText(R.string.untitled) + ")" + : StringUtils.unescapeHTML(post.getTitle())); + + String postContent = PostUtils.collapseShortcodes(post.getDescription()); + if (!TextUtils.isEmpty(post.getMoreText())) { + postContent += "\n\n" + post.getMoreText(); + } + + // if this is a local draft, remove src="null" from image tags then replace the "android-uri" + // tag added for local image with a valid "src" tag so local images can be viewed + if (post.isLocalDraft()) { + postContent = postContent.replace("src=\"null\"", "").replace("android-uri=", "src="); + } + + return "<!DOCTYPE html><html><head><meta charset='UTF-8' />" + + "<meta name='viewport' content='width=device-width, initial-scale=1'>" + + "<link rel='stylesheet' href='editor.css'>" + + "<link rel='stylesheet' href='editor-android.css'>" + + "</head><body>" + + "<h1>" + title + "</h1>" + + StringUtils.addPTags(postContent) + + "</body></html>"; + } +} |