summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarthikeyan Periasamy <kperiasa@codeaurora.org>2016-03-12 22:39:16 +0100
committerjrizzoli <joey@cyanogenmoditalia.it>2016-03-12 22:47:42 +0100
commit9013f0f4d08fa1a29c5d75f41e743a9c85703f7d (patch)
tree4391deb13129eac07ca1448d8b9220c675f81a5e
parentd7f751b95ff8237f81ee346bd3ab0476bea3d1b0 (diff)
downloadandroid_packages_apps_Gello-9013f0f4d08fa1a29c5d75f41e743a9c85703f7d.tar.gz
android_packages_apps_Gello-9013f0f4d08fa1a29c5d75f41e743a9c85703f7d.tar.bz2
android_packages_apps_Gello-9013f0f4d08fa1a29c5d75f41e743a9c85703f7d.zip
Added support for URL redirection for the download from ContextMenu
Check for URL redirection status from the response and get all download info for the new URL from the location header field. Change-Id: I13aaa674331b0336099306501bdc2d5219349760 CR-Fixed: SWE-6709
-rw-r--r--src/com/android/browser/FetchUrlMimeType.java70
1 files changed, 55 insertions, 15 deletions
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index e5abebbc..e25093f9 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -23,6 +23,7 @@ import android.net.http.AndroidHttpClient;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.MimeTypeMap;
+import android.webkit.URLUtil;
import com.android.browser.reflect.ReflectHelper;
@@ -38,6 +39,9 @@ import org.apache.http.conn.params.ConnRouteParams;
import org.codeaurora.swe.CookieManager;
+import android.widget.Toast;
+import com.android.browser.R;
+
/**
* This class is used to pull down the http headers of a given URL so that
* we can analyse the mimetype and make any correction needed before we give
@@ -62,6 +66,8 @@ class FetchUrlMimeType extends Thread {
private boolean mPrivateBrowsing;
private long mContentLength;
+ private String mContentDisposition;
+
public FetchUrlMimeType(Activity activity, String url, String userAgent,
String referer, String auth, boolean privateBrowsing, String filename) {
mActivity = activity;
@@ -74,8 +80,7 @@ class FetchUrlMimeType extends Thread {
mAuth = auth;
}
- @Override
- public void run() {
+ private String getMimeType(String url) {
// User agent is likely to be null, though the AndroidHttpClient
// seems ok with that.
AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent);
@@ -91,17 +96,21 @@ class FetchUrlMimeType extends Thread {
} catch (IllegalArgumentException ex) {
Log.e(LOGTAG,"Download failed: " + ex);
client.close();
- return;
+ mFilename = null;
+ mUri = null;
+ return null;
}
HttpHead request;
try {
- URI uriObj = new URI(mUri);
+ URI uriObj = new URI(url);
request = new HttpHead(uriObj.toString());
} catch (URISyntaxException e) {
Log.e(LOGTAG,"Encode URI failed: " + e);
client.close();
- return;
+ mFilename = null;
+ mUri = null;
+ return null;
}
String cookies = CookieManager.getInstance().getCookie(mUri, mPrivateBrowsing);
@@ -112,7 +121,6 @@ class FetchUrlMimeType extends Thread {
HttpResponse response;
String filename = mFilename;
String mimeType = null;
- String contentDisposition = null;
String contentLength = null;
try {
response = client.execute(request);
@@ -132,21 +140,59 @@ class FetchUrlMimeType extends Thread {
if (contentLengthHeader != null) {
contentLength = contentLengthHeader.getValue();
}
+
+ if (contentLength != null) {
+ mContentLength = Long.parseLong(contentLength);
+ } else {
+ mContentLength = 0;
+ }
+
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition");
if (contentDispositionHeader != null) {
- contentDisposition = contentDispositionHeader.getValue();
+ mContentDisposition = contentDispositionHeader.getValue();
}
+
+ mFilename = URLUtil.guessFileName(url, mContentDisposition, mimeType);
+ mUri = url;
+ } else if (response.getStatusLine().getStatusCode() == 302) {
+ return getMimeType(response.getLastHeader("Location").getValue());
}
} catch (IllegalArgumentException ex) {
if (request != null)
request.abort();
+ Log.e(LOGTAG, "Download failed: " + ex);
+ mFilename = null;
+ mUri = null;
} catch (IOException ex) {
if (request != null)
request.abort();
+ Log.e(LOGTAG, "Download failed: " + ex);
+ mFilename = null;
+ mUri = null;
} finally {
client.close();
}
+ return mimeType;
+ }
+
+ @Override
+ public void run() {
+ String url = mUri;
+ String mimeType = getMimeType(mUri);
+ String filename = mFilename;
+
+ if (mUri == null) {
+ mUri = url; // Restore the intial value
+ mActivity.runOnUiThread(new Runnable() {
+ public void run() {
+ Toast.makeText(mActivity, R.string.cannot_download_generic,
+ Toast.LENGTH_SHORT).show();
+ }
+ });
+ return;
+ }
+
if (mimeType != null) {
Log.e(LOGTAG, "-----------the mimeType from http header is ------------->" + mimeType);
if (mimeType.equalsIgnoreCase("text/plain") ||
@@ -176,17 +222,11 @@ class FetchUrlMimeType extends Thread {
if (newMimeType != null) {
mimeType = newMimeType;
}
- filename = guessFileNameEx(mUri, contentDisposition, mimeType);
+ filename = guessFileNameEx(mUri, mContentDisposition, mimeType);
}
- if (contentLength != null) {
- mContentLength = Long.parseLong(contentLength);
- } else {
- mContentLength = 0;
- }
-
- DownloadHandler.startDownloadSettings(mActivity, mUri, mUserAgent, contentDisposition,
+ DownloadHandler.startDownloadSettings(mActivity, mUri, mUserAgent, mContentDisposition,
mimeType, mReferer, mAuth, mPrivateBrowsing, mContentLength, filename);
}