summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelim Gurun <sgurun@google.com>2014-07-24 23:36:57 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-07-24 23:36:57 +0000
commitcc5e753b9b3486222f87a2da4f8a8d34cfaff316 (patch)
tree3c6dbc78d70fbfff5be44a390efa6df666ede18b
parent424cbde960e915d8e46f04cfcf81a7665fbaf710 (diff)
parent4e22cd8d94235a273e0ea3da15bc7aa82c76ef99 (diff)
downloadBrowser-cc5e753b9b3486222f87a2da4f8a8d34cfaff316.tar.gz
am 4e22cd8d: am 4b9f5130: Merge "Update AOSP browser to use the new FileChooser API" into lmp-dev
* commit '4e22cd8d94235a273e0ea3da15bc7aa82c76ef99': Update AOSP browser to use the new FileChooser API
-rw-r--r--src/com/android/browser/Tab.java2
-rw-r--r--src/com/android/browser/UploadHandler.java175
2 files changed, 9 insertions, 168 deletions
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 84565e52..d463045e 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1001,7 +1001,7 @@ class Tab implements PictureListener {
}
@Override
- public boolean showFileChooser(WebView webView, ValueCallback<Uri[]> callback,
+ public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> callback,
FileChooserParams params) {
if (mInForeground) {
mWebViewController.showFileChooser(callback, params);
diff --git a/src/com/android/browser/UploadHandler.java b/src/com/android/browser/UploadHandler.java
index c8d76d96..beaaf5ff 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -23,6 +23,7 @@ import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.webkit.WebChromeClient.FileChooserParams;
+import android.webkit.WebChromeClient.UploadHelper;
import android.webkit.ValueCallback;
import android.widget.Toast;
@@ -38,135 +39,34 @@ public class UploadHandler {
* The Object used to inform the WebView of the file to upload.
*/
private ValueCallback<Uri[]> mUploadMessage;
- private String mCameraFilePath;
+ private UploadHelper mUploadHelper;
private boolean mHandled;
- private boolean mCaughtActivityNotFoundException;
-
private Controller mController;
public UploadHandler(Controller controller) {
mController = controller;
}
- String getFilePath() {
- return mCameraFilePath;
- }
-
boolean handled() {
return mHandled;
}
void onResult(int resultCode, Intent intent) {
-
- if (resultCode == Activity.RESULT_CANCELED && mCaughtActivityNotFoundException) {
- // Couldn't resolve an activity, we are going to try again so skip
- // this result.
- mCaughtActivityNotFoundException = false;
- return;
- }
-
- Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
- : intent.getData();
-
- // As we ask the camera to save the result of the user taking
- // a picture, the camera application does not return anything other
- // than RESULT_OK. So we need to check whether the file we expected
- // was written to disk in the in the case that we
- // did not get an intent returned but did get a RESULT_OK. If it was,
- // we assume that this result has came back from the camera.
- if (result == null && intent == null && resultCode == Activity.RESULT_OK) {
- File cameraFile = new File(mCameraFilePath);
- if (cameraFile.exists()) {
- result = Uri.fromFile(cameraFile);
- // Broadcast to the media scanner that we have a new photo
- // so it will be added into the gallery for the user.
- mController.getActivity().sendBroadcast(
- new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));
- }
- }
-
- Uri[] uris = null;
- if (result != null) {
- uris = new Uri[1];
- uris[0] = result;
- }
- mUploadMessage.onReceiveValue(uris);
+ mUploadMessage.onReceiveValue(mUploadHelper.parseResult(resultCode, intent));
mHandled = true;
- mCaughtActivityNotFoundException = false;
}
void openFileChooser(ValueCallback<Uri[]> callback, FileChooserParams fileChooserParams) {
- final String imageMimeType = "image/*";
- final String videoMimeType = "video/*";
- final String audioMimeType = "audio/*";
-
- final String mediaSourceValueCamera = "camera";
- final String mediaSourceValueCamcorder = "camcorder";
- final String mediaSourceValueMicrophone = "microphone";
-
if (mUploadMessage != null) {
// Already a file picker operation in progress.
return;
}
mUploadMessage = callback;
-
- // Parse the accept type.
- String params[] = fileChooserParams.acceptTypes.split(";");
- String mimeType = params[0];
- boolean capture = fileChooserParams.capture;
-
- //Ensure it is not still set from a previous upload.
- mCameraFilePath = null;
-
- if (mimeType.equals(imageMimeType)) {
- if (capture) {
- // Specified 'image/*' and requested capture. Launch the camera.
- startActivity(createCameraIntent());
- return;
- } else {
- // Specified just 'image/*', and no capture. Show a traditional picker filtered
- // on accept type by sending an intent for both the Camera and image/* OPENABLE.
- Intent chooser = createChooserIntent(createCameraIntent());
- chooser.putExtra(Intent.EXTRA_INTENT, createOpenableIntent(imageMimeType));
- startActivity(chooser);
- return;
- }
- } else if (mimeType.equals(videoMimeType)) {
- if (capture) {
- // Specified 'video/*' and requested capture. Launch the camcorder.
- startActivity(createCamcorderIntent());
- return;
- } else {
- // Specified just 'video/*', and no capture. Show a traditional file picker,
- // filtered on accept type by sending an intent for both camcorder
- // and video/* OPENABLE.
- Intent chooser = createChooserIntent(createCamcorderIntent());
- chooser.putExtra(Intent.EXTRA_INTENT, createOpenableIntent(videoMimeType));
- startActivity(chooser);
- return;
- }
- } else if (mimeType.equals(audioMimeType)) {
- if (capture) {
- // Specified 'audio/*' and requested capture. Launch the sound recorder.
- startActivity(createSoundRecorderIntent());
- return;
- } else {
- // Specified just 'audio/*', and no capture. Show a traditional file picker,
- // filtered on accept type by sending an intent for both the sound
- // recorder and audio/* OPENABLE.
- Intent chooser = createChooserIntent(createSoundRecorderIntent());
- chooser.putExtra(Intent.EXTRA_INTENT, createOpenableIntent(audioMimeType));
- startActivity(chooser);
- return;
- }
- }
-
- // No special handling based on the accept type was necessary, so trigger the default
- // file upload chooser.
- startActivity(createDefaultOpenableIntent());
+ mUploadHelper = fileChooserParams.getUploadHelper();
+ startActivity(mUploadHelper.buildIntent());
}
private void startActivity(Intent intent) {
@@ -174,68 +74,9 @@ public class UploadHandler {
mController.getActivity().startActivityForResult(intent, Controller.FILE_SELECTED);
} catch (ActivityNotFoundException e) {
// No installed app was able to handle the intent that
- // we sent, so fallback to the default file upload control.
- try {
- mCaughtActivityNotFoundException = true;
- mController.getActivity().startActivityForResult(createDefaultOpenableIntent(),
- Controller.FILE_SELECTED);
- } catch (ActivityNotFoundException e2) {
- // Nothing can return us a file, so file upload is effectively disabled.
- Toast.makeText(mController.getActivity(), R.string.uploads_disabled,
- Toast.LENGTH_LONG).show();
- }
+ // we sent, so file upload is effectively disabled.
+ Toast.makeText(mController.getActivity(), R.string.uploads_disabled,
+ Toast.LENGTH_LONG).show();
}
}
-
- private Intent createDefaultOpenableIntent() {
- // Create and return a chooser with the default OPENABLE
- // actions including the camera, camcorder and sound
- // recorder where available.
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType("*/*");
-
- Intent chooser = createChooserIntent(createCameraIntent(), createCamcorderIntent(),
- createSoundRecorderIntent());
- chooser.putExtra(Intent.EXTRA_INTENT, i);
- return chooser;
- }
-
- private Intent createChooserIntent(Intent... intents) {
- Intent chooser = new Intent(Intent.ACTION_CHOOSER);
- chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents);
- chooser.putExtra(Intent.EXTRA_TITLE,
- mController.getActivity().getResources()
- .getString(R.string.choose_upload));
- return chooser;
- }
-
- private Intent createOpenableIntent(String type) {
- Intent i = new Intent(Intent.ACTION_GET_CONTENT);
- i.addCategory(Intent.CATEGORY_OPENABLE);
- i.setType(type);
- return i;
- }
-
- private Intent createCameraIntent() {
- Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- File externalDataDir = Environment.getExternalStoragePublicDirectory(
- Environment.DIRECTORY_DCIM);
- File cameraDataDir = new File(externalDataDir.getAbsolutePath() +
- File.separator + "browser-photos");
- cameraDataDir.mkdirs();
- mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator +
- System.currentTimeMillis() + ".jpg";
- cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCameraFilePath)));
- return cameraIntent;
- }
-
- private Intent createCamcorderIntent() {
- return new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
- }
-
- private Intent createSoundRecorderIntent() {
- return new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
- }
-
}