From 5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= <dominik@dominikschuermann.de>
Date: Mon, 9 Sep 2013 13:16:54 +0200
Subject: Switch from HtmlSpanner to HtmlTextView

---
 .../htmltextview/HtmlTextView.java                 | 83 ++++++++++++++++++++++
 1 file changed, 83 insertions(+)
 create mode 100644 libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java

(limited to 'libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java')

diff --git a/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java
new file mode 100644
index 000000000..317c25aaf
--- /dev/null
+++ b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.sufficientlysecure.htmltextview;
+
+import android.content.Context;
+import android.text.Html;
+import android.text.method.LinkMovementMethod;
+import android.util.AttributeSet;
+
+import java.io.InputStream;
+
+public class HtmlTextView extends JellyBeanSpanFixTextView {
+
+    public static final String TAG = "HtmlTextView";
+
+    public HtmlTextView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public HtmlTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public HtmlTextView(Context context) {
+        super(context);
+    }
+
+    /**
+     * http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string
+     *
+     * @param is
+     * @return
+     */
+    static private String convertStreamToString(java.io.InputStream is) {
+        java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
+        return s.hasNext() ? s.next() : "";
+    }
+
+    /**
+     * Loads HTML from a raw resource, i.e., a HTML file in res/raw/.
+     * This allows translatable resource (e.g., res/raw-de/ for german).
+     * The containing HTML is parsed to Android's Spannable format and then displayed.
+     *
+     * @param context
+     * @param id      for example: R.raw.help
+     */
+    public void setHtmlFromRawResource(Context context, int id) {
+        // load html from html file from /res/raw
+        InputStream inputStreamText = context.getResources().openRawResource(id);
+
+        setHtmlFromString(convertStreamToString(inputStreamText));
+    }
+
+    /**
+     * Parses String containing HTML to Android's Spannable format and displays it in this TextView.
+     *
+     * @param html String containing HTML, for example: "<b>Hello world!</b>"
+     */
+    public void setHtmlFromString(String html) {
+        // this uses Android's Html class for basic parsing, and HtmlTagHandler
+        setText(Html.fromHtml(html, new UrlImageGetter(this, getContext()), new HtmlTagHandler()));
+
+        // make links work
+        setMovementMethod(LinkMovementMethod.getInstance());
+
+        // no flickering when clicking textview for Android < 4
+//        text.setTextColor(getResources().getColor(android.R.color.secondary_text_dark_nodisable));
+    }
+}
-- 
cgit v1.2.3