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");