Miłosz Sieradzki
11 years ago
30 changed files with 1660 additions and 1520 deletions
File diff suppressed because it is too large
Load Diff
@ -1,109 +0,0 @@
@@ -1,109 +0,0 @@
|
||||
/* |
||||
* Copyright 2014 A.C.R. Development |
||||
*/ |
||||
package acr.browser.lightning; |
||||
|
||||
|
||||
import org.apache.http.Header; |
||||
import org.apache.http.HttpResponse; |
||||
import org.apache.http.client.methods.HttpHead; |
||||
import android.app.DownloadManager; |
||||
import android.content.Context; |
||||
import android.net.http.AndroidHttpClient; |
||||
import android.os.Environment; |
||||
import android.webkit.MimeTypeMap; |
||||
import android.webkit.URLUtil; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
/** |
||||
* 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 |
||||
* the URL to the download manager. |
||||
* This operation is needed when the user long-clicks on a link or image and |
||||
* we don't know the mimetype. If the user just clicks on the link, we will |
||||
* do the same steps of correcting the mimetype down in |
||||
* android.os.webkit.LoadListener rather than handling it here. |
||||
* |
||||
*/ |
||||
class FetchUrlMimeType extends Thread { |
||||
|
||||
private Context mContext; |
||||
private DownloadManager.Request mRequest; |
||||
private String mUri; |
||||
private String mCookies; |
||||
private String mUserAgent; |
||||
|
||||
public FetchUrlMimeType(Context context, DownloadManager.Request request, |
||||
String uri, String cookies, String userAgent) { |
||||
mContext = context.getApplicationContext(); |
||||
mRequest = request; |
||||
mUri = uri; |
||||
mCookies = cookies; |
||||
mUserAgent = userAgent; |
||||
} |
||||
|
||||
@Override |
||||
public void run() { |
||||
// User agent is likely to be null, though the AndroidHttpClient
|
||||
// seems ok with that.
|
||||
AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent); |
||||
|
||||
HttpHead request = new HttpHead(mUri); |
||||
|
||||
if (mCookies != null && mCookies.length() > 0) { |
||||
request.addHeader("Cookie", mCookies); |
||||
} |
||||
|
||||
HttpResponse response; |
||||
String mimeType = null; |
||||
String contentDisposition = null; |
||||
try { |
||||
response = client.execute(request); |
||||
// We could get a redirect here, but if we do lets let
|
||||
// the download manager take care of it, and thus trust that
|
||||
// the server sends the right mimetype
|
||||
if (response.getStatusLine().getStatusCode() == 200) { |
||||
Header header = response.getFirstHeader("Content-Type"); |
||||
if (header != null) { |
||||
mimeType = header.getValue(); |
||||
final int semicolonIndex = mimeType.indexOf(';'); |
||||
if (semicolonIndex != -1) { |
||||
mimeType = mimeType.substring(0, semicolonIndex); |
||||
} |
||||
} |
||||
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition"); |
||||
if (contentDispositionHeader != null) { |
||||
contentDisposition = contentDispositionHeader.getValue(); |
||||
} |
||||
} |
||||
} catch (IllegalArgumentException ex) { |
||||
request.abort(); |
||||
} catch (IOException ex) { |
||||
request.abort(); |
||||
} finally { |
||||
client.close(); |
||||
} |
||||
|
||||
if (mimeType != null) { |
||||
if (mimeType.equalsIgnoreCase("text/plain") || |
||||
mimeType.equalsIgnoreCase("application/octet-stream")) { |
||||
String newMimeType = |
||||
MimeTypeMap.getSingleton().getMimeTypeFromExtension( |
||||
MimeTypeMap.getFileExtensionFromUrl(mUri)); |
||||
if (newMimeType != null) { |
||||
mRequest.setMimeType(newMimeType); |
||||
} |
||||
} |
||||
String filename = URLUtil.guessFileName(mUri, contentDisposition, |
||||
mimeType); |
||||
mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); |
||||
} |
||||
|
||||
// Start the download
|
||||
DownloadManager manager = (DownloadManager) mContext.getSystemService( |
||||
Context.DOWNLOAD_SERVICE); |
||||
manager.enqueue(mRequest); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,107 @@
@@ -0,0 +1,107 @@
|
||||
/* |
||||
* Copyright 2014 A.C.R. Development |
||||
*/ |
||||
package acr.browser.lightning; |
||||
|
||||
import android.app.DownloadManager; |
||||
import android.content.Context; |
||||
import android.net.http.AndroidHttpClient; |
||||
import android.os.Environment; |
||||
import android.webkit.MimeTypeMap; |
||||
import android.webkit.URLUtil; |
||||
import org.apache.http.Header; |
||||
import org.apache.http.HttpResponse; |
||||
import org.apache.http.client.methods.HttpHead; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
/** |
||||
* 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 the URL to the download manager. This operation is needed when the user long-clicks |
||||
* on a link or image and we don't know the mimetype. If the user just clicks on the link, we will do the same steps of |
||||
* correcting the mimetype down in android.os.webkit.LoadListener rather than handling it here. |
||||
*/ |
||||
public class FetchUrlMimeType extends Thread { |
||||
|
||||
private Context mContext; |
||||
|
||||
private DownloadManager.Request mRequest; |
||||
|
||||
private String mUri; |
||||
|
||||
private String mCookies; |
||||
|
||||
private String mUserAgent; |
||||
|
||||
public FetchUrlMimeType(Context context, DownloadManager.Request request, |
||||
String uri, String cookies, String userAgent) { |
||||
mContext = context.getApplicationContext(); |
||||
mRequest = request; |
||||
mUri = uri; |
||||
mCookies = cookies; |
||||
mUserAgent = userAgent; |
||||
} |
||||
|
||||
@Override |
||||
public void run() { |
||||
// User agent is likely to be null, though the AndroidHttpClient
|
||||
// seems ok with that.
|
||||
AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent); |
||||
|
||||
HttpHead request = new HttpHead(mUri); |
||||
|
||||
if (mCookies != null && mCookies.length() > 0) { |
||||
request.addHeader("Cookie", mCookies); |
||||
} |
||||
|
||||
HttpResponse response; |
||||
String mimeType = null; |
||||
String contentDisposition = null; |
||||
try { |
||||
response = client.execute(request); |
||||
// We could get a redirect here, but if we do lets let
|
||||
// the download manager take care of it, and thus trust that
|
||||
// the server sends the right mimetype
|
||||
if (response.getStatusLine().getStatusCode() == 200) { |
||||
Header header = response.getFirstHeader("Content-Type"); |
||||
if (header != null) { |
||||
mimeType = header.getValue(); |
||||
final int semicolonIndex = mimeType.indexOf(';'); |
||||
if (semicolonIndex != -1) { |
||||
mimeType = mimeType.substring(0, semicolonIndex); |
||||
} |
||||
} |
||||
Header contentDispositionHeader = response.getFirstHeader("Content-Disposition"); |
||||
if (contentDispositionHeader != null) { |
||||
contentDisposition = contentDispositionHeader.getValue(); |
||||
} |
||||
} |
||||
} catch (IllegalArgumentException ex) { |
||||
request.abort(); |
||||
} catch (IOException ex) { |
||||
request.abort(); |
||||
} finally { |
||||
client.close(); |
||||
} |
||||
|
||||
if (mimeType != null) { |
||||
if (mimeType.equalsIgnoreCase("text/plain") || |
||||
mimeType.equalsIgnoreCase("application/octet-stream")) { |
||||
String newMimeType = |
||||
MimeTypeMap.getSingleton().getMimeTypeFromExtension( |
||||
MimeTypeMap.getFileExtensionFromUrl(mUri)); |
||||
if (newMimeType != null) { |
||||
mRequest.setMimeType(newMimeType); |
||||
} |
||||
} |
||||
String filename = URLUtil.guessFileName(mUri, contentDisposition, |
||||
mimeType); |
||||
mRequest.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename); |
||||
} |
||||
|
||||
// Start the download
|
||||
DownloadManager manager = (DownloadManager) mContext.getSystemService( |
||||
Context.DOWNLOAD_SERVICE); |
||||
manager.enqueue(mRequest); |
||||
} |
||||
} |
Loading…
Reference in new issue