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 070443d4d3afedb375ca23d2e9c35e34ad4d15e7..4f967b77c4ba6c03e034c972e6b316c8c264aa36 100644 |
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java |
@@ -13,6 +13,7 @@ import android.content.Intent; |
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 android.util.Log; |
@@ -71,23 +72,31 @@ class SelectFileDialog implements WindowAndroid.IntentCallback { |
Intent chooser = new Intent(Intent.ACTION_CHOOSER); |
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); |
+ Context context = window.getApplicationContext(); |
camera.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION); |
- Context context = window.getApplicationContext(); |
try { |
- mCameraOutputUri = ContentUriUtils.getContentUriFromFile( |
- context, getFileForImageCapture(context)); |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
+ mCameraOutputUri = ContentUriUtils.getContentUriFromFile( |
+ context, getFileForImageCapture(context)); |
+ } else { |
+ mCameraOutputUri = Uri.fromFile(getFileForImageCapture(context)); |
+ } |
} catch (IOException e) { |
Log.e(TAG, "Cannot retrieve content uri from file", e); |
} |
+ |
if (mCameraOutputUri == null) { |
onFileNotSelected(); |
return; |
} |
camera.putExtra(MediaStore.EXTRA_OUTPUT, mCameraOutputUri); |
- camera.setClipData( |
- ClipData.newUri(context.getContentResolver(), IMAGE_FILE_PATH, mCameraOutputUri)); |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
+ camera.setClipData( |
+ ClipData.newUri(context.getContentResolver(), |
+ IMAGE_FILE_PATH, mCameraOutputUri)); |
+ } |
Intent camcorder = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); |
Intent soundRecorder = new Intent( |
MediaStore.Audio.Media.RECORD_SOUND_ACTION); |
@@ -145,13 +154,28 @@ class SelectFileDialog implements WindowAndroid.IntentCallback { |
} |
/** |
- * Get a file for the image capture in the IMAGE_FILE_PATH directory. |
+ * Get a file for the image capture operation. For devices with JB MR2 or |
+ * latter android versions, the file is put under IMAGE_FILE_PATH directory. |
+ * For ICS devices, the file is put under CAPTURE_IMAGE_DIRECTORY. |
+ * |
* @param context The application context. |
+ * @return file path for the captured image to be stored. |
*/ |
private File getFileForImageCapture(Context context) throws IOException { |
- final File path = new File(context.getFilesDir(), IMAGE_FILE_PATH); |
- if (!path.exists() && !path.mkdir()) { |
- throw new IOException("Folder cannot be created."); |
+ File path; |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
+ path = new File(context.getFilesDir(), IMAGE_FILE_PATH); |
+ if (!path.exists() && !path.mkdir()) { |
+ throw new IOException("Folder cannot be created."); |
+ } |
+ } else { |
+ File externalDataDir = Environment.getExternalStoragePublicDirectory( |
+ Environment.DIRECTORY_DCIM); |
+ path = new File(externalDataDir.getAbsolutePath() + |
+ File.separator + CAPTURE_IMAGE_DIRECTORY); |
+ if (!path.exists() && !path.mkdirs()) { |
+ path = externalDataDir; |
+ } |
} |
File photoFile = File.createTempFile( |
String.valueOf(System.currentTimeMillis()), ".jpg", path); |