Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java

Issue 450003002: Pass display names for uploaded content URI files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/android/java/src/org/chromium/base/ContentUriUtils.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
index 52ceac947789d5c10861daa5011adfd0ede7e40e..05186ebc77fc76b1e6f110d6777b1f1301508844 100644
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
@@ -9,14 +9,15 @@ import android.app.Activity;
import android.content.ClipData;
import android.content.ContentResolver;
import android.content.Intent;
-import android.database.Cursor;
import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.TextUtils;
import org.chromium.base.CalledByNative;
+import org.chromium.base.ContentUriUtils;
import org.chromium.base.JNINamespace;
import org.chromium.ui.R;
@@ -140,31 +141,6 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{
}
/**
- * @return the display name of the @code uri if present in the database
- * or an empty string otherwise.
- */
- private String resolveFileName(Uri uri, ContentResolver contentResolver) {
- if (contentResolver == null || uri == null) return "";
- Cursor cursor = null;
- try {
- cursor = contentResolver.query(uri, null, null, null, null);
-
- if (cursor != null && cursor.getCount() >= 1) {
- cursor.moveToFirst();
- int index = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
- if (index > -1) return cursor.getString(index);
- }
- } catch (NullPointerException e) {
- // Some android models don't handle the provider call correctly.
- // see crbug.com/345393
- return "";
- } finally {
- if (cursor != null) cursor.close();
- }
- return "";
- }
-
- /**
* Callback method to handle the intent results and pass on the path to the native
* SelectFileDialog.
* @param window The window that has access to the application activity.
@@ -208,18 +184,12 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{
return;
}
- String[] filePathArray = new String[itemCount];
- String[] displayNameArray = new String[itemCount];
-
+ Uri[] filePathArray = new Uri[itemCount];
for (int i = 0; i < itemCount; ++i) {
- final Uri uri = clipData.getItemAt(i).getUri();
-
- filePathArray[i] = uri.toString();
- displayNameArray[i] = resolveFileName(uri, contentResolver);
+ filePathArray[i] = clipData.getItemAt(i).getUri();
}
-
- nativeOnMultipleFilesSelected(mNativeSelectFileDialog,
- filePathArray, displayNameArray);
+ GetDisplayNameTask task = new GetDisplayNameTask(contentResolver, true);
+ task.execute(filePathArray);
return;
}
@@ -230,10 +200,8 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{
}
if (ContentResolver.SCHEME_CONTENT.equals(results.getScheme())) {
- nativeOnFileSelected(mNativeSelectFileDialog,
- results.getData().toString(),
- resolveFileName(results.getData(),
- contentResolver));
+ GetDisplayNameTask task = new GetDisplayNameTask(contentResolver, false);
+ task.execute(results.getData());
return;
}
@@ -295,6 +263,38 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{
return false;
}
+ private class GetDisplayNameTask extends AsyncTask<Uri, Void, String[]> {
+ String[] mFilePaths;
+ final ContentResolver mContentResolver;
+ final boolean mIsMultiple;
+
+ public GetDisplayNameTask(ContentResolver contentResolver, boolean isMultiple) {
+ mContentResolver = contentResolver;
+ mIsMultiple = isMultiple;
+ }
+
+ @Override
+ protected String[] doInBackground(Uri...uris) {
+ mFilePaths = new String[uris.length];
+ String[] displayNames = new String[uris.length];
+ for (int i = 0; i < uris.length; i++) {
+ mFilePaths[i] = uris[i].toString();
+ displayNames[i] = ContentUriUtils.getDisplayName(
+ uris[i], mContentResolver, MediaStore.MediaColumns.DISPLAY_NAME);
+ }
+ return displayNames;
+ }
+
+ @Override
+ protected void onPostExecute(String[] result) {
+ if (mIsMultiple) {
+ nativeOnMultipleFilesSelected(mNativeSelectFileDialog, mFilePaths, result);
+ } else {
+ nativeOnFileSelected(mNativeSelectFileDialog, mFilePaths[0], result[0]);
+ }
+ }
+ }
+
@CalledByNative
private static SelectFileDialog create(long nativeSelectFileDialog) {
return new SelectFileDialog(nativeSelectFileDialog);
« no previous file with comments | « base/android/java/src/org/chromium/base/ContentUriUtils.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698