OSDN Git Service

Deprecate fill_parent and introduce match_parent.
[android-x86/packages-apps-Browser.git] / src / com / android / browser / DownloadTouchIcon.java
1 /*
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
17 package com.android.browser;
18
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;
28
29 import com.android.common.AndroidHttpClient;
30
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;
35
36 import java.io.ByteArrayOutputStream;
37 import java.io.IOException;
38 import java.io.InputStream;
39
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;
47
48     public DownloadTouchIcon(Tab tab, ContentResolver cr, Cursor c, WebView view) {
49         mTab = tab;
50         mContentResolver = cr;
51         mCursor = c;
52         // Store these in case they change.
53         mOriginalUrl = view.getOriginalUrl();
54         mUrl = view.getUrl();
55         mUserAgent = view.getSettings().getUserAgentString();
56     }
57
58     public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) {
59         mTab = null;
60         mContentResolver = cr;
61         mCursor = c;
62         mOriginalUrl = null;
63         mUrl = url;
64         mUserAgent = null;
65     }
66
67     @Override
68     public Void doInBackground(String... values) {
69         String url = values[0];
70
71         AndroidHttpClient client = AndroidHttpClient.newInstance(
72                 mUserAgent);
73         HttpGet request = new HttpGet(url);
74
75         // Follow redirects
76         HttpClientParams.setRedirecting(client.getParams(), true);
77
78         try {
79             HttpResponse response = client.execute(request);
80
81             if (response.getStatusLine().getStatusCode() == 200) {
82                 HttpEntity entity = response.getEntity();
83                 if (entity != null) {
84                     InputStream content = entity.getContent();
85                     if (content != null) {
86                         Bitmap icon = BitmapFactory.decodeStream(
87                                 content, null, null);
88                         storeIcon(icon);
89                     }
90                 }
91             }
92         } catch (IllegalArgumentException ex) {
93             request.abort();
94         } catch (IOException ex) {
95             request.abort();
96         } finally {
97             client.close();
98         }
99         return null;
100     }
101
102     @Override
103     protected void onCancelled() {
104         if (mCursor != null) {
105             mCursor.close();
106         }
107     }
108
109     private void storeIcon(Bitmap icon) {
110         // Do this first in case the download failed.
111         if (mTab != null) {
112             // Remove the touch icon loader from the BrowserActivity.
113             mTab.mTouchIconLoader = null;
114         }
115
116         if (icon == null || mCursor == null || isCancelled()) {
117             return;
118         }
119
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,
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 }