From be716920e70541c9b334c9389d335f1aa1ed7124 Mon Sep 17 00:00:00 2001 From: Ben Murdoch Date: Wed, 11 Jan 2012 10:55:10 +0000 Subject: [PATCH] Add support for HTML Media Capture "capture" attribute. Plumb the value of the "capture" attribute through the framework down to the embedder. Requires a change in WebKit (I0a921be31fda79a43c05da4fe22d9c808d92709c) and Browser (I38dfe2df043fdba1388384dbd3b5370737eb38e5). Bug: 5771207 Change-Id: I494adc1274ca21ce8fe52a6c7b6b758217927e66 --- core/java/android/webkit/CallbackProxy.java | 15 +++++++++++---- core/java/android/webkit/WebChromeClient.java | 4 +++- core/java/android/webkit/WebViewCore.java | 6 ++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java index 800ebc80d968d..bcd6c3b1f5509 100644 --- a/core/java/android/webkit/CallbackProxy.java +++ b/core/java/android/webkit/CallbackProxy.java @@ -791,7 +791,8 @@ class CallbackProxy extends Handler { case OPEN_FILE_CHOOSER: if (mWebChromeClient != null) { UploadFileMessageData data = (UploadFileMessageData)msg.obj; - mWebChromeClient.openFileChooser(data.getUploadFile(), data.getAcceptType()); + mWebChromeClient.openFileChooser(data.getUploadFile(), data.getAcceptType(), + data.getCapture()); } break; @@ -1566,10 +1567,12 @@ class CallbackProxy extends Handler { private static class UploadFileMessageData { private UploadFile mCallback; private String mAcceptType; + private String mCapture; - public UploadFileMessageData(UploadFile uploadFile, String acceptType) { + public UploadFileMessageData(UploadFile uploadFile, String acceptType, String capture) { mCallback = uploadFile; mAcceptType = acceptType; + mCapture = capture; } public UploadFile getUploadFile() { @@ -1579,6 +1582,10 @@ class CallbackProxy extends Handler { public String getAcceptType() { return mAcceptType; } + + public String getCapture() { + return mCapture; + } } private class UploadFile implements ValueCallback { @@ -1597,13 +1604,13 @@ class CallbackProxy extends Handler { /** * Called by WebViewCore to open a file chooser. */ - /* package */ Uri openFileChooser(String acceptType) { + /* package */ Uri openFileChooser(String acceptType, String capture) { if (mWebChromeClient == null) { return null; } Message myMessage = obtainMessage(OPEN_FILE_CHOOSER); UploadFile uploadFile = new UploadFile(); - UploadFileMessageData data = new UploadFileMessageData(uploadFile, acceptType); + UploadFileMessageData data = new UploadFileMessageData(uploadFile, acceptType, capture); myMessage.obj = data; synchronized (this) { sendMessage(myMessage); diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java index a6ef0ce9d0401..5cb0d41711286 100644 --- a/core/java/android/webkit/WebChromeClient.java +++ b/core/java/android/webkit/WebChromeClient.java @@ -346,9 +346,11 @@ public class WebChromeClient { * onReceiveValue must be called to wake up the thread.a * @param acceptType The value of the 'accept' attribute of the input tag * associated with this file picker. + * @param capture The value of the 'capture' attribute of the input tag + * associated with this file picker. * @hide */ - public void openFileChooser(ValueCallback uploadFile, String acceptType) { + public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture) { uploadFile.onReceiveValue(null); } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index 15a2d48b6b323..c83d106974596 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -394,10 +394,12 @@ public final class WebViewCore { * Called by JNI. Open a file chooser to upload a file. * @param acceptType The value of the 'accept' attribute of the * input tag associated with this file picker. + * @param capture The value of the 'capture' attribute of the + * input tag associated with this file picker. * @return String version of the URI. */ - private String openFileChooser(String acceptType) { - Uri uri = mCallbackProxy.openFileChooser(acceptType); + private String openFileChooser(String acceptType, String capture) { + Uri uri = mCallbackProxy.openFileChooser(acceptType, capture); if (uri != null) { String filePath = ""; // Note - querying for MediaStore.Images.Media.DATA