aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPortree-Kid <keith.paterson@gmx.de>2013-02-21 20:36:58 +0100
committerPortree-Kid <keith.paterson@gmx.de>2013-02-21 20:36:58 +0100
commita5a06b260e7cf1e9b07c99e1da90eaf7fc7f6b62 (patch)
tree12f973b2d619f576519e1708e5660a87f00f6e09
parent7bce382fc84b7751a4b463849c91312a2a403796 (diff)
downloadcgeo-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.java61
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;