2 * Copyright (C) 2009 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.browser;
19 import android.content.ContentResolver;
20 import android.content.ContentUris;
21 import android.content.ContentValues;
22 import android.database.Cursor;
23 import android.graphics.Bitmap;
24 import android.graphics.BitmapFactory;
25 import android.os.AsyncTask;
26 import android.provider.Browser;
27 import android.webkit.WebView;
29 import com.android.common.AndroidHttpClient;
31 import org.apache.http.HttpEntity;
32 import org.apache.http.HttpResponse;
33 import org.apache.http.client.methods.HttpGet;
34 import org.apache.http.client.params.HttpClientParams;
36 import java.io.ByteArrayOutputStream;
37 import java.io.IOException;
38 import java.io.InputStream;
40 class DownloadTouchIcon extends AsyncTask<String, Void, Void> {
41 private final ContentResolver mContentResolver;
42 private final Cursor mCursor;
43 private final String mOriginalUrl;
44 private final String mUrl;
45 private final String mUserAgent;
46 /* package */ Tab mTab;
48 public DownloadTouchIcon(Tab tab, ContentResolver cr, Cursor c, WebView view) {
50 mContentResolver = cr;
52 // Store these in case they change.
53 mOriginalUrl = view.getOriginalUrl();
55 mUserAgent = view.getSettings().getUserAgentString();
58 public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) {
60 mContentResolver = cr;
68 public Void doInBackground(String... values) {
69 String url = values[0];
71 AndroidHttpClient client = AndroidHttpClient.newInstance(
73 HttpGet request = new HttpGet(url);
76 HttpClientParams.setRedirecting(client.getParams(), true);
79 HttpResponse response = client.execute(request);
81 if (response.getStatusLine().getStatusCode() == 200) {
82 HttpEntity entity = response.getEntity();
84 InputStream content = entity.getContent();
85 if (content != null) {
86 Bitmap icon = BitmapFactory.decodeStream(
92 } catch (IllegalArgumentException ex) {
94 } catch (IOException ex) {
103 protected void onCancelled() {
104 if (mCursor != null) {
109 private void storeIcon(Bitmap icon) {
110 // Do this first in case the download failed.
112 // Remove the touch icon loader from the BrowserActivity.
113 mTab.mTouchIconLoader = null;
116 if (icon == null || mCursor == null || isCancelled()) {
120 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,
126 if (mCursor.moveToFirst()) {
128 mContentResolver.update(ContentUris.withAppendedId(
129 Browser.BOOKMARKS_URI, mCursor.getInt(0)),
131 } while (mCursor.moveToNext());