| Index: chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
|
| index e1854b61ca34699c7519b5cce3ce78a761d6c616..3d4449a000e5f6de40f870156fe0450914eda9a0 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java
|
| @@ -15,7 +15,6 @@ import android.os.AsyncTask;
|
| import android.os.Environment;
|
| import android.support.v7.app.AlertDialog;
|
| import android.text.TextUtils;
|
| -import android.util.Pair;
|
| import android.view.View;
|
| import android.webkit.MimeTypeMap;
|
| import android.webkit.URLUtil;
|
| @@ -85,20 +84,17 @@ public class ChromeDownloadDelegate {
|
| protected Object[] doInBackground(Void... params) {
|
| // Check to see if we have an SDCard.
|
| String status = Environment.getExternalStorageState();
|
| - Pair<String, String> result = getDownloadDirectoryNameAndFullPath();
|
| - String dirName = result.first;
|
| - String fullDirPath = result.second;
|
| - boolean fileExists = doesFileAlreadyExists(fullDirPath, fileName);
|
| + File fullDirPath = getDownloadDirectoryFullPath();
|
| + boolean fileExists = checkFileExists(fullDirPath, fileName);
|
|
|
| - return new Object[] {status, dirName, fullDirPath, fileExists};
|
| + return new Object[] {status, fullDirPath, fileExists};
|
| }
|
|
|
| @Override
|
| protected void onPostExecute(Object[] result) {
|
| String externalStorageState = (String) result[0];
|
| - String dirName = (String) result[1];
|
| - String fullDirPath = (String) result[2];
|
| - Boolean fileExists = (Boolean) result[3];
|
| + File fullDirPath = (File) result[1];
|
| + Boolean fileExists = (Boolean) result[2];
|
| if (!checkExternalStorageAndNotify(
|
| fileName, fullDirPath, externalStorageState)) {
|
| return;
|
| @@ -120,7 +116,7 @@ public class ChromeDownloadDelegate {
|
|
|
| // Not a dangerous file, proceed.
|
| if (fileExists) {
|
| - launchDownloadInfoBar(newInfo, dirName, fullDirPath);
|
| + launchDownloadInfoBar(newInfo, fullDirPath);
|
| } else {
|
| enqueueDownloadManagerRequest(newInfo);
|
| }
|
| @@ -196,22 +192,18 @@ public class ChromeDownloadDelegate {
|
| }
|
|
|
| /**
|
| - * Return a pair of directory name and its full path. Note that we create the directory if
|
| - * it does not already exist.
|
| + * Return the full path of the download directory.
|
| *
|
| - * @return A pair of directory name and its full path. A pair of <null, null> will be returned
|
| - * in case of an error.
|
| + * @return File object containing the path to the download directory.
|
| */
|
| - private static Pair<String, String> getDownloadDirectoryNameAndFullPath() {
|
| + private static File getDownloadDirectoryFullPath() {
|
| assert !ThreadUtils.runningOnUiThread();
|
| File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
|
| - if (!dir.mkdir() && !dir.isDirectory()) return new Pair<>(null, null);
|
| - String dirName = dir.getName();
|
| - String fullDirPath = dir.getPath();
|
| - return new Pair<>(dirName, fullDirPath);
|
| + if (!dir.mkdir() && !dir.isDirectory()) return null;
|
| + return dir;
|
| }
|
|
|
| - private static boolean doesFileAlreadyExists(String dirPath, final String fileName) {
|
| + private static boolean checkFileExists(File dirPath, final String fileName) {
|
| assert !ThreadUtils.runningOnUiThread();
|
| final File file = new File(dirPath, fileName);
|
| return file != null && file.exists();
|
| @@ -259,10 +251,10 @@ public class ChromeDownloadDelegate {
|
| return closeBlankTab();
|
| }
|
|
|
| - private void launchDownloadInfoBar(DownloadInfo info, String dirName, String fullDirPath) {
|
| + private void launchDownloadInfoBar(DownloadInfo info, File fullDirPath) {
|
| if (mTab == null) return;
|
| - nativeLaunchDownloadOverwriteInfoBar(
|
| - ChromeDownloadDelegate.this, mTab, info, info.getFileName(), dirName, fullDirPath);
|
| + nativeLaunchDuplicateDownloadInfoBar(ChromeDownloadDelegate.this, mTab, info,
|
| + new File(fullDirPath, info.getFileName()).toString(), mTab.isIncognito());
|
| }
|
|
|
| /**
|
| @@ -285,7 +277,7 @@ public class ChromeDownloadDelegate {
|
| * @return Whether external storage is ok for downloading.
|
| */
|
| private boolean checkExternalStorageAndNotify(
|
| - String filename, String fullDirPath, String externalStorageStatus) {
|
| + String filename, File fullDirPath, String externalStorageStatus) {
|
| if (fullDirPath == null) {
|
| Log.e(TAG, "Download failed: no SD card");
|
| alertDownloadFailure(
|
| @@ -484,9 +476,8 @@ public class ChromeDownloadDelegate {
|
| private native void nativeInit(WebContents webContents);
|
| private static native String nativeGetDownloadWarningText(String filename);
|
| private static native boolean nativeIsDownloadDangerous(String filename);
|
| - private static native void nativeLaunchDownloadOverwriteInfoBar(ChromeDownloadDelegate delegate,
|
| - Tab tab, DownloadInfo downloadInfo, String fileName, String dirName,
|
| - String dirFullPath);
|
| + private static native void nativeLaunchDuplicateDownloadInfoBar(ChromeDownloadDelegate delegate,
|
| + Tab tab, DownloadInfo downloadInfo, String filePath, boolean isIncognito);
|
| private static native void nativeLaunchPermissionUpdateInfoBar(
|
| Tab tab, String permission, long callbackId);
|
| }
|
|
|