diff --git a/plugin.xml b/plugin.xml
index e19ae37..02a32e6 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -64,10 +64,7 @@
-
-
-
-
+
diff --git a/src/Android/Library/src/MultiImageChooserActivity.java b/src/Android/Library/src/MultiImageChooserActivity.java
index a7d0b3b..94aadbd 100644
--- a/src/Android/Library/src/MultiImageChooserActivity.java
+++ b/src/Android/Library/src/MultiImageChooserActivity.java
@@ -146,7 +146,7 @@ public class MultiImageChooserActivity extends Activity implements OnItemClickLi
}
private void setupHeader() {
- // From Roman Nurik's code
+ // From Roman Nkk's code
// https://plus.google.com/113735310430199015092/posts/R49wVvcDoEW
// Inflate a "Done/Discard" custom action bar view.
LayoutInflater inflater = (LayoutInflater) getActionBar().getThemedContext().getSystemService(
@@ -280,7 +280,6 @@ public class MultiImageChooserActivity extends Activity implements OnItemClickLi
if (fileNames.isEmpty()) {
this.setResult(RESULT_CANCELED);
} else {
-
ArrayList al = new ArrayList();
al.addAll(fileNames);
Bundle res = new Bundle();
diff --git a/src/Android/com/synconset/ImagePicker/ImagePicker.java b/src/Android/com/synconset/ImagePicker/ImagePicker.java
index 46ac0bf..c72a0d0 100644
--- a/src/Android/com/synconset/ImagePicker/ImagePicker.java
+++ b/src/Android/com/synconset/ImagePicker/ImagePicker.java
@@ -1,5 +1,9 @@
/**
- * An Internal Storage Plugin for Cordova/PhoneGap.
+ * An Image Picker Plugin for Cordova/PhoneGap.
+ *
+ * The software is open source, MIT Licensed.
+ * Portions taken from Copyright (C) 2012, webXells GmbH All Rights Reserved.
+ *
*/
package com.synconset;
@@ -12,19 +16,30 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.OutputStream;
import android.app.Activity;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
+import android.net.Uri;
import android.util.Log;
public class ImagePicker extends CordovaPlugin {
+ public static String TAG = "ImagePicker";
+
+ private CallbackContext callbackContext;
+ private JSONObject params;
public boolean execute(String action, final JSONArray args, final CallbackContext callbackContext) throws JSONException {
+ this.callbackContext = callbackContext;
+ this.params = args.getJSONObject(0);
if (action.equals("getPictures")) {
Intent intent = new Intent(cordova.getActivity(), MultiImageChooserActivity.class);
- intent.putExtra("MAX_IMAGES", 20);
-
+ intent.putExtra("MAX_IMAGES", this.params.getInt("maximumImagesCount"));
if (this.cordova != null) {
this.cordova.startActivityForResult((CordovaPlugin) this, intent, 0);
}
@@ -33,12 +48,88 @@ public class ImagePicker extends CordovaPlugin {
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- Log.d("PLUGIN", "result code = " + resultCode);
- if (resultCode == 1 && data != null) {
- ArrayList fileNames = data.getStringArrayListExtra("MULTIPLEFILNAMES");
- for (int i = 0; i < fileNames.size(); i++) {
- Log.d("PLUGIN", fileNames.get(i));
- }
+ if (resultCode == Activity.RESULT_OK && data != null) {
+ ArrayList fileNames = data.getStringArrayListExtra("MULTIPLEFILENAMES");
+ JSONArray res = new JSONArray();
+ try {
+ for (int i = 0; i < fileNames.size(); i++) {
+ File file = new File(fileNames.get(i));
+ Bitmap bmp = this.getBitmap(file);
+ int width = bmp.getWidth();
+ int height = bmp.getHeight();
+ int desiredWidth = this.params.getInt("width");
+ int desiredHeight = this.params.getInt("height");
+ float widthScale = 1.0f;
+ float heightScale = 1.0f;
+ if (desiredWidth > 0 || desiredHeight > 0) {
+ if (desiredHeight == 0 && desiredWidth < width) {
+ widthScale = (float)desiredWidth/width;
+ heightScale = widthScale;
+ } else if (desiredWidth == 0 && desiredHeight < height) {
+ heightScale = (float)desiredHeight/height;
+ widthScale = heightScale;
+ } else {
+ if (desiredWidth > 0 && desiredWidth < width) {
+ widthScale = (float)desiredWidth/width;
+ }
+ if (desiredHeight > 0 && desiredHeight < height) {
+ heightScale = (float)desiredHeight/height;
+ }
+ }
+ }
+ if (widthScale < 1 || heightScale < 1) {
+ bmp = this.getResizedBitmap(bmp, widthScale, heightScale);
+ }
+ file = this.storeImage(bmp, file.getName());
+ res.put(Uri.fromFile(file).toString());
+ }
+ this.callbackContext.success(res);
+ } catch(IOException e) {
+ this.callbackContext.error("There was an error importing pictures");
+ } catch (JSONException e) {
+ this.callbackContext.error("There was an error importing pictures");
+ }
+ } else {
+ this.callbackContext.error("No images selected");
}
}
-}
+
+ private File storeImage(Bitmap bmp, String fileName) throws JSONException, IOException {
+ int quality = this.params.getInt("quality");
+ int index = fileName.lastIndexOf('.');
+ String name = fileName.substring(0, index);
+ String ext = fileName.substring(index);
+ File file = File.createTempFile(name, ext);
+ OutputStream outStream = new FileOutputStream(file);
+ if (ext.compareToIgnoreCase(".png") == 0) {
+ bmp.compress(Bitmap.CompressFormat.PNG, quality, outStream);
+ } else {
+ bmp.compress(Bitmap.CompressFormat.JPEG, quality, outStream);
+ }
+ outStream.flush();
+ outStream.close();
+ return file;
+ }
+
+ private Bitmap getResizedBitmap(Bitmap bm, float widthFactor, float heightFactor) {
+ int width = bm.getWidth();
+ int height = bm.getHeight();
+ // create a matrix for the manipulation
+ Matrix matrix = new Matrix();
+ // resize the bit map
+ matrix.postScale(widthFactor, heightFactor);
+ // recreate the new Bitmap
+ Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height,
+ matrix, false);
+ return resizedBitmap;
+ }
+
+ private Bitmap getBitmap(File file) throws IOException {
+ Bitmap bmp;
+ bmp = BitmapFactory.decodeFile(file.getAbsolutePath());
+ if (bmp == null) {
+ throw new IOException("The image file could not be opened.");
+ }
+ return bmp;
+ }
+}
\ No newline at end of file