blob: 1761dd452c975678edf51ec291b319dd1b229960 [file] [log] [blame]
Patrick Scott3918d442009-08-04 13:22:29 -04001/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.browser;
18
19import android.content.ContentResolver;
20import android.content.ContentUris;
21import android.content.ContentValues;
22import android.database.Cursor;
23import android.graphics.Bitmap;
24import android.graphics.BitmapFactory;
25import android.net.http.AndroidHttpClient;
26import android.os.AsyncTask;
27import android.provider.Browser;
28import android.webkit.WebView;
29
30import org.apache.http.HttpEntity;
31import org.apache.http.HttpResponse;
32import org.apache.http.client.methods.HttpGet;
33import org.apache.http.client.params.HttpClientParams;
34
35import java.io.ByteArrayOutputStream;
36import java.io.IOException;
37import java.io.InputStream;
38
39class DownloadTouchIcon extends AsyncTask<String, Void, Bitmap> {
40 private final ContentResolver mContentResolver;
41 private final Cursor mCursor;
42 private final String mOriginalUrl;
43 private final String mUrl;
44 private final String mUserAgent;
Grace Kloba22ac16e2009-10-07 18:00:23 -070045 /* package */ Tab mTab;
Patrick Scott3918d442009-08-04 13:22:29 -040046
Grace Kloba22ac16e2009-10-07 18:00:23 -070047 public DownloadTouchIcon(Tab tab, ContentResolver cr, Cursor c, WebView view) {
48 mTab = tab;
Patrick Scott3918d442009-08-04 13:22:29 -040049 mContentResolver = cr;
50 mCursor = c;
51 // Store these in case they change.
52 mOriginalUrl = view.getOriginalUrl();
53 mUrl = view.getUrl();
54 mUserAgent = view.getSettings().getUserAgentString();
55 }
56
57 public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) {
Grace Kloba22ac16e2009-10-07 18:00:23 -070058 mTab = null;
Patrick Scott3918d442009-08-04 13:22:29 -040059 mContentResolver = cr;
60 mCursor = c;
61 mOriginalUrl = null;
62 mUrl = url;
63 mUserAgent = null;
64 }
65
66 @Override
67 public Bitmap doInBackground(String... values) {
68 String url = values[0];
69
70 AndroidHttpClient client = AndroidHttpClient.newInstance(
71 mUserAgent);
72 HttpGet request = new HttpGet(url);
73
74 // Follow redirects
75 HttpClientParams.setRedirecting(client.getParams(), true);
76
77 try {
78 HttpResponse response = client.execute(request);
79
80 if (response.getStatusLine().getStatusCode() == 200) {
81 HttpEntity entity = response.getEntity();
82 if (entity != null) {
83 InputStream content = entity.getContent();
84 if (content != null) {
85 Bitmap icon = BitmapFactory.decodeStream(
86 content, null, null);
87 return icon;
88 }
89 }
90 }
91 } catch (IllegalArgumentException ex) {
92 request.abort();
93 } catch (IOException ex) {
94 request.abort();
95 } finally {
96 client.close();
97 }
98 return null;
99 }
100
101 @Override
Patrick Scott59ce8302009-09-18 16:29:38 -0400102 protected void onCancelled() {
103 if (mCursor != null) {
104 mCursor.close();
105 }
106 }
107
108 @Override
Patrick Scott3918d442009-08-04 13:22:29 -0400109 public void onPostExecute(Bitmap icon) {
Patrick Scott59ce8302009-09-18 16:29:38 -0400110 // Do this first in case the download failed.
Grace Kloba22ac16e2009-10-07 18:00:23 -0700111 if (mTab != null) {
Patrick Scott59ce8302009-09-18 16:29:38 -0400112 // Remove the touch icon loader from the BrowserActivity.
Grace Kloba22ac16e2009-10-07 18:00:23 -0700113 mTab.mTouchIconLoader = null;
Patrick Scott59ce8302009-09-18 16:29:38 -0400114 }
115
116 if (icon == null || mCursor == null || isCancelled()) {
Patrick Scott3918d442009-08-04 13:22:29 -0400117 return;
118 }
Patrick Scott59ce8302009-09-18 16:29:38 -0400119
Patrick Scott3918d442009-08-04 13:22:29 -0400120 final ByteArrayOutputStream os = new ByteArrayOutputStream();
121 icon.compress(Bitmap.CompressFormat.PNG, 100, os);
122 ContentValues values = new ContentValues();
123 values.put(Browser.BookmarkColumns.TOUCH_ICON,
124 os.toByteArray());
125
126 if (mCursor.moveToFirst()) {
127 do {
128 mContentResolver.update(ContentUris.withAppendedId(
129 Browser.BOOKMARKS_URI, mCursor.getInt(0)),
130 values, null, null);
131 } while (mCursor.moveToNext());
132 }
133 mCursor.close();
134 }
135}