diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-09-09 13:16:54 +0200 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2013-09-09 13:16:54 +0200 |
commit | 5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744 (patch) | |
tree | 0e9c9f0c3b9cd9f0a7d5a15512a70b36001a87de /libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java | |
parent | 5dc693c64c14000a3a03903736d000a45795bcee (diff) | |
download | open-keychain-5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744.tar.gz open-keychain-5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744.tar.bz2 open-keychain-5b6880d2e34f4c8a4bfba87b5ce53d3c6727b744.zip |
Switch from HtmlSpanner to HtmlTextView
Diffstat (limited to 'libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java')
-rw-r--r-- | libraries/HtmlTextView/src/org/sufficientlysecure/htmltextview/UrlImageGetter.java | 128 |
1 files changed, 128 insertions, 0 deletions
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<String, Void, Drawable> { + 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); + } + } + } +} |