Index: ui/android/java/src/org/chromium/ui/SelectFileDialog.java |
diff --git a/ui/android/java/src/org/chromium/ui/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/SelectFileDialog.java |
index 85e355dd1f4041a2d4eb688f5a333fc420c004b6..8c7501241870bb4e48460afd5f48949057782ade 100644 |
--- a/ui/android/java/src/org/chromium/ui/SelectFileDialog.java |
+++ b/ui/android/java/src/org/chromium/ui/SelectFileDialog.java |
@@ -11,6 +11,7 @@ import android.database.Cursor; |
import android.net.Uri; |
import android.os.Environment; |
import android.provider.MediaStore; |
+import android.text.TextUtils; |
import java.io.File; |
import java.util.ArrayList; |
@@ -34,15 +35,11 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
private static final String ALL_VIDEO_TYPES = VIDEO_TYPE + "*"; |
private static final String ALL_AUDIO_TYPES = AUDIO_TYPE + "*"; |
private static final String ANY_TYPES = "*/*"; |
- private static final String CAPTURE_CAMERA = "camera"; |
- private static final String CAPTURE_CAMCORDER = "camcorder"; |
- private static final String CAPTURE_MICROPHONE = "microphone"; |
- private static final String CAPTURE_FILESYSTEM = "filesystem"; |
private static final String CAPTURE_IMAGE_DIRECTORY = "browser-photos"; |
private final int mNativeSelectFileDialog; |
private List<String> mFileTypes; |
- private String mCapture; // May be null if no capture parameter was set. |
+ private boolean mCapture; |
private Uri mCameraOutputUri; |
private SelectFileDialog(int nativeSelectFileDialog) { |
@@ -56,7 +53,7 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
* @param window The WindowAndroid that can show intents |
*/ |
@CalledByNative |
- private void selectFile(String[] fileTypes, String capture, WindowAndroid window) { |
+ private void selectFile(String[] fileTypes, boolean capture, WindowAndroid window) { |
mFileTypes = new ArrayList<String>(Arrays.asList(fileTypes)); |
mCapture = capture; |
@@ -69,9 +66,9 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
MediaStore.Audio.Media.RECORD_SOUND_ACTION); |
String lowMemoryError = window.getContext().getString(R.string.low_memory_error); |
- // Quick check - if a capture parameter other than filesystem (the default) is specified we |
- // should just launch the appropriate intent. Otherwise build up a chooser based on the |
- // accept type and then display that to the user. |
+ // Quick check - if the |capture| parameter is set and |fileTypes| has the appropriate MIME |
+ // type, we should just launch the appropriate intent. Otherwise build up a chooser based on |
+ // the accept type and then display that to the user. |
if (captureCamera()) { |
if (window.showIntent(camera, this, lowMemoryError)) return; |
} else if (captureCamcorder()) { |
@@ -215,22 +212,20 @@ class SelectFileDialog implements WindowAndroid.IntentCallback{ |
return shouldShowTypes(ALL_AUDIO_TYPES, AUDIO_TYPE); |
} |
+ private boolean acceptsSpecificType(String type) { |
+ return mFileTypes.size() == 1 && TextUtils.equals(mFileTypes.get(0), type); |
+ } |
+ |
private boolean captureCamera() { |
- return shouldShowImageTypes() && mCapture != null && mCapture.startsWith(CAPTURE_CAMERA); |
+ return mCapture && acceptsSpecificType(ALL_IMAGE_TYPES); |
} |
private boolean captureCamcorder() { |
- return shouldShowVideoTypes() && mCapture != null && |
- mCapture.startsWith(CAPTURE_CAMCORDER); |
+ return mCapture && acceptsSpecificType(ALL_VIDEO_TYPES); |
} |
private boolean captureMicrophone() { |
- return shouldShowAudioTypes() && mCapture != null && |
- mCapture.startsWith(CAPTURE_MICROPHONE); |
- } |
- |
- private boolean captureFilesystem() { |
- return mCapture != null && mCapture.startsWith(CAPTURE_FILESYSTEM); |
+ return mCapture && acceptsSpecificType(ALL_AUDIO_TYPES); |
} |
private boolean acceptSpecificType(String accept) { |