Connect up the showFileChooser client callback
Bug: 6930981
Full implementation depends on the associated API landing in frameworks/base
As as stop-gap, just fallback to calling the old never-published
openFileChooser in the default case.
Change-Id: I9f44dab183aab0c3431ecc7557aea78d9e78e50d
diff --git a/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java b/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java
index ba5b1e4..8749985 100644
--- a/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java
+++ b/chromium/java/com/android/webview/chromium/WebViewContentsClientAdapter.java
@@ -26,6 +26,8 @@
import android.graphics.Picture;
import android.net.http.ErrorStrings;
import android.net.http.SslError;
+import android.net.Uri;
+import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
@@ -58,6 +60,8 @@
import org.chromium.content.common.TraceEvent;
import java.net.URISyntaxException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
/**
* An adapter class that forwards the callbacks from {@link ContentViewClient}
@@ -732,6 +736,48 @@
}
@Override
+ public void showFileChooser(final ValueCallback<String[]> uploadFileCallback,
+ final AwContentsClient.FileChooserParams fileChooserParams) {
+ if (mWebChromeClient == null) {
+ uploadFileCallback.onReceiveValue(null);
+ return;
+ }
+ TraceEvent.begin();
+ /*
+ // TODO: Call new API here when it's added in frameworks/base - see http://ag/335990
+ WebChromeClient.FileChooserParams p = new WebChromeClient.FileChooserParams();
+ p.mode = fileChooserParams.mode;
+ p.acceptTypes = fileChooserParams.acceptTypes;
+ p.title = fileChooserParams.title;
+ p.defaultFilename = fileChooserParams.defaultFilename;
+ p.capture = fileChooserParams.capture;
+ if (TRACE) Log.d(TAG, "showFileChooser");
+ if (Build.VERSION.SDK_INT > VERSION_CODES.KIT_KAT &&
+ !mWebChromeClient.showFileChooser(mWebView, uploadFileCallback, p)) {
+ return;
+ }
+ if (mWebView.getContext().getApplicationInfo().targetSdkVersion >
+ Build.VERSION_CODES.KIT_KAT) {
+ uploadFileCallback.onReceiveValue(null);
+ return;
+ }
+ */
+ ValueCallback<Uri> innerCallback = new ValueCallback<Uri>() {
+ final AtomicBoolean completed = new AtomicBoolean(false);
+ @Override
+ public void onReceiveValue(Uri uri) {
+ if (completed.getAndSet(true)) return;
+ uploadFileCallback.onReceiveValue(
+ uri == null ? null : new String[] { uri.toString() });
+ }
+ };
+ if (TRACE) Log.d(TAG, "openFileChooser");
+ mWebChromeClient.openFileChooser(innerCallback, fileChooserParams.acceptTypes,
+ fileChooserParams.capture ? "*" : "");
+ TraceEvent.end();
+ }
+
+ @Override
public void onScaleChangedScaled(float oldScale, float newScale) {
TraceEvent.begin();
if (TRACE) Log.d(TAG, " onScaleChangedScaled");