title: onShowFileChooser() from android webview works only once
body: <p>I need to pick images from the device and upload it to the server. For the first time, when I pick the images, onShowFileChooser() gets called and everything works. But, when I try to click upload again, onShowFileChooser() never gets called. But it's working for non-lollypop devices. openFileChoser() gets called, whenever I click upload. Is there anything that I'm missing. Here is my code :</p>
  
  <pre><code>        //Needed for file upload feature
          vWebView.setWebChromeClient(new WebChromeClient() {
  
              // file upload callback (Android 2.2 (API level 8) -- Android 2.3 (API level 10)) (hidden method)
              public void openFileChooser(ValueCallback&lt;Uri&gt; filePathCallback) {
                  showAttachmentDialog(filePathCallback);
              }
  
              // file upload callback (Android 3.0 (API level 11) -- Android 4.0 (API level 15)) (hidden method)
              public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
                  showAttachmentDialog(filePathCallback);
              }
  
              // file upload callback (Android 4.1 (API level 16) -- Android 4.3 (API level 18)) (hidden method)
              public void openFileChooser(ValueCallback&lt;Uri&gt; filePathCallback, String acceptType, String capture) {
                  showAttachmentDialog(filePathCallback);
  
              }
  
              // file upload callback (Android 5.0 (API level 21) -- current) (public method)
  
              // for Lollipop, all in one
              @Override
  
              public boolean onShowFileChooser(
                      WebView webView, ValueCallback&lt;Uri[]&gt; filePathCallback,
                      WebChromeClient.FileChooserParams fileChooserParams) {
                  // Double check that we don't have any existing callbacks
                  if (mFilePathCallbackArray != null) {
                      mFilePathCallbackArray.onReceiveValue(null);
                  }
                  mFilePathCallbackArray = filePathCallback;
                  // Set up the take picture intent
  
                  if (mTypeCap == IMAGE) {
                      Intent takePictureIntent = pictureIntentSetup();
                      return showChooserDialog(takePictureIntent);
                  }
                  //set up video capture intent
                  else {
                      Intent takeVideoIntent = videoIntentSetUp();
                      return showChooserDialog(takeVideoIntent);
                  }
  
              }
  
          });
  
    //For lollypop
      private Intent pictureIntentSetup() {
          Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
  
              // create the file where the photo should go
              File photoFile = null;
              try {
                  photoFile = createImageFile();
                  takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
              } catch (IOException ex) {
                  // Error occurred while creating the File
                  Log.e("Failed", "Unable to create Image File", ex);
              }
  
              // continue only if the file was successfully created
              if (photoFile != null) {
                  mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
                  takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                          Uri.fromFile(photoFile));
              } else {
                  takePictureIntent = null;
              }
          }
          return takePictureIntent;
  
      }
  
      //For lollypop
      private Intent videoIntentSetUp() {
          Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
          if (takeVideoIntent.resolveActivity(getActivity().getPackageManager()) != null) {
  
              // create the file where the video should go
              File videoFile = null;
              try {
                  videoFile = createVideoFile();
                  takeVideoIntent.putExtra("PhotoPath", mCameraPhotoPath);
              } catch (IOException ex) {
                  // Error occurred while creating the File
                  Log.e("Failed", "Unable to create Video File", ex);
              }
  
              // continue only if the file was successfully created
              if (videoFile != null) {
                  mCameraPhotoPath = "file:" + videoFile.getAbsolutePath();
                  takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                          Uri.fromFile(videoFile));
              } else {
                  takeVideoIntent = null;
              }
          }
          return takeVideoIntent;
      }
  
  //For lollypop
      private boolean showChooserDialog(Intent intent) {
          Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
          contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
          if (mTypeCap.equalsIgnoreCase(IMAGE))
              contentSelectionIntent.setType(IMAGE);
          else
              contentSelectionIntent.setType(VIDEO);
  
          Intent[] intentArray;
          if (intent != null) {
              intentArray = new Intent[]{intent};
          } else {
              intentArray = new Intent[0];
          }
  
          Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
          chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
          if (mTypeCap.equalsIgnoreCase(IMAGE))
              chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
          else
              chooserIntent.putExtra(Intent.EXTRA_TITLE, "Video Chooser");
          chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
  
          getActivity().startActivityForResult(chooserIntent, FILE_CHOOSER_RESULT_CODE);
  
          return true;
      }
  </code></pre>
  
  <p>OnActivityResult of the activity:</p>
  
  <pre><code>  @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
    //File upload related
              if (requestCode == NewsDetailFragment.FILE_CHOOSER_RESULT_CODE &amp;&amp; (resultCode == RESULT_OK || resultCode == RESULT_CANCELED)) {
                  Fragment fragment = getSupportFragmentManager()
                          .findFragmentById(R.id.container);
                  if (fragment != null &amp;&amp; fragment instanceof DetailFragment) {
                      Fragment currentFragment = ((DetailFragment) fragment).getCurrentFragment();
                      if (currentFragment instanceof WebDetailFragment)
                          currentFragment.onActivityResult(requestCode, resultCode, data);
                  }
              }
  
          }
  }
  </code></pre>
  
  <p>onActivityResult of fragment:</p>
  
  <pre><code> @Override
      public void onActivityResult(int requestCode, int resultCode, Intent intentData) {
          super.onActivityResult(requestCode, resultCode, intentData);
          // code for all versions except of Lollipop
          if (!Utility.isLollypopAndAbove()) {
              Uri result = null;
              // check that the response is a good one
              if (resultCode == Activity.RESULT_OK) {
                  if (requestCode == FILE_CHOOSER_RESULT_CODE) {
                      if (null == this.mFilePathCallback) {
                          return;
                      }
                      if (null == mFilePathCallback) return;
  
  
                      if (intentData == null) {
                          // if there is not data, then we may have taken a photo
                          if (mCameraPhotoPath != null) {
                              result = Uri.parse(mCameraPhotoPath);
                          }
                      } else {
                          String dataString = intentData.getDataString();
                          if (dataString != null) {
                              result = Uri.parse(dataString);
                          }
                      }
  //                Uri result = intentData == null || resultCode != Activity.RESULT_OK ? null
  //                        : intentData.getData();
  
                  }
  
                  //  for Lollipop only
              }
              mFilePathCallback.onReceiveValue(result);
              mFilePathCallback = null;
          }
          else  {
              Uri[] results = null;
  
              // check that the response is a good one
              if(resultCode==Activity.RESULT_OK) {
                  if (requestCode == FILE_CHOOSER_RESULT_CODE) {
                      if (null == mFilePathCallbackArray) {
                          return;
                      }
                      if (intentData == null) {
                          // if there is not data, then we may have taken a photo
                          if (mCameraPhotoPath != null) {
                              results = new Uri[]{Uri.parse(mCameraPhotoPath)};
                          }
                      } else {
                          String dataString = intentData.getDataString();
                          if (dataString != null) {
                              results = new Uri[]{Uri.parse(dataString)};
                          }
                      }
                  }
              }
              mFilePathCallbackArray.onReceiveValue(results);
              mFilePathCallbackArray = null;
              return;
  
          }
      }
  </code></pre>