summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-05-23 14:27:57 +0400
committerAndrew Dolgov <[email protected]>2013-05-23 14:31:13 +0400
commit327f1af0baff917bfe50f0f913dbcfc3a0e0e392 (patch)
tree638c0dc4602da1246afdc6169221d2b55332dbfa /src
parent5554b5c2543feb7bd42d61e39745e8584ac01cc9 (diff)
populate article fragment in a runnable
Diffstat (limited to 'src')
-rw-r--r--src/org/fox/ttrss/ArticleFragment.java452
1 files changed, 234 insertions, 218 deletions
diff --git a/src/org/fox/ttrss/ArticleFragment.java b/src/org/fox/ttrss/ArticleFragment.java
index b45814cb..f6a5e784 100644
--- a/src/org/fox/ttrss/ArticleFragment.java
+++ b/src/org/fox/ttrss/ArticleFragment.java
@@ -20,6 +20,7 @@ import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
+import android.os.Handler;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.text.Html;
@@ -87,247 +88,262 @@ public class ArticleFragment extends Fragment implements GestureDetector.OnDoubl
@SuppressLint("NewApi")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-
m_activity.setProgressBarVisibility(true);
if (savedInstanceState != null) {
m_article = savedInstanceState.getParcelable("article");
}
+
+ final View view = inflater.inflate(R.layout.article_fragment, container, false);
+
+ View content = view.findViewById(R.id.content);
- View view = inflater.inflate(R.layout.article_fragment, container, false);
+ if (content != null) content.setVisibility(View.INVISIBLE);
- if (m_article != null) {
-
- TextView title = (TextView)view.findViewById(R.id.title);
-
- if (title != null) {
-
- String titleStr;
-
- if (m_article.title.length() > 200)
- titleStr = m_article.title.substring(0, 200) + "...";
- else
- titleStr = m_article.title;
-
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ if (isAdded()) {
- title.setText(Html.fromHtml(titleStr));
- //title.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- title.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- URL url = new URL(m_article.link.trim());
- String uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(),
- url.getPort(), url.getPath(), url.getQuery(), url.getRef()).toString();
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
- startActivity(intent);
- } catch (Exception e) {
- e.printStackTrace();
- m_activity.toast(R.string.error_other_error);
+ if (m_article != null) {
+
+ TextView title = (TextView)view.findViewById(R.id.title);
+
+ if (title != null) {
+
+ String titleStr;
+
+ if (m_article.title.length() > 200)
+ titleStr = m_article.title.substring(0, 200) + "...";
+ else
+ titleStr = m_article.title;
+
+
+ title.setText(Html.fromHtml(titleStr));
+ //title.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
+ title.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ URL url = new URL(m_article.link.trim());
+ String uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(),
+ url.getPort(), url.getPath(), url.getQuery(), url.getRef()).toString();
+ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
+ startActivity(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ m_activity.toast(R.string.error_other_error);
+ }
+ }
+ });
+
+ registerForContextMenu(title);
}
- }
- });
-
- registerForContextMenu(title);
- }
-
- TextView comments = (TextView)view.findViewById(R.id.comments);
-
- if (comments != null) {
- if (m_activity.getApiLevel() >= 4 && m_article.comments_count > 0) {
- String commentsTitle = getString(R.string.article_comments, m_article.comments_count);
- comments.setText(commentsTitle);
- //comments.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
- comments.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- URL url = new URL((m_article.comments_link != null && m_article.comments_link.length() > 0) ?
- m_article.comments_link : m_article.link);
- String uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(),
- url.getPort(), url.getPath(), url.getQuery(), url.getRef()).toString();
- Intent intent = new Intent(Intent.ACTION_VIEW,
- Uri.parse(uri));
- startActivity(intent);
- } catch (Exception e) {
- e.printStackTrace();
- m_activity.toast(R.string.error_other_error);
+
+ TextView comments = (TextView)view.findViewById(R.id.comments);
+
+ if (comments != null) {
+ if (m_activity.getApiLevel() >= 4 && m_article.comments_count > 0) {
+ String commentsTitle = getString(R.string.article_comments, m_article.comments_count);
+ comments.setText(commentsTitle);
+ //comments.setPaintFlags(title.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
+ comments.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ URL url = new URL((m_article.comments_link != null && m_article.comments_link.length() > 0) ?
+ m_article.comments_link : m_article.link);
+ String uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(),
+ url.getPort(), url.getPath(), url.getQuery(), url.getRef()).toString();
+ Intent intent = new Intent(Intent.ACTION_VIEW,
+ Uri.parse(uri));
+ startActivity(intent);
+ } catch (Exception e) {
+ e.printStackTrace();
+ m_activity.toast(R.string.error_other_error);
+ }
+ }
+ });
+
+ } else {
+ comments.setVisibility(View.GONE);
}
}
- });
-
- } else {
- comments.setVisibility(View.GONE);
- }
- }
-
- WebView web = (WebView)view.findViewById(R.id.content);
-
- if (web != null) {
- registerForContextMenu(web);
-
- web.setWebChromeClient(new WebChromeClient() {
- @Override
- public void onProgressChanged(WebView view, int progress) {
- m_activity.setProgress(Math.round(((float)progress / 100f) * 10000));
- if (progress == 100) {
- m_activity.setProgressBarVisibility(false);
- }
- }
- });
-
- web.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- return m_detector.onTouchEvent(event);
- }
- });
-
- String content;
- String cssOverride = "";
-
- WebSettings ws = web.getSettings();
- ws.setSupportZoom(true);
- ws.setBuiltInZoomControls(false);
+
+ WebView web = (WebView)view.findViewById(R.id.content);
+
+ if (web != null) {
+ registerForContextMenu(web);
+
+ web.setWebChromeClient(new WebChromeClient() {
+ @Override
+ public void onProgressChanged(WebView view, int progress) {
+ m_activity.setProgress(Math.round(((float)progress / 100f) * 10000));
+ if (progress == 100) {
+ m_activity.setProgressBarVisibility(false);
+ }
+ }
+ });
+
+ web.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return m_detector.onTouchEvent(event);
+ }
+ });
+
+ String content;
+ String cssOverride = "";
+
+ WebSettings ws = web.getSettings();
+ ws.setSupportZoom(true);
+ ws.setBuiltInZoomControls(false);
- web.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
+ web.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
- TypedValue tv = new TypedValue();
- getActivity().getTheme().resolveAttribute(R.attr.linkColor, tv, true);
-
- // prevent flicker in ics
- if (android.os.Build.VERSION.SDK_INT >= 11) {
- web.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
- }
+ TypedValue tv = new TypedValue();
+ getActivity().getTheme().resolveAttribute(R.attr.linkColor, tv, true);
+
+ // prevent flicker in ics
+ if (android.os.Build.VERSION.SDK_INT >= 11) {
+ web.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
+ }
- if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK")) {
- cssOverride = "body { background : transparent; color : #e0e0e0}";
- } else if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK_GRAY")) {
- cssOverride = "body { background : transparent; color : #e0e0e0}";
- } else {
- cssOverride = "body { background : transparent; }";
- }
- web.setBackgroundColor(getResources().getColor(android.R.color.transparent));
-
- String hexColor = String.format("#%06X", (0xFFFFFF & tv.data));
- cssOverride += " a:link {color: "+hexColor+";} a:visited { color: "+hexColor+";}";
+ if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK")) {
+ cssOverride = "body { background : transparent; color : #e0e0e0}";
+ } else if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK_GRAY")) {
+ cssOverride = "body { background : transparent; color : #e0e0e0}";
+ } else {
+ cssOverride = "body { background : transparent; }";
+ }
+ web.setBackgroundColor(getResources().getColor(android.R.color.transparent));
+
+ String hexColor = String.format("#%06X", (0xFFFFFF & tv.data));
+ cssOverride += " a:link {color: "+hexColor+";} a:visited { color: "+hexColor+";}";
- cssOverride += " table { width : 100%; }";
-
- String articleContent = m_article.content != null ? m_article.content : "";
-
- Document doc = Jsoup.parse(articleContent);
-
- if (doc != null) {
- // thanks webview for crashing on <video> tag
- Elements videos = doc.select("video");
-
- for (Element video : videos)
- video.remove();
-
- articleContent = doc.toString();
- }
-
- String align = m_prefs.getBoolean("justify_article_text", true) ? "text-align : justify;" : "";
-
- switch (Integer.parseInt(m_prefs.getString("font_size", "0"))) {
- case 0:
- cssOverride += "body { "+align+" font-size : 14px; } ";
- break;
- case 1:
- cssOverride += "body { "+align+" font-size : 18px; } ";
- break;
- case 2:
- cssOverride += "body { "+align+" font-size : 21px; } ";
- break;
- }
-
- content =
- "<html>" +
- "<head>" +
- "<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\">" +
- "<style type=\"text/css\">" +
- "body { padding : 0px; margin : 0px; }" +
- cssOverride +
- /* "img { max-width : 98%; height : auto; }" + */
- "</style>" +
- "</head>" +
- "<body>" + articleContent;
-
- if (m_article.attachments != null && m_article.attachments.size() != 0) {
- String flatContent = articleContent.replaceAll("[\r\n]", "");
- boolean hasImages = flatContent.matches(".*?<img[^>+].*?");
-
- for (Attachment a : m_article.attachments) {
- if (a.content_type != null && a.content_url != null) {
- try {
- if (a.content_type.indexOf("image") != -1 &&
- (!hasImages || m_article.always_display_attachments)) {
-
- URL url = new URL(a.content_url.trim());
- String strUrl = url.toString().trim();
+ cssOverride += " table { width : 100%; }";
+
+ String articleContent = m_article.content != null ? m_article.content : "";
+
+ Document doc = Jsoup.parse(articleContent);
+
+ if (doc != null) {
+ // thanks webview for crashing on <video> tag
+ Elements videos = doc.select("video");
+
+ for (Element video : videos)
+ video.remove();
+
+ articleContent = doc.toString();
+ }
+
+ String align = m_prefs.getBoolean("justify_article_text", true) ? "text-align : justify;" : "";
+
+ switch (Integer.parseInt(m_prefs.getString("font_size", "0"))) {
+ case 0:
+ cssOverride += "body { "+align+" font-size : 14px; } ";
+ break;
+ case 1:
+ cssOverride += "body { "+align+" font-size : 18px; } ";
+ break;
+ case 2:
+ cssOverride += "body { "+align+" font-size : 21px; } ";
+ break;
+ }
+
+ content =
+ "<html>" +
+ "<head>" +
+ "<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\">" +
+ "<style type=\"text/css\">" +
+ "body { padding : 0px; margin : 0px; }" +
+ cssOverride +
+ /* "img { max-width : 98%; height : auto; }" + */
+ "</style>" +
+ "</head>" +
+ "<body>" + articleContent;
+
+ if (m_article.attachments != null && m_article.attachments.size() != 0) {
+ String flatContent = articleContent.replaceAll("[\r\n]", "");
+ boolean hasImages = flatContent.matches(".*?<img[^>+].*?");
+
+ for (Attachment a : m_article.attachments) {
+ if (a.content_type != null && a.content_url != null) {
+ try {
+ if (a.content_type.indexOf("image") != -1 &&
+ (!hasImages || m_article.always_display_attachments)) {
+
+ URL url = new URL(a.content_url.trim());
+ String strUrl = url.toString().trim();
- content += "<p><img src=\"" + strUrl.replace("\"", "\\\"") + "\"></p>";
- }
+ content += "<p><img src=\"" + strUrl.replace("\"", "\\\"") + "\"></p>";
+ }
- } catch (MalformedURLException e) {
- //
- } catch (Exception e) {
+ } catch (MalformedURLException e) {
+ //
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ content += "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></body></html>";
+
+ try {
+ web.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
+ } catch (RuntimeException e) {
e.printStackTrace();
}
- }
- }
- }
-
- content += "<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p></body></html>";
-
- try {
- web.loadDataWithBaseURL(null, content, "text/html", "utf-8", null);
- } catch (RuntimeException e) {
- e.printStackTrace();
- }
-
- if (m_activity.isSmallScreen())
- web.setOnTouchListener(m_gestureListener);
- }
-
- TextView dv = (TextView)view.findViewById(R.id.date);
-
- if (dv != null) {
- Date d = new Date(m_article.updated * 1000L);
- SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy, HH:mm");
- dv.setText(df.format(d));
- }
-
- TextView tagv = (TextView)view.findViewById(R.id.tags);
+
+ if (m_activity.isSmallScreen())
+ web.setOnTouchListener(m_gestureListener);
+
+ web.setVisibility(View.VISIBLE);
+ }
- if (tagv != null) {
- if (m_article.feed_title != null) {
- tagv.setText(m_article.feed_title);
- } else if (m_article.tags != null) {
- String tagsStr = "";
-
- for (String tag : m_article.tags)
- tagsStr += tag + ", ";
-
- tagsStr = tagsStr.replaceAll(", $", "");
-
- tagv.setText(tagsStr);
- } else {
- tagv.setVisibility(View.GONE);
- }
- }
-
- TextView author = (TextView)view.findViewById(R.id.author);
+ TextView dv = (TextView)view.findViewById(R.id.date);
+
+ if (dv != null) {
+ Date d = new Date(m_article.updated * 1000L);
+ SimpleDateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy, HH:mm");
+ dv.setText(df.format(d));
+ }
+
+ TextView tagv = (TextView)view.findViewById(R.id.tags);
+
+ if (tagv != null) {
+ if (m_article.feed_title != null) {
+ tagv.setText(m_article.feed_title);
+ } else if (m_article.tags != null) {
+ String tagsStr = "";
+
+ for (String tag : m_article.tags)
+ tagsStr += tag + ", ";
+
+ tagsStr = tagsStr.replaceAll(", $", "");
+
+ tagv.setText(tagsStr);
+ } else {
+ tagv.setVisibility(View.GONE);
+ }
+ }
+
+ TextView author = (TextView)view.findViewById(R.id.author);
- if (author != null) {
- if (m_article.author != null && m_article.author.length() > 0) {
- author.setText(m_article.author);
- } else {
- author.setVisibility(View.GONE);
+ if (author != null) {
+ if (m_article.author != null && m_article.author.length() > 0) {
+ author.setText(m_article.author);
+ } else {
+ author.setVisibility(View.GONE);
+ }
+ }
+ }
+
}
}
- }
+ }, 50);
+
return view;
}