diff options
author | Portree-Kid <keith.paterson@gmx.de> | 2013-02-21 20:36:58 +0100 |
---|---|---|
committer | Portree-Kid <keith.paterson@gmx.de> | 2013-02-21 20:36:58 +0100 |
commit | a5a06b260e7cf1e9b07c99e1da90eaf7fc7f6b62 (patch) | |
tree | 12f973b2d619f576519e1708e5660a87f00f6e09 | |
parent | 7bce382fc84b7751a4b463849c91312a2a403796 (diff) | |
download | cgeo-a5a06b260e7cf1e9b07c99e1da90eaf7fc7f6b62.zip cgeo-a5a06b260e7cf1e9b07c99e1da90eaf7fc7f6b62.tar.gz cgeo-a5a06b260e7cf1e9b07c99e1da90eaf7fc7f6b62.tar.bz2 |
Loading of Images outside the ui Thread Fixes #2214
-rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 61 |
1 files changed, 46 insertions, 15 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index f35d599..0cf016d 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -1883,6 +1883,21 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc } + private class HtmlImageCounter implements Html.ImageGetter { + + private int imageCount = 0; + + @Override + public Drawable getDrawable(String url) { + imageCount++; + return null; + } + + public int getImageCount() { + return imageCount; + } + } + /** * Loads the description in background. <br /> * <br /> @@ -1899,20 +1914,6 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc private String descriptionString; private Spanned description; - private class HtmlImageCounter implements Html.ImageGetter { - - private int imageCount = 0; - - @Override - public Drawable getDrawable(String url) { - imageCount++; - return null; - } - - public int getImageCount() { - return imageCount; - } - } @Override protected Void doInBackground(Object... params) { @@ -2086,7 +2087,15 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc String logText = log.log; if (BaseUtils.containsHtml(logText)) { logText = log.getDisplayText(); - holder.text.setText(Html.fromHtml(logText, new HtmlImage(cache.getGeocode(), false, cache.getListId(), false), null), TextView.BufferType.SPANNABLE); + // Fast preview: parse only HTML without loading any images + HtmlImageCounter imageCounter = new HtmlImageCounter(); + final UnknownTagsHandler unknownTagsHandler = new UnknownTagsHandler(); + holder.text.setText(Html.fromHtml(logText, imageCounter, unknownTagsHandler)); + if (imageCounter.getImageCount() > 0) { + // Complete view: parse again with loading images - if necessary ! If there are any images causing problems the user can see at least the preview + LogImageLoader loader = new LogImageLoader(holder); + loader.execute(new String[] { logText }); + } } else { holder.text.setText(logText); @@ -2131,6 +2140,28 @@ public class CacheDetailActivity extends AbstractViewPagerActivity<CacheDetailAc return view; } + /** Loads the Log Images outside the ui thread. */ + + private class LogImageLoader extends AsyncTask<String, Progress, Spanned> + { + private LogViewHolder holder; + + public LogImageLoader(LogViewHolder holder) { + this.holder = holder; + } + + @Override + protected Spanned doInBackground(String... logtext) { + return Html.fromHtml(logtext[0], new HtmlImage(cache.getGeocode(), false, cache.getListId(), false), null); //, TextView.BufferType.SPANNABLE) + } + + @Override + protected void onPostExecute(Spanned result) { + holder.text.setText(result); + } + + } + private class LogViewHolder { final TextView date; final TextView type; |