From 5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Sep 2013 13:16:54 +0200 Subject: [PATCH] Switch from HtmlSpanner to HtmlTextView --- OpenPGP-Keychain/libs/htmlcleaner-2.2.jar | Bin 107942 -> 0 bytes .../libs/htmlspanner-0.2-fork.jar | Bin 31039 -> 0 bytes OpenPGP-Keychain/project.properties | 1 + .../res/layout/help_fragment_about.xml | 2 +- .../res/layout/share_nfc_beam.xml | 2 +- OpenPGP-Keychain/res/raw/help_about.html | 2 +- .../keychain/ui/HelpFragmentAbout.java | 30 +-- .../keychain/ui/HelpFragmentHtml.java | 34 +-- .../keychain/ui/ShareNfcBeamActivity.java | 29 +-- libraries/HtmlTextView/.gitignore | 30 +++ libraries/HtmlTextView/AndroidManifest.xml | 13 ++ libraries/HtmlTextView/LICENSE | 202 +++++++++++++++++ libraries/HtmlTextView/README.md | 45 ++++ libraries/HtmlTextView/build.gradle | 24 ++ libraries/HtmlTextView/project.properties | 15 ++ .../htmltextview/HtmlTagHandler.java | 92 ++++++++ .../htmltextview/HtmlTextView.java | 83 +++++++ .../JellyBeanSpanFixTextView.java | 212 ++++++++++++++++++ .../htmltextview/UrlImageGetter.java | 128 +++++++++++ 19 files changed, 864 insertions(+), 80 deletions(-) delete mode 100644 OpenPGP-Keychain/libs/htmlcleaner-2.2.jar delete mode 100644 OpenPGP-Keychain/libs/htmlspanner-0.2-fork.jar create mode 100644 libraries/HtmlTextView/.gitignore create mode 100644 libraries/HtmlTextView/AndroidManifest.xml create mode 100644 libraries/HtmlTextView/LICENSE create mode 100644 libraries/HtmlTextView/README.md create mode 100644 libraries/HtmlTextView/build.gradle create mode 100644 libraries/HtmlTextView/project.properties create mode 100644 libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTagHandler.java create mode 100644 libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTextView.java create mode 100644 libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/JellyBeanSpanFixTextView.java create mode 100644 libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java diff --git a/OpenPGP-Keychain/libs/htmlcleaner-2.2.jar b/OpenPGP-Keychain/libs/htmlcleaner-2.2.jar deleted file mode 100644 index cc922d06b8272fc9f64da3495bfc3b7904a9e51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107942 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%0Dv_oPK_qm2CTTqI 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 G?f(HL!r~kN diff --git a/OpenPGP-Keychain/project.properties b/OpenPGP-Keychain/project.properties index cfb577df7..2ad34628b 100644 --- a/OpenPGP-Keychain/project.properties +++ b/OpenPGP-Keychain/project.properties @@ -10,3 +10,4 @@ # Project target. target=android-17 android.library.reference.1=../libraries/ActionBarSherlock +android.library.reference.2=../libraries/HtmlTextView diff --git a/OpenPGP-Keychain/res/layout/help_fragment_about.xml b/OpenPGP-Keychain/res/layout/help_fragment_about.xml index 82cb0a89f..71788e720 100644 --- a/OpenPGP-Keychain/res/layout/help_fragment_about.xml +++ b/OpenPGP-Keychain/res/layout/help_fragment_about.xml @@ -51,7 +51,7 @@ - -
  • ActionBarSherlock (Apache License v2)
  • ZXing QRCode Integration (Apache License v2)
  • SpongyCastle (MIT X11 License)
  • -
  • HtmlSpanner Fork (Apache License v2)
  • +
  • HtmlTextView (Apache License v2)
  • Icons from RRZE Icon Set (Creative Commons Attribution Share-Alike licence 3.0)
  • Icons from Tango Icon Set (Public Domain)
  • diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentAbout.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentAbout.java index a2d2290dc..e7a977707 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentAbout.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentAbout.java @@ -17,22 +17,15 @@ package org.sufficientlysecure.keychain.ui; -import java.io.IOException; -import java.io.InputStream; - -import net.nightwhistler.htmlspanner.HtmlSpanner; -import net.nightwhistler.htmlspanner.JellyBeanSpanFixTextView; - +import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.helper.OtherHelper; -import org.sufficientlysecure.keychain.util.Log; import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.util.Log; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Bundle; -import android.text.method.LinkMovementMethod; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -57,26 +50,13 @@ public class HelpFragmentAbout extends SherlockFragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.help_fragment_about, container, false); - // load html from html file from /res/raw - InputStream inputStreamText = getResources().openRawResource(R.raw.help_about); - TextView versionText = (TextView) view.findViewById(R.id.help_about_version); versionText.setText(getString(R.string.help_about_version) + " " + getVersion()); - JellyBeanSpanFixTextView aboutTextView = (JellyBeanSpanFixTextView) view - .findViewById(R.id.help_about_text); + HtmlTextView aboutTextView = (HtmlTextView) view.findViewById(R.id.help_about_text); - // load html into textview - HtmlSpanner htmlSpanner = new HtmlSpanner(); - htmlSpanner.setStripExtraWhiteSpace(true); - try { - aboutTextView.setText(htmlSpanner.fromHtml(inputStreamText)); - } catch (IOException e) { - Log.e(Constants.TAG, "Error while reading raw resources as stream", e); - } - - // make links work - aboutTextView.setMovementMethod(LinkMovementMethod.getInstance()); + // load html from raw resource (Parsing handled by HtmlTextView library) + aboutTextView.setHtmlFromRawResource(getActivity(), R.raw.help_about); // no flickering when clicking textview for Android < 4 aboutTextView.setTextColor(getResources().getColor(android.R.color.black)); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentHtml.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentHtml.java index c4bab5734..ce932fd70 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentHtml.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/HelpFragmentHtml.java @@ -17,20 +17,10 @@ package org.sufficientlysecure.keychain.ui; -import java.io.IOException; -import java.io.InputStream; - -import net.nightwhistler.htmlspanner.HtmlSpanner; -import net.nightwhistler.htmlspanner.JellyBeanSpanFixTextView; - -import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.helper.OtherHelper; -import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.htmltextview.HtmlTextView; import android.app.Activity; import android.os.Bundle; -import android.text.method.LinkMovementMethod; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; @@ -73,15 +63,12 @@ public class HelpFragmentHtml extends SherlockFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + mActivity = getActivity(); + htmlFile = getArguments().getInt(ARG_HTML_FILE); - // load html from html file from /res/raw - InputStream inputStreamText = getResources().openRawResource(htmlFile); - - mActivity = getActivity(); - ScrollView scroller = new ScrollView(mActivity); - JellyBeanSpanFixTextView text = new JellyBeanSpanFixTextView(mActivity); + HtmlTextView text = new HtmlTextView(mActivity); // padding int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, mActivity @@ -90,17 +77,8 @@ public class HelpFragmentHtml extends SherlockFragment { scroller.addView(text); - // load html into textview - HtmlSpanner htmlSpanner = new HtmlSpanner(); - htmlSpanner.setStripExtraWhiteSpace(true); - try { - text.setText(htmlSpanner.fromHtml(inputStreamText)); - } catch (IOException e) { - Log.e(Constants.TAG, "Error while reading raw resources as stream", e); - } - - // make links work - text.setMovementMethod(LinkMovementMethod.getInstance()); + // load html from raw resource (Parsing handled by HtmlTextView library) + text.setHtmlFromRawResource(getActivity(), htmlFile); // no flickering when clicking textview for Android < 4 text.setTextColor(getResources().getColor(android.R.color.black)); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java index 10adcc4ab..474e0a9e4 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java @@ -17,12 +17,7 @@ package org.sufficientlysecure.keychain.ui; -import java.io.IOException; -import java.io.InputStream; - -import net.nightwhistler.htmlspanner.HtmlSpanner; -import net.nightwhistler.htmlspanner.JellyBeanSpanFixTextView; - +import org.sufficientlysecure.htmltextview.HtmlTextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.helper.ActionBarHelper; @@ -42,8 +37,6 @@ import android.os.Handler; import android.os.Message; import android.os.Parcelable; import android.provider.Settings; -import android.text.method.LinkMovementMethod; -import android.util.Log; import android.widget.Toast; import com.actionbarsherlock.app.SherlockFragmentActivity; @@ -131,27 +124,15 @@ public class ShareNfcBeamActivity extends SherlockFragmentActivity implements } private void buildView() { - // load html from html file from /res/raw - InputStream inputStreamText = getResources().openRawResource(R.raw.nfc_beam_share); - setContentView(R.layout.share_nfc_beam); - JellyBeanSpanFixTextView text = (JellyBeanSpanFixTextView) findViewById(R.id.nfc_beam_text); + HtmlTextView aboutTextView = (HtmlTextView) findViewById(R.id.nfc_beam_text); - // load html into textview - HtmlSpanner htmlSpanner = new HtmlSpanner(); - htmlSpanner.setStripExtraWhiteSpace(true); - try { - text.setText(htmlSpanner.fromHtml(inputStreamText)); - } catch (IOException e) { - Log.e(Constants.TAG, "Error while reading raw resources as stream", e); - } - - // make links work - text.setMovementMethod(LinkMovementMethod.getInstance()); + // load html from raw resource (Parsing handled by HtmlTextView library) + aboutTextView.setHtmlFromRawResource(this, R.raw.nfc_beam_share); // no flickering when clicking textview for Android < 4 - text.setTextColor(getResources().getColor(android.R.color.black)); + aboutTextView.setTextColor(getResources().getColor(android.R.color.black)); // set actionbar without home button if called from another app ActionBarHelper.setBackButton(this); diff --git a/libraries/HtmlTextView/.gitignore b/libraries/HtmlTextView/.gitignore new file mode 100644 index 000000000..71c11b159 --- /dev/null +++ b/libraries/HtmlTextView/.gitignore @@ -0,0 +1,30 @@ +#Android specific +bin +gen +obj +libs/armeabi +lint.xml +local.properties +release.properties +ant.properties +*.class +*.apk + +#Gradle +.gradle +build +gradle.properties + +#Maven +target +pom.xml.* + +#Eclipse +.project +.classpath +.settings +.metadata + +#IntelliJ IDEA +.idea +*.iml diff --git a/libraries/HtmlTextView/AndroidManifest.xml b/libraries/HtmlTextView/AndroidManifest.xml new file mode 100644 index 000000000..1c747c1b8 --- /dev/null +++ b/libraries/HtmlTextView/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/libraries/HtmlTextView/LICENSE b/libraries/HtmlTextView/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/libraries/HtmlTextView/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/libraries/HtmlTextView/README.md b/libraries/HtmlTextView/README.md new file mode 100644 index 000000000..05714f79c --- /dev/null +++ b/libraries/HtmlTextView/README.md @@ -0,0 +1,45 @@ +# HtmlTextView for Android + +This HtmlTextView supports all HTML tags supported by Android's Html class (see [The CommonsBlog](http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html) and [history of Html class](https://github.com/android/platform_frameworks_base/commits/master/core/java/android/text/Html.java) for newer additions). +Additionally, list tags are supported (``
      ``, ``
        ``, ``
        ``) and code tags with ````. + +This also includes a workaround to prevent TextView crashing on [specific Android versions](http://code.google.com/p/android/issues/detail?id=35466). + +This library is kept very tiny with no external dependencies. +I am using it to provide Help/About Activities in my apps. + +## Example + +``` +HtmlTextView text = new HtmlTextView(this); + +// loads html from string +text.setHtmlFromString("Hello
        • world
        • cats
        "); +``` +or +``` +HtmlTextView text = new HtmlTextView(this); + +// loads html from raw resource, i.e., a html file in res/raw/, this allows translatable resource (e.g., res/raw-de/ for german) +text.setHtmlFromRawResource(this, R.raw.help); +``` + +## Use library as Gradle dependency (Android library project) + +1. Copy this folder to your project and include it in ``settings.gradle`` with ``include ':html-textview'`` +2. Add dependency ``compile project(':html-textview')`` to your project's ``build.gradle``. + +## License + +Apache License v2 + +## Authors +- This library was hacked together by Dominik Schürmann +- Original [TagHandler](https://gist.github.com/mlakkadshaw/5983704) developed by [Mohammed Lakkadshaw](http://blog.mohammedlakkadshaw.com/) +- Original [UrlImageGetter](https://gist.github.com/Antarix/4167655) developed by Antarix Tandon +- [JellyBeanSpanFixTextView](https://gist.github.com/pyricau/3424004) (with fix from comment) developed by Pierre-Yves Ricau + +## Contributions + +Feel free to fork and do pull requests. I am more than happy to merge them. +Please do not introduce external dependencies. \ No newline at end of file diff --git a/libraries/HtmlTextView/build.gradle b/libraries/HtmlTextView/build.gradle new file mode 100644 index 000000000..40a586dab --- /dev/null +++ b/libraries/HtmlTextView/build.gradle @@ -0,0 +1,24 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.+' + } +} + +apply plugin: 'android-library' + + +android { + compileSdkVersion 17 + buildToolsVersion '17' + + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = ['src'] + res.srcDirs = ['res'] + } + } +} diff --git a/libraries/HtmlTextView/project.properties b/libraries/HtmlTextView/project.properties new file mode 100644 index 000000000..5ca3505c8 --- /dev/null +++ b/libraries/HtmlTextView/project.properties @@ -0,0 +1,15 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-7 +android.library=true diff --git a/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTagHandler.java b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTagHandler.java new file mode 100644 index 000000000..c40c8dec3 --- /dev/null +++ b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/HtmlTagHandler.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2013 Mohammed Lakkadshaw + * + * 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 java.util.Vector; + +import org.xml.sax.XMLReader; + +import android.text.Editable; +import android.text.Html; +import android.text.Spannable; +import android.text.style.BulletSpan; +import android.text.style.LeadingMarginSpan; +import android.text.style.TypefaceSpan; +import android.util.Log; + +public class HtmlTagHandler implements Html.TagHandler { + private int mListItemCount = 0; + private Vector mListParents = new Vector(); + + @Override + public void handleTag(final boolean opening, final String tag, Editable output, final XMLReader xmlReader) { + + if (tag.equals("ul") || tag.equals("ol") || tag.equals("dd")) { + if (opening) { + mListParents.add(tag); + } else mListParents.remove(tag); + + mListItemCount = 0; + } else if (tag.equals("li") && !opening) { + handleListTag(output); + } else if (tag.equalsIgnoreCase("code")) { + if (opening) { + output.setSpan(new TypefaceSpan("monospace"), output.length(), output.length(), Spannable.SPAN_MARK_MARK); + } else { + Log.d(HtmlTextView.TAG, "Code tag encountered"); + Object obj = getLast(output, TypefaceSpan.class); + int where = output.getSpanStart(obj); + output.setSpan(new TypefaceSpan("monospace"), where, output.length(), 0); + } + } + } + + private Object getLast(Editable text, Class kind) { + Object[] objs = text.getSpans(0, text.length(), kind); + if (objs.length == 0) { + return null; + } else { + for (int i = objs.length; i > 0; i--) { + if (text.getSpanFlags(objs[i - 1]) == Spannable.SPAN_MARK_MARK) { + return objs[i - 1]; + } + } + return null; + } + } + + private void handleListTag(Editable output) { + if (mListParents.lastElement().equals("ul")) { + output.append("\n"); + String[] split = output.toString().split("\n"); + + int lastIndex = split.length - 1; + int start = output.length() - split[lastIndex].length() - 1; + output.setSpan(new BulletSpan(15 * mListParents.size()), start, output.length(), 0); + } else if (mListParents.lastElement().equals("ol")) { + mListItemCount++; + + output.append("\n"); + String[] split = output.toString().split("\n"); + + int lastIndex = split.length - 1; + int start = output.length() - split[lastIndex].length() - 1; + output.insert(start, mListItemCount + ". "); + output.setSpan(new LeadingMarginSpan.Standard(15 * mListParents.size()), start, output.length(), 0); + } + } +} 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 + * + * 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: "Hello world!" + */ + 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)); + } +} diff --git a/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/JellyBeanSpanFixTextView.java b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/JellyBeanSpanFixTextView.java new file mode 100644 index 000000000..94bf45849 --- /dev/null +++ b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/JellyBeanSpanFixTextView.java @@ -0,0 +1,212 @@ +/* + * Copyright (C) 2013 Dominik Schürmann + * Copyright (C) 2012 Pierre-Yves Ricau + * + * 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 java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.util.AttributeSet; +import android.util.Log; +import android.widget.TextView; + +/** + *

        + * A {@link android.widget.TextView} that insert spaces around its text spans where needed to prevent + * {@link IndexOutOfBoundsException} in {@link #onMeasure(int, int)} on Jelly Bean. + *

        + * When {@link #onMeasure(int, int)} throws an exception, we try to fix the text by adding spaces + * around spans, until it works again. We then try removing some of the added spans, to minimize the + * insertions. + *

        + * The fix is time consuming (a few ms, it depends on the size of your text), but it should only + * happen once per text change. + *

        + * See http://code.google.com/p/android/issues/detail?id=35466 + * + */ +public class JellyBeanSpanFixTextView extends TextView { + + private static class FixingResult { + public final boolean fixed; + public final List spansWithSpacesBefore; + public final List spansWithSpacesAfter; + + public static FixingResult fixed(List spansWithSpacesBefore, + List spansWithSpacesAfter) { + return new FixingResult(true, spansWithSpacesBefore, spansWithSpacesAfter); + } + + public static FixingResult notFixed() { + return new FixingResult(false, null, null); + } + + private FixingResult(boolean fixed, List spansWithSpacesBefore, + List spansWithSpacesAfter) { + this.fixed = fixed; + this.spansWithSpacesBefore = spansWithSpacesBefore; + this.spansWithSpacesAfter = spansWithSpacesAfter; + } + } + + public JellyBeanSpanFixTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public JellyBeanSpanFixTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public JellyBeanSpanFixTextView(Context context) { + super(context); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + try { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } catch (IndexOutOfBoundsException e) { + fixOnMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + /** + * If possible, fixes the Spanned text by adding spaces around spans when needed. + */ + private void fixOnMeasure(int widthMeasureSpec, int heightMeasureSpec) { + CharSequence text = getText(); + if (text instanceof Spanned) { + SpannableStringBuilder builder = new SpannableStringBuilder(text); + fixSpannedWithSpaces(builder, widthMeasureSpec, heightMeasureSpec); + } else { + if (BuildConfig.DEBUG) { + Log.d(HtmlTextView.TAG, "The text isn't a Spanned"); + } + fallbackToString(widthMeasureSpec, heightMeasureSpec); + } + } + + /** + * Add spaces around spans until the text is fixed, and then removes the unneeded spaces + */ + private void fixSpannedWithSpaces(SpannableStringBuilder builder, int widthMeasureSpec, + int heightMeasureSpec) { + long startFix = System.currentTimeMillis(); + + FixingResult result = addSpacesAroundSpansUntilFixed(builder, widthMeasureSpec, + heightMeasureSpec); + + if (result.fixed) { + removeUnneededSpaces(widthMeasureSpec, heightMeasureSpec, builder, result); + } else { + fallbackToString(widthMeasureSpec, heightMeasureSpec); + } + + if (BuildConfig.DEBUG) { + long fixDuration = System.currentTimeMillis() - startFix; + Log.d(HtmlTextView.TAG, "fixSpannedWithSpaces() duration in ms: " + fixDuration); + } + } + + private FixingResult addSpacesAroundSpansUntilFixed(SpannableStringBuilder builder, + int widthMeasureSpec, int heightMeasureSpec) { + + Object[] spans = builder.getSpans(0, builder.length(), Object.class); + List spansWithSpacesBefore = new ArrayList(spans.length); + List spansWithSpacesAfter = new ArrayList(spans.length); + + for (Object span : spans) { + int spanStart = builder.getSpanStart(span); + if (isNotSpace(builder, spanStart - 1)) { + builder.insert(spanStart, " "); + spansWithSpacesBefore.add(span); + } + + int spanEnd = builder.getSpanEnd(span); + if (isNotSpace(builder, spanEnd)) { + builder.insert(spanEnd, " "); + spansWithSpacesAfter.add(span); + } + + try { + setTextAndMeasure(builder, widthMeasureSpec, heightMeasureSpec); + return FixingResult.fixed(spansWithSpacesBefore, spansWithSpacesAfter); + } catch (IndexOutOfBoundsException notFixed) { + } + } + if (BuildConfig.DEBUG) { + Log.d(HtmlTextView.TAG, "Could not fix the Spanned by adding spaces around spans"); + } + return FixingResult.notFixed(); + } + + private boolean isNotSpace(CharSequence text, int where) { + if (where < 0) + return true; + return text.charAt(where) != ' '; + } + + private void setTextAndMeasure(CharSequence text, int widthMeasureSpec, int heightMeasureSpec) { + setText(text); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + private void removeUnneededSpaces(int widthMeasureSpec, int heightMeasureSpec, + SpannableStringBuilder builder, FixingResult result) { + + for (Object span : result.spansWithSpacesAfter) { + int spanEnd = builder.getSpanEnd(span); + builder.delete(spanEnd, spanEnd + 1); + try { + setTextAndMeasure(builder, widthMeasureSpec, heightMeasureSpec); + } catch (IndexOutOfBoundsException ignored) { + builder.insert(spanEnd, " "); + } + } + + boolean needReset = true; + for (Object span : result.spansWithSpacesBefore) { + int spanStart = builder.getSpanStart(span); + builder.delete(spanStart - 1, spanStart); + try { + setTextAndMeasure(builder, widthMeasureSpec, heightMeasureSpec); + needReset = false; + } catch (IndexOutOfBoundsException ignored) { + needReset = true; + int newSpanStart = spanStart - 1; + builder.insert(newSpanStart, " "); + } + } + + if (needReset) { + setText(builder); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + + private void fallbackToString(int widthMeasureSpec, int heightMeasureSpec) { + if (BuildConfig.DEBUG) { + Log.d(HtmlTextView.TAG, "Fallback to unspanned text"); + } + String fallbackText = getText().toString(); + setTextAndMeasure(fallbackText, widthMeasureSpec, heightMeasureSpec); + } + +} \ No newline at end of file diff --git a/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java new file mode 100644 index 000000000..e4fc41c05 --- /dev/null +++ b/libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2013 Antarix Tandon + * + * 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.graphics.Canvas; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.text.Html.ImageGetter; +import android.view.View; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; + +public class UrlImageGetter implements ImageGetter { + Context c; + View container; + + /** + * Construct the URLImageParser which will execute AsyncTask and refresh the container + * + * @param t + * @param c + */ + public UrlImageGetter(View t, Context c) { + this.c = c; + this.container = t; + } + + public Drawable getDrawable(String source) { + UrlDrawable urlDrawable = new UrlDrawable(); + + // get the actual source + ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable); + + asyncTask.execute(source); + + // return reference to URLDrawable where I will change with actual image from + // the src tag + return urlDrawable; + } + + public class ImageGetterAsyncTask extends AsyncTask { + UrlDrawable urlDrawable; + + public ImageGetterAsyncTask(UrlDrawable d) { + this.urlDrawable = d; + } + + @Override + protected Drawable doInBackground(String... params) { + String source = params[0]; + return fetchDrawable(source); + } + + @Override + protected void onPostExecute(Drawable result) { + // set the correct bound according to the result from HTTP call + urlDrawable.setBounds(0, 0, 0 + result.getIntrinsicWidth(), 0 + result.getIntrinsicHeight()); + + // change the reference of the current drawable to the result + // from the HTTP call + urlDrawable.drawable = result; + + // redraw the image by invalidating the container + UrlImageGetter.this.container.invalidate(); + } + + /** + * Get the Drawable from URL + * + * @param urlString + * @return + */ + public Drawable fetchDrawable(String urlString) { + try { + InputStream is = fetch(urlString); + Drawable drawable = Drawable.createFromStream(is, "src"); + drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0 + drawable.getIntrinsicHeight()); + return drawable; + } catch (Exception e) { + return null; + } + } + + private InputStream fetch(String urlString) throws MalformedURLException, IOException { + DefaultHttpClient httpClient = new DefaultHttpClient(); + HttpGet request = new HttpGet(urlString); + HttpResponse response = httpClient.execute(request); + return response.getEntity().getContent(); + } + } + + @SuppressWarnings("deprecation") + public class UrlDrawable extends BitmapDrawable { + // the drawable that you need to set, you could set the initial drawing + // with the loading image if you need to + protected Drawable drawable; + + @Override + public void draw(Canvas canvas) { + // override the draw to facilitate refresh function later + if (drawable != null) { + drawable.draw(canvas); + } + } + } +}