alhussain-m commented on issue #328:
URL: 
https://github.com/apache/cordova-plugin-inappbrowser/issues/328#issuecomment-1897802717

   > > I solve change InAppBrowser plugin. I merged solution on 
https://stackoverflow.com/questions/51168600/webview-open-camera-from-input-field-without-filechooser.
   > > Follow the changes:
   > > See the changes made in InAppBrowser class from plugin version 3.0.0
   > > 1 - include imports:
   > > ```
   > > import android.app.Activity;
   > > import android.os.Environment;
   > > import android.provider.MediaStore;
   > > import android.util.Log;
   > > import java.io.File;
   > > import java.io.IOException;
   > > import java.text.SimpleDateFormat;
   > > import java.util.Date;
   > > ```
   > > 
   > > 
   > >     
   > >       
   > >     
   > > 
   > >       
   > >     
   > > 
   > >     
   > >   
   > > 2 - declare variavel;
   > > ```
   > >     private String mCM;
   > > ```
   > > 
   > > 
   > >     
   > >       
   > >     
   > > 
   > >       
   > >     
   > > 
   > >     
   > >   
   > > 3 - Replace onShowFileChooser code
   > > ```
   > > 
   > >                     // For Android 5.0+
   > >                     public boolean onShowFileChooser (WebView webView, 
ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams 
fileChooserParams)
   > >                     {
   > >                         LOG.d(LOG_TAG, "File Chooser 5.0+");
   > > 
   > >                         // If callback exists, finish it.
   > >                         if(mUploadCallbackLollipop != null) {
   > >                             mUploadCallbackLollipop.onReceiveValue(null);
   > >                         }
   > >                         mUploadCallbackLollipop = filePathCallback;
   > > 
   > >                         Intent takePictureIntent = new 
Intent(MediaStore.ACTION_IMAGE_CAPTURE);
   > > 
   > >                         
if(takePictureIntent.resolveActivity(cordova.getActivity().getPackageManager()) 
!= null) {
   > > 
   > >                             File photoFile = null;
   > >                             try{
   > >                                 photoFile = createImageFile();
   > >                                 takePictureIntent.putExtra("PhotoPath", 
mCM);
   > >                             }catch(IOException ex){
   > >                                 Log.e(LOG_TAG, "Image file creation 
failed", ex);
   > >                             }
   > >                             if(photoFile != null){
   > >                                 mCM = "file:" + 
photoFile.getAbsolutePath();
   > >                                 
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
   > >                             }else{
   > >                                 takePictureIntent = null;
   > >                             }
   > >                         }
   > >                         // Create File Chooser Intent
   > >                         Intent contentSelectionIntent = new 
Intent(Intent.ACTION_GET_CONTENT);
   > >                         
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
   > >                         contentSelectionIntent.setType("*/*");
   > >                         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, 
"Selecione a imagem");
   > >                         
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
   > > 
   > >                         // Run cordova startActivityForResult
   > >                         
cordova.startActivityForResult(InAppBrowser.this, chooserIntent, 
FILECHOOSER_REQUESTCODE);
   > > 
   > >                         return true;
   > >                     }
   > > ```
   > > 
   > > 
   > >     
   > >       
   > >     
   > > 
   > >       
   > >     
   > > 
   > >     
   > >   
   > > 4 - create method
   > > ```
   > > 
   > >     private File createImageFile() throws IOException{
   > >         @SuppressLint("SimpleDateFormat") String timeStamp = new 
SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
   > >         String imageFileName = "img_"+timeStamp+"_";
   > >         File storageDir = 
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
   > >         return File.createTempFile(imageFileName,".jpg",storageDir);
   > >     }
   > > ```
   > > 
   > > 
   > >     
   > >       
   > >     
   > > 
   > >       
   > >     
   > > 
   > >     
   > >   
   > > 5 - Replace onActivityResult
   > > ```
   > > 
   > >     public void onActivityResult(int requestCode, int resultCode, Intent 
intent) {
   > >         // For Android >= 5.0
   > >         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   > > 
   > >             LOG.d(LOG_TAG, "onActivityResult (For Android >= 5.0)");
   > > 
   > >             Uri[] results = null;
   > >             //Check if response is positive
   > >             if(resultCode== Activity.RESULT_OK){
   > >                 if(requestCode == FILECHOOSER_REQUESTCODE){
   > >                     if(null == mUploadCallbackLollipop){
   > >                         return;
   > >                     }
   > >                     if(intent == null || intent.getData() == null){
   > >                         //Capture Photo if no image available
   > >                         if(mCM != null){
   > >                             results = new Uri[]{Uri.parse(mCM)};
   > >                         }
   > >                     }else{
   > >                         String dataString = intent.getDataString();
   > >                         if(dataString != null){
   > >                             results = new Uri[]{Uri.parse(dataString)};
   > >                         }
   > >                     }
   > >                 }
   > >             }
   > >             mUploadCallbackLollipop .onReceiveValue(results);
   > >             mUploadCallbackLollipop = null;
   > >         }
   > >         // For Android < 5.0
   > >         else {
   > >             LOG.d(LOG_TAG, "onActivityResult (For Android < 5.0)");
   > >             // If RequestCode or Callback is Invalid
   > >             if(requestCode != FILECHOOSER_REQUESTCODE || mUploadCallback 
== null) {
   > >                 super.onActivityResult(requestCode, resultCode, intent);
   > >                 return;
   > >             }
   > > 
   > >             if (null == mUploadCallback) return;
   > >             Uri result = intent == null || resultCode != 
cordova.getActivity().RESULT_OK ? null : intent.getData();
   > > 
   > >             mUploadCallback.onReceiveValue(result);
   > >             mUploadCallback = null;
   > >         }
   > >     }
   > > ```
   > > 
   > > 
   > >     
   > >       
   > >     
   > > 
   > >       
   > >     
   > > 
   > >     
   > >   
   > > 
https://stackoverflow.com/questions/26381050/choose-camera-in-file-upload-in-cordova-application-on-android-without-using-cor/54425770#54425770
   > 
   > you are the best :D
   
   Hey team, just gave the InAppBrowser plugin a spin for PWA, Android, and iOS 
builds. Looks like the changes impacted IOS InAppBrowser functionalities, and 
for Android, it doesn't seem like we've cracked it yet. Any ideas? 🕵️‍♂️


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to