Filechooser code seems to be a little off.

We have been working on getting the file chooser code to work and there seems to be something wrong in the code, but we just can’t pin it down. Here is the code we are working with. What could the issue be? This is the MainActivity.java.The result we are trying to achieve it to load a webpage in the app and have the file chooser work work. There are fields in the website where users can choose to upload photos to their profile and for them to be able to do that, we need to get the file chooser to work so they can choose files from their phone to upload. Any help would be greatly appreciated.

<code> import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.Parcelable; import android.provider.MediaStore; import android.util.Log; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.graphics.Bitmap; import android.view.View; import android.widget.ProgressBar; import android.widget.Toast;  import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date;  public class MainActivity extends AppCompatActivity {  String ShowOrHideWebViewInitialUse = "show"; private WebView webview ; private ProgressBar spinner; private static final int INPUT_FILE_REQUEST_CODE = 1; private static final int FILECHOOSER_RESULTCODE = 1; private static final String TAG = MainActivity.class.getSimpleName(); private WebSettings webSettings; private ValueCallback<Uri> mUploadMessage; private Uri mCapturedImageURI = null; private ValueCallback<Uri[]> mFilePathCallback; private String mCameraPhotoPath;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      webview =(WebView)findViewById(R.id.webView);     webSettings = webview.getSettings();     spinner = (ProgressBar)findViewById(R.id.progressBar1);     webview.setWebViewClient(new CustomWebViewClient());      webview.getSettings().setJavaScriptEnabled(true);     webSettings.setLoadWithOverviewMode(true);     webSettings.setAllowFileAccess(true);     webview.setWebViewClient(new WebViewClient());     webview.setWebChromeClient(new WebChromeClient());     webview.getSettings().setDomStorageEnabled(true);     webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);     if (Build.VERSION.SDK_INT >= 19) {         webview.setLayerType(View.LAYER_TYPE_HARDWARE, null);     }     else if(Build.VERSION.SDK_INT >=11 && Build.VERSION.SDK_INT < 19) {         webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);     }     webview.loadUrl("https://www.ziing.com");  } private File createImageFile() throws IOException {     // Create an image file name     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());     String imageFileName = "JPEG_" + timeStamp + "_";     File storageDir = Environment.getExternalStoragePublicDirectory(             Environment.DIRECTORY_PICTURES);     File imageFile = File.createTempFile(             imageFileName,  /* prefix */             ".jpg",         /* suffix */             storageDir      /* directory */     );     return imageFile; } // This allows for a splash screen // (and hide elements once the page loads) private class CustomWebViewClient extends WebViewClient {     // For Android 5.0     public boolean onShowFileChooser(WebView view, ValueCallback<Uri[]>  filePath, WebChromeClient.FileChooserParams fileChooserParams) {         // Double check that we don't have any existing callbacks         if (mFilePathCallback != null) {             mFilePathCallback.onReceiveValue(null);         }         mFilePathCallback = filePath;         Intent takePictureIntent = new  Intent(MediaStore.ACTION_IMAGE_CAPTURE);         if (takePictureIntent.resolveActivity(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(TAG, "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;             }         }         Intent contentSelectionIntent = new  Intent(Intent.ACTION_GET_CONTENT);         contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);         contentSelectionIntent.setType("image/*");         Intent[] intentArray;         if (takePictureIntent != null) {             intentArray = new Intent[]{takePictureIntent};         } else {             intentArray = new Intent[0];         }         Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);         chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);         chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");         chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);         startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);         return true;     }      @Override     public void onPageStarted(WebView webview, String url, Bitmap favicon) {          // only make it invisible the FIRST time the app is run         if (ShowOrHideWebViewInitialUse.equals("show")) {             webview.setVisibility(webview.INVISIBLE);         }     }      @Override     public void onPageFinished(WebView view, String url) {          ShowOrHideWebViewInitialUse = "hide";         spinner.setVisibility(View.GONE);          view.setVisibility(webview.VISIBLE);         super.onPageFinished(view, url);      } }  @Override public void onActivityResult(int requestCode, int resultCode, Intent data) {     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {         if (requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback ==  null) {             super.onActivityResult(requestCode, resultCode, data);             return;         }         Uri[] results = null;         // Check that the response is a good one         if (resultCode == Activity.RESULT_OK) {             if (data == 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 = data.getDataString();                 if (dataString != null) {                     results = new Uri[]{Uri.parse(dataString)};                 }             }         }         mFilePathCallback.onReceiveValue(results);         mFilePathCallback = null;     } else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {         if (requestCode != FILECHOOSER_RESULTCODE || mUploadMessage == null)  {             super.onActivityResult(requestCode, resultCode, data);             return;         }         if (requestCode == FILECHOOSER_RESULTCODE) {             if (null == this.mUploadMessage) {                 return;             }             Uri result = null;             try {                 if (resultCode != RESULT_OK) {                     result = null;                 } else {                     // retrieve from the private variable if the intent is  null                     result = data == null ? mCapturedImageURI :  data.getData();                 }             } catch (Exception e) {                 Toast.makeText(getApplicationContext(), "activity :" + e,                         Toast.LENGTH_LONG).show();             }             mUploadMessage.onReceiveValue(result);             mUploadMessage = null;         }     }     return; } // openFileChooser for Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType)  {     mUploadMessage = uploadMsg;     // Create AndroidExampleFolder at sdcard     // Create AndroidExampleFolder at sdcard     File imageStorageDir = new File(             Environment.getExternalStoragePublicDirectory(                     Environment.DIRECTORY_PICTURES)             , "AndroidExampleFolder");     if (!imageStorageDir.exists()) {         // Create AndroidExampleFolder at sdcard         imageStorageDir.mkdirs();     }     // Create camera captured image file path and name     File file = new File(             imageStorageDir + File.separator + "IMG_"                     + String.valueOf(System.currentTimeMillis())                     + ".jpg");     mCapturedImageURI = Uri.fromFile(file);     // Camera capture image intent     final Intent captureIntent = new Intent(             android.provider.MediaStore.ACTION_IMAGE_CAPTURE);     captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);     Intent i = new Intent(Intent.ACTION_GET_CONTENT);     i.addCategory(Intent.CATEGORY_OPENABLE);     i.setType("image/*");     // Create file chooser intent     Intent chooserIntent = Intent.createChooser(i, "Image Chooser");     // Set camera intent to file chooser     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS             , new Parcelable[] { captureIntent });     // On select image call onActivityResult method of activity     startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); } // openFileChooser for Android < 3.0 public void openFileChooser(ValueCallback<Uri> uploadMsg) {     openFileChooser(uploadMsg, ""); } //openFileChooser for other Android versions public void openFileChooser(ValueCallback<Uri> uploadMsg,                             String acceptType,                             String capture) {     openFileChooser(uploadMsg, acceptType); }   public boolean onKeyDown(int keyCode, KeyEvent event) {     if (event.getAction() == KeyEvent.ACTION_DOWN) {         switch (keyCode) {             case KeyEvent.KEYCODE_BACK:                 if (webview.canGoBack()) {                     webview.goBack();                 } else {                     finish();                 }                 return true;         }      }     return super.onKeyDown(keyCode, event); } public class Client extends WebViewClient {     ProgressDialog progressDialog;     public boolean shouldOverrideUrlLoading(WebView view, String url) {         // If url contains mailto link then open Mail Intent         if (url.contains("mailto:")) {             // Could be cleverer and use a regex             //Open links in new browser             view.getContext().startActivity(                     new Intent(Intent.ACTION_VIEW, Uri.parse(url)));             // Here we can open new activity             return true;         } else {             // Stay within this webview and load url             view.loadUrl(url);             return true;         }     }     //Show loader on url load     public void onPageStarted(WebView view, String url, Bitmap favicon) {         // Then show progress  Dialog         // in standard case YourActivity.this         if (progressDialog == null) {             progressDialog = new ProgressDialog(MainActivity.this);             progressDialog.setMessage("Loading...");             progressDialog.show();         }     }     // Called when all page resources loaded     public void onPageFinished(WebView view, String url) {         try {             // Close progressDialog             if (progressDialog.isShowing()) {                 progressDialog.dismiss();                 progressDialog = null;             }         } catch (Exception exception) {             exception.printStackTrace();         }     } }