aboutsummaryrefslogtreecommitdiffstats
path: root/main/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/src')
-rw-r--r--main/src/cgeo/geocaching/CacheDetailActivity.java3
-rw-r--r--main/src/cgeo/geocaching/cgeotrackable.java5
-rw-r--r--main/src/cgeo/geocaching/ui/AnchorAwareLinkMovementMethod.java37
3 files changed, 42 insertions, 3 deletions
diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java
index ff01ab3..0eb13c9 100644
--- a/main/src/cgeo/geocaching/CacheDetailActivity.java
+++ b/main/src/cgeo/geocaching/CacheDetailActivity.java
@@ -16,6 +16,7 @@ import cgeo.geocaching.geopoint.GeopointFormatter;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
import cgeo.geocaching.network.Parameters;
+import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.ui.DecryptTextClickListener;
import cgeo.geocaching.ui.EditorDialog;
@@ -2105,7 +2106,7 @@ public class CacheDetailActivity extends AbstractActivity {
if (description != null) {
if (StringUtils.isNotBlank(descriptionString)) {
descriptionView.setText(description, TextView.BufferType.SPANNABLE);
- descriptionView.setMovementMethod(LinkMovementMethod.getInstance());
+ descriptionView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
fixBlackTextColor(descriptionView, descriptionString);
}
diff --git a/main/src/cgeo/geocaching/cgeotrackable.java b/main/src/cgeo/geocaching/cgeotrackable.java
index 93b410a..405581d 100644
--- a/main/src/cgeo/geocaching/cgeotrackable.java
+++ b/main/src/cgeo/geocaching/cgeotrackable.java
@@ -5,6 +5,7 @@ import cgeo.geocaching.connector.gc.GCParser;
import cgeo.geocaching.enumerations.LogType;
import cgeo.geocaching.geopoint.Units;
import cgeo.geocaching.network.HtmlImage;
+import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
import cgeo.geocaching.ui.CacheDetailsCreator;
import cgeo.geocaching.ui.Formatter;
import cgeo.geocaching.utils.BaseUtils;
@@ -176,7 +177,7 @@ public class cgeotrackable extends AbstractActivity {
TextView descView = (TextView) findViewById(R.id.goal);
descView.setVisibility(View.VISIBLE);
descView.setText(Html.fromHtml(trackable.getGoal(), new HtmlImage(geocode, true, 0, false), null), TextView.BufferType.SPANNABLE);
- descView.setMovementMethod(LinkMovementMethod.getInstance());
+ descView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
}
// trackable details
@@ -185,7 +186,7 @@ public class cgeotrackable extends AbstractActivity {
TextView descView = (TextView) findViewById(R.id.details);
descView.setVisibility(View.VISIBLE);
descView.setText(Html.fromHtml(trackable.getDetails(), new HtmlImage(geocode, true, 0, false), new UnknownTagsHandler()), TextView.BufferType.SPANNABLE);
- descView.setMovementMethod(LinkMovementMethod.getInstance());
+ descView.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
}
// trackable image
diff --git a/main/src/cgeo/geocaching/ui/AnchorAwareLinkMovementMethod.java b/main/src/cgeo/geocaching/ui/AnchorAwareLinkMovementMethod.java
new file mode 100644
index 0000000..db82e5c
--- /dev/null
+++ b/main/src/cgeo/geocaching/ui/AnchorAwareLinkMovementMethod.java
@@ -0,0 +1,37 @@
+package cgeo.geocaching.ui;
+
+import android.text.Spannable;
+import android.text.method.LinkMovementMethod;
+import android.view.MotionEvent;
+import android.widget.TextView;
+
+/**
+ * <code>LinkMovementMethod</code> with built-in suppression of errors for links, where the URL cannot be handled
+ * correctly by Android.
+ *
+ */
+public class AnchorAwareLinkMovementMethod extends LinkMovementMethod {
+
+ private AnchorAwareLinkMovementMethod() {
+ // singleton
+ }
+
+ private static final class Holder {
+ // initialization on demand holder
+ private static final AnchorAwareLinkMovementMethod INSTANCE = new AnchorAwareLinkMovementMethod();
+ }
+
+ public static AnchorAwareLinkMovementMethod getInstance() {
+ return Holder.INSTANCE;
+ }
+
+ @Override
+ public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
+ try {
+ return super.onTouchEvent(widget, buffer, event);
+ } catch (Exception e) {
+ // local links to anchors don't work
+ }
+ return false;
+ }
+}