From 327f1af0baff917bfe50f0f913dbcfc3a0e0e392 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 23 May 2013 14:27:57 +0400 Subject: populate article fragment in a runnable --- src/org/fox/ttrss/ArticleFragment.java | 452 +++++++++++++++++---------------- 1 file changed, 234 insertions(+), 218 deletions(-) (limited to 'src') 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