From eebbc0d2257286abdca7631a1a924755f9bb3be9 Mon Sep 17 00:00:00 2001 From: Christophe BOUCAUT Date: Fri, 21 Nov 2014 15:50:38 +0100 Subject: [PATCH] - Refacto & comments code. - Normalisation error message for js. - Manage back button. - Managa unavailable camera. --- hooks/before_build/generateActivity.js | 28 +- plugin.xml | 2 +- src/android/CameraLauncher.java | 71 +++- src/android/customCamera/AndroidManifest.xml | 4 +- .../res/layout/activity_camera_view.xml | 7 +- .../customCamera/res/menu/camera_view.xml | 11 - .../customCamera/res/values/strings.xml | 2 +- .../geneanet/customcamera/CameraActivity.java | 399 ++++++++++++++++++ .../geneanet/customcamera/CameraPreview.java | 65 +-- .../org/geneanet/customcamera/CameraView.java | 367 ---------------- .../geneanet/customcamera/CustomCamera.java | 44 -- .../geneanet/customcamera/MainActivity.java | 49 +-- .../geneanet/customcamera/ManagerCamera.java | 52 +++ .../customcamera/VerticalSeekBar.java | 92 ++-- www/customCamera.js | 18 +- 15 files changed, 643 insertions(+), 568 deletions(-) delete mode 100644 src/android/customCamera/res/menu/camera_view.xml create mode 100644 src/android/customCamera/src/org/geneanet/customcamera/CameraActivity.java delete mode 100644 src/android/customCamera/src/org/geneanet/customcamera/CameraView.java delete mode 100644 src/android/customCamera/src/org/geneanet/customcamera/CustomCamera.java create mode 100644 src/android/customCamera/src/org/geneanet/customcamera/ManagerCamera.java diff --git a/hooks/before_build/generateActivity.js b/hooks/before_build/generateActivity.js index 70fbf94..de5f0dc 100644 --- a/hooks/before_build/generateActivity.js +++ b/hooks/before_build/generateActivity.js @@ -31,14 +31,14 @@ var generatePathFrompackageName = function(packageName) { * @param {string} packageName Package name of the current application. */ var createClasses = function(packageName) { - var pathCameraView = pathAndroidPlugin+"customCamera/src/org/geneanet/customcamera/CameraView.java"; + var pathCameraActivity = pathAndroidPlugin+"customCamera/src/org/geneanet/customcamera/CameraActivity.java"; var pathCameraLauncher = pathAndroidPlugin+"CameraLauncher.java"; - if (fs.existsSync(pathCameraView) && fs.existsSync(pathCameraLauncher)) { - // Rewrite package of CameraView class. - var contentCameraView = fs.readFileSync(pathCameraView, {encoding: "utf8"}); - contentCameraView = contentCameraView.replace(/^package\s[^;]*/,"package "+packageName); - fs.writeFileSync(pathAndroidCordova+"src/"+generatePathFrompackageName(packageName)+"/CameraView.java", contentCameraView); + if (fs.existsSync(pathCameraActivity) && fs.existsSync(pathCameraLauncher)) { + // Rewrite package of CameraActivity class. + var contentCameraActivity = fs.readFileSync(pathCameraActivity, {encoding: "utf8"}); + contentCameraActivity = contentCameraActivity.replace(/^package\s[^;]*/,"package "+packageName); + fs.writeFileSync(pathAndroidCordova+"src/"+generatePathFrompackageName(packageName)+"/CameraActivity.java", contentCameraActivity); // Rewrite import of CameraLauncher class. var contentCameraLauncher = fs.readFileSync(pathCameraLauncher, {encoding: "utf8"}); @@ -48,7 +48,7 @@ var createClasses = function(packageName) { contentCameraLauncher ); } else { - console.error("File CameraView.java or/and CameraLauncher.java not found."); + console.error("File CameraActivity.java or/and CameraLauncher.java not found."); process.exit(1); } } @@ -71,15 +71,15 @@ var updateAndroidManifest = function(packageName) { var needAddActivity = true; var currentActivities = contentAndroidManifest["manifest"]["application"][0]["activity"]; for (var i = currentActivities.length - 1; i >= 0; i--) { - if (currentActivities[i]["$"]["android:name"] == "CameraView") { + if (currentActivities[i]["$"]["android:name"] == "CameraActivity") { needAddActivity = false; } }; if (needAddActivity) { contentAndroidManifest["manifest"]["application"][0]["activity"].push({ $: { - "android:name": "CameraView", - "android:label": "CameraView", + "android:name": "CameraActivity", + "android:label": "CameraActivity", } }) var newXmlAndroidManifest = builder.buildObject(contentAndroidManifest); @@ -100,7 +100,7 @@ var updateAndroidManifest = function(packageName) { var updateConfig = function() { var pathLayoutCordova = pathResAndroidCordova+"layout/"; var pathLayoutPlugin = pathAndroidPlugin+"customCamera/res/layout/"; - var pathLayoutCameraView = pathLayoutPlugin+"activity_camera_view.xml"; + var pathLayoutCameraActivity = pathLayoutPlugin+"activity_camera_view.xml"; // create directory layout in cordova if it doesn't exist. if (!fs.existsSync(pathLayoutCordova)) { @@ -108,10 +108,10 @@ var updateConfig = function() { } // "copy" layout for camera. - if (fs.existsSync(pathLayoutCameraView)) { - var layoutCameraViewContent = fs.readFileSync(pathLayoutCameraView, {encoding: "utf8"}); + if (fs.existsSync(pathLayoutCameraActivity)) { + var layoutCameraActivityContent = fs.readFileSync(pathLayoutCameraActivity, {encoding: "utf8"}); - fs.writeFileSync(pathLayoutCordova+"activity_camera_view.xml", layoutCameraViewContent); + fs.writeFileSync(pathLayoutCordova+"activity_camera_view.xml", layoutCameraActivityContent); } else { console.error("File activity_camera_view.xml in plugin not found."); process.exit(1); diff --git a/plugin.xml b/plugin.xml index 50b1429..66adcbc 100644 --- a/plugin.xml +++ b/plugin.xml @@ -27,7 +27,7 @@ - + diff --git a/src/android/CameraLauncher.java b/src/android/CameraLauncher.java index cbaff6f..7d6d34f 100644 --- a/src/android/CameraLauncher.java +++ b/src/android/CameraLauncher.java @@ -1,11 +1,12 @@ package org.geneanet.customcamera; -import XXX_NAME_CURRENT_PACKAGE_XXX.CameraView; +import XXX_NAME_CURRENT_PACKAGE_XXX.CameraActivity; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CallbackContext; import org.apache.cordova.PluginResult; import org.json.JSONArray; import org.json.JSONException; +import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; @@ -22,17 +23,23 @@ public class CameraLauncher extends CordovaPlugin { protected CallbackContext callbackContext; + protected static final int RESULT_SUCCESS = 1; + protected static final int RESULT_ERROR = 2; + protected static final int RESULT_BACK = 3; + + protected static final int REQUEST_CODE = 88224646; + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("startCamera")) { this.callbackContext = callbackContext; - Intent intent = new Intent(this.cordova.getActivity(), CameraView.class); + Intent intent = new Intent(this.cordova.getActivity(), CameraActivity.class); Bundle imgBackgroundBase64 = new Bundle(); imgBackgroundBase64.putString("imgBackgroundBase64", args.getString(0)); intent.putExtras(imgBackgroundBase64); - cordova.startActivityForResult((CordovaPlugin) this, intent, 123456789); + cordova.startActivityForResult((CordovaPlugin) this, intent, CameraLauncher.REQUEST_CODE); return true; } @@ -41,19 +48,41 @@ public class CameraLauncher extends CordovaPlugin { } public void onActivityResult(int requestCode, int resultCode, Intent intent) { - if (requestCode == 123456789 && resultCode == 1) { - String pathPicture = intent.getStringExtra("pathPicture"); - // Log.d("customCamera", pathPicture); - try { - File fl = new File(pathPicture); - byte[] ret = loadFile(fl); + if (requestCode == CameraLauncher.REQUEST_CODE) { + switch (resultCode) + { + case CameraLauncher.RESULT_ERROR: + this.callbackContext.error( + generateError( + CameraLauncher.RESULT_ERROR, + intent.getStringExtra("errorMessage") + ) + ); + break; + case CameraLauncher.RESULT_BACK: + this.callbackContext.error( + generateError( + CameraLauncher.RESULT_BACK, + "Error because back camera." + ) + ); + break; + case CameraLauncher.RESULT_SUCCESS: + String pathPicture = intent.getStringExtra("pathPicture"); + try { + File fl = new File(pathPicture); + byte[] ret = loadFile(fl); - byte[] output = Base64.encode(ret, Base64.NO_WRAP); - String js_out = new String(output); - - this.callbackContext.success(js_out); - } catch (Exception e) { - this.callbackContext.error("Error to get content file."); + byte[] output = Base64.encode(ret, Base64.NO_WRAP); + String js_out = new String(output); + + this.callbackContext.success(js_out); + } catch (Exception e) { + this.callbackContext.error("Error to get content file."); + } + break; + default: + this.callbackContext.error("Camera has crashed."); } } } @@ -78,4 +107,16 @@ public class CameraLauncher extends CordovaPlugin { is.close(); return bytes; } + + protected JSONObject generateError(int code, String message) { + JSONObject resultForPlugin = new JSONObject(); + try { + resultForPlugin.put("code", code); + resultForPlugin.put("message", message); + } catch (JSONException e) { + e.printStackTrace(); + } + + return resultForPlugin; + } } diff --git a/src/android/customCamera/AndroidManifest.xml b/src/android/customCamera/AndroidManifest.xml index 0e184ba..6e06d54 100644 --- a/src/android/customCamera/AndroidManifest.xml +++ b/src/android/customCamera/AndroidManifest.xml @@ -28,8 +28,8 @@ diff --git a/src/android/customCamera/res/layout/activity_camera_view.xml b/src/android/customCamera/res/layout/activity_camera_view.xml index 8fbbed4..b4536a7 100644 --- a/src/android/customCamera/res/layout/activity_camera_view.xml +++ b/src/android/customCamera/res/layout/activity_camera_view.xml @@ -83,17 +83,18 @@ android:layout_height="wrap_content" android:layout_gravity="bottom" android:alpha="0.6" - android:background="@color/black" > + android:background="@color/black" + android:visibility="invisible" >