Browse Source

Fixed bugs in downloading preventing some files from being properly opened

master
Anthony Restaino 8 years ago
parent
commit
6319503973
  1. 24
      app/src/main/java/acr/browser/lightning/download/DownloadHandler.java
  2. 2
      app/src/main/java/acr/browser/lightning/download/FetchUrlMimeType.java
  3. 2
      app/src/main/java/acr/browser/lightning/download/LightningDownloadListener.java
  4. 2
      app/src/main/java/acr/browser/lightning/utils/Utils.java

24
app/src/main/java/acr/browser/lightning/download/DownloadHandler.java

@ -19,6 +19,7 @@ import android.support.v7.app.AlertDialog; @@ -19,6 +19,7 @@ import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.CookieManager;
import android.webkit.MimeTypeMap;
import android.webkit.URLUtil;
import com.squareup.otto.Bus;
@ -47,6 +48,14 @@ public class DownloadHandler { @@ -47,6 +48,14 @@ public class DownloadHandler {
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
.getPath();
@Nullable
public static String guessFileExtension(@NonNull String filename) {
int lastIndex = filename.lastIndexOf('.') + 1;
if (lastIndex > 0 && filename.length() > lastIndex) {
return filename.substring(lastIndex, filename.length());
}
return null;
}
/**
* Notify the host application a download should be done, or that the data
@ -60,6 +69,12 @@ public class DownloadHandler { @@ -60,6 +69,12 @@ public class DownloadHandler {
*/
public static void onDownloadStart(@NonNull Context context, @NonNull PreferenceManager manager, String url, String userAgent,
@Nullable String contentDisposition, String mimetype) {
Log.d(TAG, "DOWNLOAD: Trying to download from URL: " + url);
Log.d(TAG, "DOWNLOAD: Content disposition: " + contentDisposition);
Log.d(TAG, "DOWNLOAD: Mimetype: " + mimetype);
Log.d(TAG, "DOWNLOAD: User agent: " + userAgent);
// if we're dealing wih A/V content that's not explicitly marked
// for download, check if it's streamable.
if (contentDisposition == null
@ -189,11 +204,10 @@ public class DownloadHandler { @@ -189,11 +204,10 @@ public class DownloadHandler {
eventBus.post(new BrowserEvents.ShowSnackBarMessage(R.string.cannot_download));
return;
}
request.setMimeType(mimetype);
// set downloaded file destination to /sdcard/Download.
// or, should it be set to one of several Environment.DIRECTORY* dirs
// depending on mimetype?
String location = preferences.getDownloadDirectory();
Uri downloadFolder;
location = addNecessarySlashes(location);
@ -210,6 +224,9 @@ public class DownloadHandler { @@ -210,6 +224,9 @@ public class DownloadHandler {
eventBus.post(new BrowserEvents.ShowSnackBarMessage(R.string.problem_location_download));
return;
}
String newMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(guessFileExtension(filename));
Log.d(TAG, "New mimetype: " + newMimeType);
request.setMimeType(newMimeType);
request.setDestinationUri(Uri.parse(Constants.FILE + location + filename));
// let this downloaded file be scanned by MediaScanner - so that it can
// show up in Gallery app, for example.
@ -221,6 +238,8 @@ public class DownloadHandler { @@ -221,6 +238,8 @@ public class DownloadHandler {
String cookies = CookieManager.getInstance().getCookie(url);
request.addRequestHeader(COOKIE_REQUEST_HEADER, cookies);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
//noinspection VariableNotUsedInsideIf
if (mimetype == null) {
Log.d(TAG, "Mimetype is null");
if (TextUtils.isEmpty(addressString)) {
@ -247,7 +266,6 @@ public class DownloadHandler { @@ -247,7 +266,6 @@ public class DownloadHandler {
eventBus.post(new BrowserEvents.ShowSnackBarMessage(
context.getString(R.string.download_pending) + ' ' + filename));
}
}
private static final String sFileName = "test";

2
app/src/main/java/acr/browser/lightning/download/FetchUrlMimeType.java

@ -95,7 +95,7 @@ class FetchUrlMimeType extends Thread { @@ -95,7 +95,7 @@ class FetchUrlMimeType extends Thread {
if (mimeType.equalsIgnoreCase("text/plain")
|| mimeType.equalsIgnoreCase("application/octet-stream")) {
String newMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
MimeTypeMap.getFileExtensionFromUrl(mUri));
DownloadHandler.guessFileExtension(mUri));
if (newMimeType != null) {
mRequest.setMimeType(newMimeType);
}

2
app/src/main/java/acr/browser/lightning/download/LightningDownloadListener.java

@ -65,7 +65,7 @@ public class LightningDownloadListener implements DownloadListener { @@ -65,7 +65,7 @@ public class LightningDownloadListener implements DownloadListener {
.setNegativeButton(mActivity.getResources().getString(R.string.action_cancel),
dialogClickListener).show();
BrowserDialog.setDialogSize(mActivity, dialog);
Log.i(Constants.TAG, "Downloading" + fileName);
Log.i(Constants.TAG, "Downloading: " + fileName);
}
@Override

2
app/src/main/java/acr/browser/lightning/utils/Utils.java

@ -79,7 +79,7 @@ public final class Utils { @@ -79,7 +79,7 @@ public final class Utils {
public void onGranted() {
String fileName = URLUtil.guessFileName(url, null, null);
DownloadHandler.onDownloadStart(activity, manager, url, userAgent, contentDisposition, null);
Log.i(Constants.TAG, "Downloading" + fileName);
Log.i(Constants.TAG, "Downloading: " + fileName);
}
@Override

Loading…
Cancel
Save