mirror of
https://github.com/apache/cordova-plugin-camera.git
synced 2025-01-19 03:42:52 +08:00
Using the CordovaResourceApi to fine paths of files in the background thread. If the file doesn't exist, return the content URI
We also do a refactor to bring this in line. This code got bike-shedded a bit.
This commit is contained in:
parent
2714060b09
commit
44475d9df9
@ -32,6 +32,7 @@ import java.util.Date;
|
|||||||
|
|
||||||
import org.apache.cordova.CallbackContext;
|
import org.apache.cordova.CallbackContext;
|
||||||
import org.apache.cordova.CordovaPlugin;
|
import org.apache.cordova.CordovaPlugin;
|
||||||
|
import org.apache.cordova.CordovaResourceApi;
|
||||||
import org.apache.cordova.LOG;
|
import org.apache.cordova.LOG;
|
||||||
import org.apache.cordova.PluginResult;
|
import org.apache.cordova.PluginResult;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -104,8 +105,7 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect
|
|||||||
private boolean orientationCorrected; // Has the picture's orientation been corrected
|
private boolean orientationCorrected; // Has the picture's orientation been corrected
|
||||||
private boolean allowEdit; // Should we allow the user to crop the image.
|
private boolean allowEdit; // Should we allow the user to crop the image.
|
||||||
|
|
||||||
|
protected final static String[] permissions = { Manifest.permission.READ_EXTERNAL_STORAGE };
|
||||||
|
|
||||||
|
|
||||||
public CallbackContext callbackContext;
|
public CallbackContext callbackContext;
|
||||||
private int numPics;
|
private int numPics;
|
||||||
@ -115,28 +115,11 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect
|
|||||||
private Uri croppedUri;
|
private Uri croppedUri;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This plugin requires read access to the storage.
|
|
||||||
*/
|
|
||||||
|
|
||||||
protected int checkReadStorage()
|
|
||||||
{
|
|
||||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
|
|
||||||
{
|
|
||||||
return cordova.getActivity().checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return PackageManager.PERMISSION_GRANTED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void getReadPermission(int requestCode)
|
protected void getReadPermission(int requestCode)
|
||||||
{
|
{
|
||||||
cordova.requestPermission(this, requestCode, Manifest.permission.READ_EXTERNAL_STORAGE);
|
cordova.requestPermission(this, requestCode, Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the request and returns PluginResult.
|
* Executes the request and returns PluginResult.
|
||||||
*
|
*
|
||||||
@ -241,7 +224,7 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect
|
|||||||
* @param returnType Set the type of image to return.
|
* @param returnType Set the type of image to return.
|
||||||
*/
|
*/
|
||||||
public void callTakePicture(int returnType, int encodingType) {
|
public void callTakePicture(int returnType, int encodingType) {
|
||||||
if (checkReadStorage() == PackageManager.PERMISSION_GRANTED) {
|
if (cordova.hasPermission(permissions[0])) {
|
||||||
takePicture(returnType, encodingType);
|
takePicture(returnType, encodingType);
|
||||||
} else {
|
} else {
|
||||||
getReadPermission(TAKE_PIC_SEC);
|
getReadPermission(TAKE_PIC_SEC);
|
||||||
@ -589,6 +572,21 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException {
|
|||||||
return modifiedPath;
|
return modifiedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We already have shared code to resolve URIs, don't need any more.
|
||||||
|
*/
|
||||||
|
private String getRealFileFromUri(Uri uri)
|
||||||
|
{
|
||||||
|
CordovaResourceApi api = webView.getResourceApi();
|
||||||
|
File f = api.mapUriToFile(uri);
|
||||||
|
if(f != null)
|
||||||
|
return "file://" + f.getAbsolutePath();
|
||||||
|
else
|
||||||
|
return uri.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Applies all needed transformation to the image received from the gallery.
|
* Applies all needed transformation to the image received from the gallery.
|
||||||
*
|
*
|
||||||
@ -607,10 +605,13 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException {
|
|||||||
}
|
}
|
||||||
int rotate = 0;
|
int rotate = 0;
|
||||||
|
|
||||||
|
String fileLocation = getRealFileFromUri(uri);
|
||||||
|
Log.d(LOG_TAG, "File locaton is: " + fileLocation);
|
||||||
|
|
||||||
// If you ask for video or all media type you will automatically get back a file URI
|
// If you ask for video or all media type you will automatically get back a file URI
|
||||||
// and there will be no attempt to resize any returned data
|
// and there will be no attempt to resize any returned data
|
||||||
if (this.mediaType != PICTURE) {
|
if (this.mediaType != PICTURE) {
|
||||||
this.callbackContext.success(uri.toString());
|
this.callbackContext.success(fileLocation);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// This is a special case to just return the path as no scaling,
|
// This is a special case to just return the path as no scaling,
|
||||||
@ -675,7 +676,7 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.callbackContext.success(uri.toString());
|
this.callbackContext.success(fileLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
@ -757,7 +758,13 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException {
|
|||||||
// If retrieving photo from library
|
// If retrieving photo from library
|
||||||
else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) {
|
else if ((srcType == PHOTOLIBRARY) || (srcType == SAVEDPHOTOALBUM)) {
|
||||||
if (resultCode == Activity.RESULT_OK && intent != null) {
|
if (resultCode == Activity.RESULT_OK && intent != null) {
|
||||||
this.processResultFromGallery(destType, intent);
|
final Intent i = intent;
|
||||||
|
final int finalDestType = destType;
|
||||||
|
cordova.getThreadPool().execute(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
processResultFromGallery(finalDestType, i);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else if (resultCode == Activity.RESULT_CANCELED) {
|
else if (resultCode == Activity.RESULT_CANCELED) {
|
||||||
this.failPicture("Selection cancelled.");
|
this.failPicture("Selection cancelled.");
|
||||||
@ -1177,7 +1184,6 @@ private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException {
|
|||||||
break;
|
break;
|
||||||
case SAVE_TO_ALBUM_SEC:
|
case SAVE_TO_ALBUM_SEC:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user