iOS & Android fix and upgrade

iOS:
- x86_64 header fixing
- sight adding

Android:
- Bug fix no params NullPointerException
- sight adding
This commit is contained in:
PaoloMessina 2014-12-22 14:59:52 +01:00
parent 0f8fe5b1f7
commit 76246b80ed
5 changed files with 126 additions and 38 deletions

View File

@ -27,6 +27,7 @@ Arguments:
text_instructions: "OPTIONAL Instruction Text - default = 'Please point your camera at the QR code.'", // Android only text_instructions: "OPTIONAL Instruction Text - default = 'Please point your camera at the QR code.'", // Android only
camera: "front" || "back" // defaults to "back" camera: "front" || "back" // defaults to "back"
flash: "on" || "off" || "auto" // defaults to "auto". See Quirks flash: "on" || "off" || "auto" // defaults to "auto". See Quirks
drawSight : "true" || "false" //default use true, create a red/green sight to center barcode
} }
``` ```

View File

@ -8,6 +8,10 @@ import org.json.JSONObject;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.drawable.ShapeDrawable;
import android.hardware.Camera; import android.hardware.Camera;
import android.hardware.Camera.CameraInfo; import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.PreviewCallback; import android.hardware.Camera.PreviewCallback;
@ -18,8 +22,12 @@ import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView; import android.widget.TextView;
import net.sourceforge.zbar.ImageScanner; import net.sourceforge.zbar.ImageScanner;
@ -54,6 +62,16 @@ implements SurfaceHolder.Callback {
String whichCamera; String whichCamera;
String flashMode; String flashMode;
/* START - ALMAVIVA */
RelativeLayout relativeLayout;
RelativeLayout line;
View parent;
int width;
int height;
boolean drawSight = false;
/* END - ALMAVIVA */
// For retrieving R.* resources, from the actual app package // For retrieving R.* resources, from the actual app package
// (we can't use actual.application.package.R.* in our code as we // (we can't use actual.application.package.R.* in our code as we
// don't know the applciation package name when writing this plugin). // don't know the applciation package name when writing this plugin).
@ -69,6 +87,9 @@ implements SurfaceHolder.Callback {
// Activity Lifecycle ---------------------------------------------- // Activity Lifecycle ----------------------------------------------
/* (non-Javadoc)
* @see android.app.Activity#onCreate(android.os.Bundle)
*/
@Override @Override
public void onCreate (Bundle savedInstanceState) public void onCreate (Bundle savedInstanceState)
{ {
@ -84,6 +105,7 @@ implements SurfaceHolder.Callback {
String textInstructions = params.optString("text_instructions"); String textInstructions = params.optString("text_instructions");
whichCamera = params.optString("camera"); whichCamera = params.optString("camera");
flashMode = params.optString("flash"); flashMode = params.optString("flash");
drawSight = params.optString("drawSight") != null ? Boolean.valueOf(params.optString("drawSight").toLowerCase()) : false;
// Initiate instance variables // Initiate instance variables
autoFocusHandler = new Handler(); autoFocusHandler = new Handler();
@ -120,6 +142,65 @@ implements SurfaceHolder.Callback {
((FrameLayout) findViewById(getResourceId("id/csZbarScannerView"))).addView(scannerSurface); ((FrameLayout) findViewById(getResourceId("id/csZbarScannerView"))).addView(scannerSurface);
findViewById(getResourceId("id/csZbarScannerTitle")).bringToFront(); findViewById(getResourceId("id/csZbarScannerTitle")).bringToFront();
findViewById(getResourceId("id/csZbarScannerInstructions")).bringToFront(); findViewById(getResourceId("id/csZbarScannerInstructions")).bringToFront();
/* START - ALMAVIVA */
// Creating a new RelativeLayout
if(drawSight){
relativeLayout = new RelativeLayout(this);
line = new RelativeLayout(this);
// Defining the RelativeLayout layout parameters.
// In this case I want to fill its parent
parent = ((FrameLayout) findViewById(getResourceId("id/csZbarScannerView")));
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Ensure you call it only once :
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
width = parent.getWidth();
height = parent.getHeight();
double dim = width < height ? (width / 1.2) : (height / 1.2);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams((int)dim,(int)dim);
rlp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
rlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
rlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
relativeLayout.setGravity(Gravity.CENTER);
relativeLayout.setLayoutParams(rlp);
relativeLayout.invalidate();
relativeLayout.requestLayout();
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(((int)dim - 16),8);
lp.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
lp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
lp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
line.setGravity(Gravity.CENTER);
line.setLayoutParams(lp);
line.setBackgroundColor(Color.RED);
line.invalidate();
line.requestLayout();
}
});
ShapeDrawable rectShapeDrawable = new ShapeDrawable(); // pre defined class
// get paint
Paint paint = rectShapeDrawable.getPaint();
// set border color, stroke and stroke width
paint.setColor(Color.GREEN);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(8); // you can change the value of 5
relativeLayout.setBackgroundDrawable(rectShapeDrawable);
relativeLayout.addView(line);
((RelativeLayout) findViewById(getResourceId("id/csZbarScannerViewContainer"))).addView(relativeLayout);
}
/* END - ALMAVIVA */
} }
@Override @Override

View File

@ -1,5 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/csZbarScannerViewContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/csZbarScannerView" android:id="@+id/csZbarScannerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@ -34,5 +39,6 @@
android:background="@color/csZbarScannerTextBackground" android:background="@color/csZbarScannerTextBackground"
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:text="@string/csZbarScannerInstructions" /> android:text="@string/csZbarScannerInstructions" />
</FrameLayout>
</FrameLayout> </RelativeLayout>

View File

@ -61,8 +61,8 @@
} }
// Hack to hide the bottom bar's Info button... http://stackoverflow.com/a/16353530 // Hack to hide the bottom bar's Info button... http://stackoverflow.com/a/16353530
UIView *infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3]; //UIView *infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3];
[infoButton setHidden:YES]; //[infoButton setHidden:YES];
[self.viewController presentModalViewController: self.scanReader animated: YES]; [self.viewController presentModalViewController: self.scanReader animated: YES];
} }

Binary file not shown.