diff options
author | Andrew Dolgov <[email protected]> | 2013-05-23 14:27:57 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2013-05-23 14:31:13 +0400 |
commit | 327f1af0baff917bfe50f0f913dbcfc3a0e0e392 (patch) | |
tree | 638c0dc4602da1246afdc6169221d2b55332dbfa /src/org | |
parent | 5554b5c2543feb7bd42d61e39745e8584ac01cc9 (diff) |
populate article fragment in a runnable
Diffstat (limited to 'src/org')
-rw-r--r-- | src/org/fox/ttrss/ArticleFragment.java | 452 |
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> </p><p> </p><p> </p><p> </p></body></html>"; + + try { + web.loadDataWithBaseURL(null, content, "text/html", "utf-8", null); + } catch (RuntimeException e) { e.printStackTrace(); } - } - } - } - - content += "<p> </p><p> </p><p> </p><p> </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; } |