diff --git a/doc/fr/index.md b/doc/fr/index.md
index b6f17b0..2a7e761 100644
--- a/doc/fr/index.md
+++ b/doc/fr/index.md
@@ -68,6 +68,14 @@ L'objet `options` contient les options de configuration de l'appareil photo.
- **Type :** `boolean`
- **Valeur par défaut :** `true`
++ **defaultFlash :** Séléctionne un mode par défaut pour le flash.
+ - **Type :** `integer`
+ - **Valeur par défaut :** `0`
+
++ **switchFlash :** Permet d'activer ou non le bouton pour changer le mode du flash. `true` : Active l'option. `false` : Désactive l'option.
+ - **Type :** `boolean`
+ - **Valeur par défaut :** `true`
+
#### *{Function}* onSuccess
La fonction `onSuccess` est appelée lorsque la prise de vue a réussie.
@@ -90,6 +98,18 @@ La fonction `onFail` est appelée lorsque la prise de vue a échouée.
+ **Type :** `string`
+ **Note :** Contient un message détaillant l'erreur.
+## Constantes
+
++ **CustomCamera.FlashModes.DISABLE :**
+ - **Type :** `integer`
+ - **Valeur :** `0`
++ **CustomCamera.FlashModes.ACTIVE :**
+ - **Type :** `integer`
+ - **Valeur :** `1`
++ **CustomCamera.FlashModes.AUTO :**
+ - **Type :** `integer`
+ - **Valeur :** `2`
+
## Implémentation
### Exemple
diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java
index 4b5623c..47908af 100644
--- a/src/android/CameraLauncher.java
+++ b/src/android/CameraLauncher.java
@@ -84,6 +84,9 @@ public class CameraLauncher extends CordovaPlugin {
intent.putExtra("opacity", args.getBoolean(7));
intent.putExtra("startOrientation", this.cordova.getActivity().getResources().getConfiguration().orientation);
+ intent.putExtra("defaultFlash", args.getInt(8));
+ intent.putExtra("switchFlash", args.getBoolean(9));
+
cordova.startActivityForResult((CordovaPlugin) this, intent,
CameraLauncher.REQUEST_CODE);
diff --git a/src/android/customCamera/res/drawable-hdpi/flash.png b/src/android/customCamera/res/drawable-hdpi/flash.png
new file mode 100644
index 0000000..9d408d4
Binary files /dev/null and b/src/android/customCamera/res/drawable-hdpi/flash.png differ
diff --git a/src/android/customCamera/res/drawable-hdpi/flash_auto.png b/src/android/customCamera/res/drawable-hdpi/flash_auto.png
new file mode 100644
index 0000000..cb342f4
Binary files /dev/null and b/src/android/customCamera/res/drawable-hdpi/flash_auto.png differ
diff --git a/src/android/customCamera/res/drawable-hdpi/no_flash.png b/src/android/customCamera/res/drawable-hdpi/no_flash.png
new file mode 100644
index 0000000..037c36e
Binary files /dev/null and b/src/android/customCamera/res/drawable-hdpi/no_flash.png differ
diff --git a/src/android/customCamera/res/layout/activity_camera_view.xml b/src/android/customCamera/res/layout/activity_camera_view.xml
index 6d508c1..146fc05 100644
--- a/src/android/customCamera/res/layout/activity_camera_view.xml
+++ b/src/android/customCamera/res/layout/activity_camera_view.xml
@@ -21,6 +21,15 @@
android:alpha="0.2"
android:scaleType="fitXY" />
+
+
0 : off, 1 : on, 2 : auto.
+ private int stateFlash = 0;
public static final int DEGREE_0 = 0;
public static final int DEGREE_90 = 90;
public static final int DEGREE_180 = 180;
public static final int DEGREE_270 = 270;
+
+ public static final int FLASH_DISABLE = 0;
+ public static final int FLASH_ENABLE = 1;
+ public static final int FLASH_AUTO = 2;
/**
* To get camera resource or stop this activity.
@@ -103,6 +109,11 @@ public class CameraActivity extends Activity {
Button miniature = (Button) findViewById(R.id.miniature);
miniature.setVisibility(View.INVISIBLE);
}
+
+ if (!this.getIntent().getBooleanExtra("switchFlash", true)) {
+ ImageButton flash = (ImageButton)findViewById(R.id.flash);
+ flash.setVisibility(View.INVISIBLE);
+ }
// The opacity bar
SeekBar switchOpacity = (SeekBar) findViewById(R.id.switchOpacity);
@@ -148,7 +159,7 @@ public class CameraActivity extends Activity {
view.performClick();
((CameraActivity) currentActivity).setCameraBackgroundColor(
currentActivity.getIntent().getStringExtra("cameraBackgroundColor"));
- ((CameraActivity) currentActivity).takePhoto();
+ ((CameraActivity) currentActivity).startTakePhoto();
break;
default:
break;
@@ -187,6 +198,10 @@ public class CameraActivity extends Activity {
return;
}
+ stateFlash = this.getIntent().getIntExtra("defaultFlash", CameraActivity.FLASH_DISABLE);
+
+ updateStateFlash(stateFlash);
+
int orientation = 0;
switch (getCustomRotation()) {
case 0:
@@ -283,6 +298,7 @@ public class CameraActivity extends Activity {
}
/** Method to pause the activity. */
+ @Override
protected void onPause() {
super.onPause();
ManagerCamera.clearCameraAccess();
@@ -290,7 +306,10 @@ public class CameraActivity extends Activity {
preview.removeAllViews();
}
- /** Event on touch screen to call the manager of the zoom & the auto focus. */
+ /**
+ * Event on touch screen to call the manager of the zoom & the auto focus.
+ * @return boolean
+ */
@Override
public boolean onTouchEvent(MotionEvent event) {
if (photoTaken == null) {
@@ -306,11 +325,6 @@ public class CameraActivity extends Activity {
customCamera.cancelAutoFocus();
handleZoom(event, paramsCamera, distanceBetweenFingers);
}
- } else {
- // If we touch with one finger -> auto-focus
- if (action == MotionEvent.ACTION_UP) {
- handleFocus(event, paramsCamera);
- }
}
}
@@ -357,7 +371,7 @@ public class CameraActivity extends Activity {
zoom--;
}
}
- distanceBetweenFingers = newDist;
+
paramsCamera.setZoom(zoom);
customCamera.setParameters(paramsCamera);
}
@@ -374,25 +388,6 @@ public class CameraActivity extends Activity {
zoomLevel.setVisibility(View.VISIBLE);
}
- /**
- * Manage the focus.
- * @param event Current event which start this action.
- * @param paramsCamera Camera's parameter.
- */
- public void handleFocus(MotionEvent event, Camera.Parameters paramsCamera) {
- if (photoTaken == null) {
- List supportedFocusModes = paramsCamera.getSupportedFocusModes();
- if (supportedFocusModes != null
- && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {
- customCamera.autoFocus(new Camera.AutoFocusCallback() {
- @Override
- public void onAutoFocus(boolean bool, Camera camera) {
- }
- });
- }
- }
- }
-
/** To set background in the view. */
protected void setBackground() {
// Get the base64 picture for the background only if it's exist.
@@ -457,7 +452,10 @@ public class CameraActivity extends Activity {
}
}
- /** Resize and mask the miniature button. */
+ /**
+ * Resize and mask the miniature button.
+ * @param view
+ */
public void buttonMiniature(View view) {
ImageView background = (ImageView) findViewById(R.id.background);
final Button miniature = (Button) view;
@@ -582,12 +580,27 @@ public class CameraActivity extends Activity {
}
}
+ /**
+ * Start to take photo.
+ */
+ public void startTakePhoto() {
+ ImageButton buttonCapture = (ImageButton)findViewById(R.id.capture);
+ buttonCapture.setEnabled(false);
+ setFlashMode();
+ customCamera.autoFocus(new Camera.AutoFocusCallback() {
+ @Override
+ public void onAutoFocus(boolean bool, Camera camera) {
+ takePhoto();
+ }
+ });
+ }
+
/**
* Method to take picture.
*/
public void takePhoto() {
- ImageButton imgIcon = (ImageButton)findViewById(R.id.capture);
- imgIcon.setEnabled(false);
+ ImageButton flash = (ImageButton)findViewById(R.id.flash);
+ flash.setVisibility(View.INVISIBLE);
// Handles the moment where picture is taken
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
@@ -700,14 +713,11 @@ public class CameraActivity extends Activity {
}
TransferBigData.setImgTaken(stream.toByteArray());
- ImageButton imgIcon = (ImageButton)findViewById(R.id.capture);
- imgIcon.setEnabled(true);
-
+
// Return to success & finish current activity.
cameraActivityCurrent.setResult(1,new Intent());
cameraActivityCurrent.finish();
} catch (IOException e) {
- e.printStackTrace();
}
}
@@ -731,6 +741,15 @@ public class CameraActivity extends Activity {
public void declinePhoto(View view) {
ImageButton imgIcon = (ImageButton)findViewById(R.id.capture);
imgIcon.setEnabled(true);
+
+ if (hasFlash()) {
+ ImageButton flash = (ImageButton)findViewById(R.id.flash);
+ flash.setVisibility(View.VISIBLE);
+ }
+
+ Camera.Parameters params = customCamera.getParameters();
+ params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
+ customCamera.setParameters(params);
photoTaken = null;
displayPicture();
}
@@ -740,6 +759,7 @@ public class CameraActivity extends Activity {
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("modeMiniature", modeMiniature);
outState.putParcelable("photoTaken", photoTaken);
+ outState.putInt("stateFlash", stateFlash);
super.onSaveInstanceState(outState);
}
@@ -748,12 +768,14 @@ public class CameraActivity extends Activity {
protected void onRestoreInstanceState(Bundle savedInstanceState) {
modeMiniature = savedInstanceState.getBoolean("modeMiniature");
photoTaken = savedInstanceState.getParcelable("photoTaken");
+ stateFlash = savedInstanceState.getInt("stateFlash");
if (modeMiniature) {
buttonMiniature(findViewById(R.id.miniature));
}
displayPicture();
+ updateStateFlash(stateFlash);
super.onRestoreInstanceState(savedInstanceState);
}
@@ -781,10 +803,10 @@ public class CameraActivity extends Activity {
}
/**
- * Resize the bitmap saved when you rotate the device.
- *
- * @return the new bitmap.
- */
+ * Resize the bitmap saved when you rotate the device.
+ *
+ * @return the new bitmap.
+ */
protected Bitmap resizePictureTaken() {
// Initialize the new bitmap resized
Bitmap newBitmap = null;
@@ -815,10 +837,10 @@ public class CameraActivity extends Activity {
}
/**
- * Allow to lock the screen or not.
- *
- * @param boolean lock Do we have to lock or not ?
- */
+ * Allow to lock the screen or not.
+ *
+ * @param lock Do we have to lock or not ?
+ */
protected void lockScreen(boolean lock) {
if (lock == false) {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
@@ -868,4 +890,105 @@ public class CameraActivity extends Activity {
this.setResult(3);
this.finish();
}
+
+ /**
+ * Allow to enable or disable the flash of the camera.
+ * @param view The current view.
+ */
+ public void switchFlash(View view) {
+ switch(stateFlash) {
+ case CameraActivity.FLASH_DISABLE:
+ updateStateFlash(CameraActivity.FLASH_ENABLE);
+ break;
+ case CameraActivity.FLASH_ENABLE:
+ updateStateFlash(CameraActivity.FLASH_AUTO);
+ break;
+ case CameraActivity.FLASH_AUTO:
+ updateStateFlash(CameraActivity.FLASH_DISABLE);
+ break;
+ }
+ }
+
+ protected void updateStateFlash(int newStateFlash) {
+ ImageButton flash = (ImageButton)findViewById(R.id.flash);
+ if (hasFlash()) {
+ Camera.Parameters params = customCamera.getParameters();
+ List supportedFlashModes = params.getSupportedFlashModes();
+
+ if (newStateFlash == CameraActivity.FLASH_AUTO
+ && !supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_AUTO)
+ ) {
+ if (stateFlash == CameraActivity.FLASH_ENABLE) {
+ newStateFlash = CameraActivity.FLASH_DISABLE;
+ } else {
+ newStateFlash = CameraActivity.FLASH_ENABLE;
+ }
+ }
+ stateFlash = newStateFlash;
+
+ int imgResource = R.drawable.no_flash;
+ switch(stateFlash) {
+ case CameraActivity.FLASH_DISABLE:
+ imgResource = R.drawable.no_flash;
+ break;
+ case CameraActivity.FLASH_ENABLE:
+ imgResource = R.drawable.flash;
+ break;
+ case CameraActivity.FLASH_AUTO:
+ imgResource = R.drawable.flash_auto;
+ break;
+ }
+
+ flash.setImageResource(imgResource);
+
+ customCamera.setParameters(params);
+ } else {
+ flash.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ protected void setFlashMode() {
+ ImageButton flash = (ImageButton)findViewById(R.id.flash);
+ if (hasFlash()) {
+ String mode = Camera.Parameters.FLASH_MODE_OFF;
+ switch(stateFlash) {
+ case CameraActivity.FLASH_DISABLE:
+ mode = Camera.Parameters.FLASH_MODE_OFF;
+ break;
+ case CameraActivity.FLASH_ENABLE:
+ mode = Camera.Parameters.FLASH_MODE_ON;
+ break;
+ case CameraActivity.FLASH_AUTO:
+ mode = Camera.Parameters.FLASH_MODE_AUTO;
+ break;
+ }
+ Camera.Parameters params = customCamera.getParameters();
+ params.setFlashMode(mode);
+ customCamera.setParameters(params);
+ } else {
+ flash.setVisibility(View.INVISIBLE);
+ }
+ }
+
+ /**
+ * Check if camera has a flash feature.
+ * @return boolean.
+ */
+ public boolean hasFlash() {
+ if (customCamera == null) {
+ return false;
+ }
+
+ Camera.Parameters parameters = customCamera.getParameters();
+
+ if (parameters.getFlashMode() == null) {
+ return false;
+ }
+
+ List supportedFlashModes = parameters.getSupportedFlashModes();
+
+ return !(supportedFlashModes == null || supportedFlashModes.isEmpty() ||
+ (supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF))
+ );
+ }
}
diff --git a/www/customCamera.js b/www/customCamera.js
index d418b8a..b179b79 100644
--- a/www/customCamera.js
+++ b/www/customCamera.js
@@ -7,6 +7,8 @@
// constructor.
function CustomCameraExport() {}
+ CustomCameraExport.prototype.FlashModes = {DISABLE: 0, ACTIVE: 1, AUTO: 2};
+
/**
* Start custom camera.
*
@@ -24,7 +26,9 @@
cameraBackgroundColorPressed: "#dc453d", // color of the pressed camera button.
// To get supported color formats, go to see method parseColor : http://developer.android.com/reference/android/graphics/Color.html#parseColor(java.lang.String)
quality: 100, // picture's quality : range 0 - 100 : http://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat, int, java.io.OutputStream) (parameter "quality")
- opacity: true // active or disable the opacity function.
+ opacity: true, // active or disable the opacity function.
+ defaultFlash: this.FlashModes.DISABLE, // default state for flash. Corrects values = 0 (disable) / 1 (active) / 2 (auto)
+ switchFlash: true // active or disable the switch flash button.
};
for (var nameOption in defaultOptions) {
@@ -54,7 +58,9 @@
options.cameraBackgroundColor,
options.cameraBackgroundColorPressed,
options.quality,
- options.opacity
+ options.opacity,
+ options.defaultFlash,
+ options.switchFlash
]
);
};