aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Android_Studio
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Android_Studio')
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/cpp/native-lib.cpp46
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java59
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java5
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java1
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/opencv/ImageProcessor.java2
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java176
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java110
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java12
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java125
-rw-r--r--Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml32
10 files changed, 289 insertions, 279 deletions
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/cpp/native-lib.cpp b/Software/Android_Studio/ColorCapture/app/src/main/cpp/native-lib.cpp
index 343203368..62d702b7f 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/cpp/native-lib.cpp
+++ b/Software/Android_Studio/ColorCapture/app/src/main/cpp/native-lib.cpp
@@ -8,8 +8,6 @@
using namespace cv;
-Mat *mCanny = NULL;
-
enum RotateFlags {
ROTATE_90DEG_CLOCKWISE = 0, //Rotate 90 degrees clockwise
ROTATE_180DEG = 1, //Rotate 180 degrees clockwise
@@ -33,28 +31,24 @@ void rot90(cv::Mat &matImage, int rotflag) {
extern "C" JNIEXPORT jboolean JNICALL
Java_com_twine_colorcapture_opencv_ImageProcessor_ProcessImage(
- JNIEnv *env, jobject instance, jint width,
- jint height, jbyteArray NV21FrameData,
- jintArray outPixels,jintArray wrapedOutPixels)
-{
+ JNIEnv *env, jobject instance, jint frameWidth,
+ jint frameHeight, jint correctedWidth, jint correctedHeight, jbyteArray NV21FrameData,
+ jintArray outPixels, jintArray wrapedOutPixels) {
jbyte *pNV21FrameData = env->GetByteArrayElements(NV21FrameData, 0);
jint *poutPixels = env->GetIntArrayElements(outPixels, 0);
jint *pwrapedPixels = env->GetIntArrayElements(wrapedOutPixels, 0);
////
- jboolean has_result = false;
+ jboolean has_result = jboolean(false);
try {
ColorCaptureLib capture;
- if (mCanny == NULL) {
- mCanny = new Mat(height, width, CV_8UC1);
- }
-
- Mat yuv(height + height / 2, width, CV_8UC1, (unsigned char *) pNV21FrameData);
+ Mat yuv(frameHeight + frameHeight / 2, frameWidth, CV_8UC1,
+ (unsigned char *) pNV21FrameData);
Mat rgb;
- Mat result(width, height, CV_8UC4, (unsigned char *) poutPixels);
+ Mat result(frameWidth, frameHeight, CV_8UC4, (unsigned char *) poutPixels);
cvtColor(yuv, rgb, COLOR_YUV2RGB_NV21);
Mat gray;
@@ -69,7 +63,7 @@ Java_com_twine_colorcapture_opencv_ImageProcessor_ProcessImage(
__android_log_print(ANDROID_LOG_ERROR, "FOCUS", "\n Focus measure is %f \n", focusMeasure);
- rot90(rgb,ROTATE_180DEG);
+ rot90(rgb, ROTATE_180DEG);
//resize(src, dst, dst.size(), 0, 0, interpolation);
@@ -83,19 +77,23 @@ Java_com_twine_colorcapture_opencv_ImageProcessor_ProcessImage(
circle(rgb, vertices[i], 2, CV_RGB(0, 0, 255), -1);
}
- int w = 300;
- int h = 330;
+ int w = correctedWidth;
+ int h = correctedHeight;
- Mat wraped(h,w,CV_8UC4, (unsigned char *) pwrapedPixels);
+ Mat wraped(h, w, CV_8UC4, (unsigned char *) pwrapedPixels);
if (vertices.size() == 4) {
has_result = jboolean(true);
Mat m = capture.ApplyHomography(rgb, vertices, Size(w, h));
+
+ //Draw Blocks!
+ BhBlocks b(m, w / 10, h / 11);
+ b.drawBlocks(m, Scalar(255, 0, 0), 1);
+
cvtColor(m, wraped, COLOR_RGB2BGRA);
- //BhBlocks b(image, w / columns, h / rows);
- //b.drawBlocks(image, Scalar(0, 0, 0), 1);
+ m.release();
}
cvtColor(rgb, result, COLOR_RGB2BGRA);
@@ -125,9 +123,15 @@ Java_com_twine_colorcapture_opencv_ImageProcessor_ProcessImage(
env->ReleaseByteArrayElements(NV21FrameData, pNV21FrameData, 0);
env->ReleaseIntArrayElements(outPixels, poutPixels, 0);
env->ReleaseIntArrayElements(wrapedOutPixels, pwrapedPixels, 0);
+
+ yuv.release();
+ rgb.release();
+ result.release();
+ wraped.release();
+ dst.release();
+ gray.release();
}
- catch (Exception ex)
- {
+ catch (Exception ex) {
env->ThrowNew(env->FindClass("java/lang/NullPointerException"), ex.what());
}
return has_result;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java
new file mode 100644
index 000000000..a5faab0d1
--- /dev/null
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/core/AnimationsHelper.java
@@ -0,0 +1,59 @@
+package com.twine.colorcapture.core;
+
+import android.view.View;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.ScaleAnimation;
+
+/**
+ * Contains helper methods related to animations.
+ */
+public class AnimationsHelper
+{
+ /**
+ * Animates the specified view scale transform.
+ */
+ public static void animateScale(View v, float startScale, float endScale, int duration, boolean keepResult, IAction onCompleted)
+ {
+ Animation anim = new ScaleAnimation(
+ startScale, endScale, // Start and end values for the X axis scaling
+ 1f, 1f, // Start and end values for the Y axis scaling
+ Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
+ Animation.RELATIVE_TO_SELF, 0f); // Pivot point of Y scaling
+ anim.setFillAfter(keepResult); // Needed to keep the result of the animation
+ anim.setDuration(duration);
+ anim.setAnimationListener(new AnimationListener()
+ {
+ @Override
+ public void onAnimationStart(Animation animation)
+ {
+
+ }
+
+ @Override
+ public void onAnimationEnd(Animation animation)
+ {
+ if (onCompleted != null) onCompleted.invoke();
+ }
+
+ @Override
+ public void onAnimationRepeat(Animation animation)
+ {
+
+ }
+ });
+ v.startAnimation(anim);
+ }
+
+ /**
+ * Animates the specified view alpha channel.
+ */
+ public static void animateAlpha(View v, float from, float to, int duration, boolean keepResult)
+ {
+ AlphaAnimation animation1 = new AlphaAnimation(from, to);
+ animation1.setDuration(duration);
+ animation1.setFillAfter(keepResult);
+ v.startAnimation(animation1);
+ }
+}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java
index d9cb58725..48d970a6c 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/mvvm/FragmentBase.java
@@ -1,5 +1,6 @@
package com.twine.colorcapture.mvvm;
+import android.animation.Animator;
import android.app.Fragment;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
@@ -8,10 +9,14 @@ import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.Toast;
import com.mobsandgeeks.saripaar.ValidationError;
import com.mobsandgeeks.saripaar.Validator;
+import com.twine.colorcapture.R;
import com.twine.colorcapture.core.IAction1;
import java.lang.reflect.Method;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
index 68a6a3068..175a99b77 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/navigation/AndroidNavigationProvider.java
@@ -3,6 +3,7 @@ package com.twine.colorcapture.navigation;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
+import android.util.Log;
import com.twine.colorcapture.R;
import com.twine.colorcapture.mvvm.ExtendedObject;
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/opencv/ImageProcessor.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/opencv/ImageProcessor.java
index 02dde50e7..373f1009a 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/opencv/ImageProcessor.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/opencv/ImageProcessor.java
@@ -2,5 +2,5 @@ package com.twine.colorcapture.opencv;
public class ImageProcessor
{
- public native boolean ProcessImage(int width, int height, byte[] NV21FrameData, int[] pixels,int[] wpixels);
+ public native boolean ProcessImage(int width, int height,int correctedWidth,int correctedHeight, byte[] NV21FrameData, int[] pixels,int[] wpixels);
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java
index 491a05564..87e5c56cd 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragment.java
@@ -23,7 +23,6 @@ import android.widget.ImageView;
import com.twine.colorcapture.App;
import com.twine.colorcapture.R;
-import com.twine.colorcapture.core.Task;
import com.twine.colorcapture.core.Task.TaskBuilder;
import com.twine.colorcapture.databinding.FragmentCaptureBinding;
import com.twine.colorcapture.mvvm.FragmentBase;
@@ -33,7 +32,6 @@ import com.yanzhenjie.zbar.ImageScanner;
import com.yanzhenjie.zbar.Symbol;
import com.yanzhenjie.zbar.SymbolSet;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
@@ -43,54 +41,45 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
private Camera camera = null;
private ImageView imagePreview = null;
private ImageView imagewrappedPreview = null;
- private Bitmap bitmap = null;
- private Bitmap wrappedBitmap = null;
- private int[] pixels = null;
- private int[] wrappedPixels = null;
- private byte[] frameData = null;
private int imageFormat;
- private boolean bProcessing = false;
private int cameraId;
- private int previewWidth;
- private int previewHeight;
- private ImageProcessor processor;
private Handler mHandler;
private SurfaceView surfaceView;
+ private ICaptureFragmentListener listener;
ObjectAnimator animator;
View scannerLayout;
View scannerBar;
-
+
public CaptureFragment()
{
// Required empty public constructor
mHandler = new Handler(Looper.getMainLooper());
- processor = new ImageProcessor();
}
-
+
@Override
protected void onCreated()
{
super.onCreated();
-
+
imagePreview = getView().findViewById(R.id.imagePreview);
imagewrappedPreview = getView().findViewById(R.id.imagePreviewWrapped);
-
+
surfaceView = new SurfaceView(this.getActivity());
-
+
SurfaceHolder camHolder = surfaceView.getHolder();
camHolder.addCallback(this);
camHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
-
+
FrameLayout surfraceFrame = (FrameLayout) getView().findViewById(R.id.surfaceViewFrame);
-
+
startScanAnimation();
-
+
new Handler().postDelayed(() ->
{
surfraceFrame.addView(surfaceView, new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
- },500);
+ }, 500);
}
-
+
private void startScanAnimation()
{
//Scanner overlay
@@ -98,69 +87,70 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
scannerBar = getView().findViewById(R.id.scannerBar);
animator = null;
ViewTreeObserver vto = scannerLayout.getViewTreeObserver();
- vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+ vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
+ {
@Override
- public void onGlobalLayout() {
-
+ public void onGlobalLayout()
+ {
+
scannerLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
+ {
scannerLayout.getViewTreeObserver().
removeGlobalOnLayoutListener(this);
-
- } else {
+
+ }
+ else
+ {
scannerLayout.getViewTreeObserver().
removeOnGlobalLayoutListener(this);
}
-
- float destination = (float)(scannerLayout.getY() +
+
+ float destination = (float) (scannerLayout.getY() +
scannerLayout.getHeight());
-
+
animator = ObjectAnimator.ofFloat(scannerBar, "translationY",
scannerLayout.getY(),
destination);
-
+
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.setDuration(2000);
animator.start();
-
+
}
});
}
-
+
@Override
protected int getLayoutId()
{
return R.layout.fragment_capture;
}
-
+
@Override
protected void inject()
{
App.getComponent().inject(this);
}
-
+
@Override
public String getTitle()
{
return "Capture";
}
-
+
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
if (imageFormat == ImageFormat.NV21)
{
//We only accept the NV21(YUV420) format.
- if (!bProcessing)
- {
- frameData = data;
- processImage();
- }
+ listener.onFrameAvailable(data);
}
}
-
+
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder)
{
@@ -175,9 +165,9 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
break;
}
}
-
+
camera = Camera.open(cameraId);
-
+
try
{
camera.setPreviewDisplay(surfaceHolder);
@@ -189,18 +179,18 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
camera = null;
}
}
-
+
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2)
{
Camera.Parameters parameters;
-
+
setCameraDisplayOrientation();
-
+
parameters = camera.getParameters();
-
+
List<Size> sizes = parameters.getSupportedPreviewSizes();
-
+
for (Camera.Size size : parameters.getSupportedPreviewSizes())
{
if (size.width >= 1200 & size.width <= 1280)
@@ -210,30 +200,23 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
break;
}
}
-
- int width = parameters.getPreviewSize().width;
- int height = parameters.getPreviewSize().height;
-
+
imageFormat = parameters.getPreviewFormat();
-
+
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
-
+
camera.setParameters(parameters);
-
+
parameters = camera.getParameters();
-
- previewWidth = parameters.getPreviewSize().width;
- previewHeight = parameters.getPreviewSize().height;
-
- bitmap = Bitmap.createBitmap(previewHeight, previewWidth, Bitmap.Config.ARGB_8888);
- wrappedBitmap = Bitmap.createBitmap(300, 330, Bitmap.Config.ARGB_8888);
-
- pixels = new int[previewWidth * previewHeight];
- wrappedPixels = new int[330 * 300];
-
+
+ int width = parameters.getPreviewSize().width;
+ int height = parameters.getPreviewSize().height;
+
+ listener.onPreviewSettingsAvailable(width, height);
+
camera.startPreview();
}
-
+
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder)
{
@@ -242,7 +225,7 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
camera.release();
camera = null;
}
-
+
private void setCameraDisplayOrientation()
{
android.hardware.Camera.CameraInfo info =
@@ -265,7 +248,7 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
degrees = 270;
break;
}
-
+
int result;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT)
{
@@ -277,50 +260,19 @@ public class CaptureFragment extends FragmentBase<FragmentCaptureBinding, Captur
result = (info.orientation - degrees + 360) % 360;
}
camera.setDisplayOrientation(result);
-
+
}
-
- private void processImage()
- {
- new TaskBuilder()
- .setAction(() ->
- {
- bProcessing = true;
- processor.ProcessImage(previewWidth, previewHeight, frameData, pixels, wrappedPixels);
- bitmap.setPixels(pixels, 0, previewHeight, 0, 0, previewHeight, previewWidth);
- wrappedBitmap.setPixels(wrappedPixels, 0, 300, 0, 0, 300, 330);
+ @Override
+ public void setListener(ICaptureFragmentListener listener)
+ {
+ this.listener = listener;
+ }
- Log.d("BARCODE", "scanning barcode...");
- ImageScanner scanner = new ImageScanner();
- Image img = new Image(bitmap.getWidth(),bitmap.getHeight(),"RGB4");
- img.setData(pixels);
- int result = scanner.scanImage(img.convert("Y800"));
-
- if (result != 0)
- {
- Log.d("BARCODE", "Got positive result...");
-
- String text = null;
-
- SymbolSet symSet = scanner.getResults();
- for (Symbol sym : symSet)
- text = sym.getData();
-
-
- String f = text;
-
- Log.d("BARCODE", "Barcode text is: " + text);
- }
-
- })
- .setContinueWith(() ->
- {
- imagePreview.setImageBitmap(bitmap);
- imagewrappedPreview.setImageBitmap(wrappedBitmap);
- bProcessing = false;
- })
- .build()
- .start();
+ @Override
+ public void onFrameResult(Bitmap frameBitmap, Bitmap correctedBitmap, String barcode)
+ {
+ imagePreview.setImageBitmap(frameBitmap);
+ imagewrappedPreview.setImageBitmap(correctedBitmap);
}
} \ No newline at end of file
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
index 6be978036..b434b9dfb 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/CaptureFragmentVM.java
@@ -1,8 +1,114 @@
package com.twine.colorcapture.views.capture;
+import android.graphics.Bitmap;
+import android.util.Log;
+import android.util.Size;
+
+import com.twine.colorcapture.core.Task.TaskBuilder;
import com.twine.colorcapture.mvvm.ViewModelBase;
+import com.twine.colorcapture.opencv.ImageProcessor;
+import com.twine.colorcapture.views.capture.ICaptureFragment.ICaptureFragmentListener;
+import com.yanzhenjie.zbar.Image;
+import com.yanzhenjie.zbar.ImageScanner;
+import com.yanzhenjie.zbar.Symbol;
+import com.yanzhenjie.zbar.SymbolSet;
-public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment>
+public class CaptureFragmentVM extends ViewModelBase<ICaptureFragment> implements ICaptureFragmentListener
{
-
+ private ImageProcessor processor;
+ private Bitmap frameBitmap = null;
+ private Bitmap correctedBitmap = null;
+ private int[] framePixels = null;
+ private int[] correctedPixels = null;
+ private int previewWidth;
+ private int previewHeight;
+ private boolean isProcessing;
+ private byte[] frameData;
+ private String barcode;
+ private Size correctedSize = new Size(300, 330); //The desired cropped rectified bitmap.
+
+ public CaptureFragmentVM()
+ {
+ processor = new ImageProcessor();
+ }
+
+ @Override
+ protected void onViewAttached(ICaptureFragment view)
+ {
+ super.onViewAttached(view);
+ view.setListener(this);
+ }
+
+ @SuppressWarnings("SuspiciousNameCombination")
+ @Override
+ public void onFrameAvailable(byte[] frame)
+ {
+ if (!isProcessing)
+ {
+ isProcessing = true;
+
+ frameData = frame;
+
+ new TaskBuilder()
+ .setAction(() ->
+ {
+ isProcessing = true;
+
+ processor.ProcessImage(
+ previewWidth,
+ previewHeight,
+ correctedSize.getWidth(),
+ correctedSize.getHeight(),
+ frameData,
+ framePixels,
+ correctedPixels);
+
+ frameBitmap.setPixels(framePixels, 0, previewHeight, 0, 0, previewHeight, previewWidth);
+ correctedBitmap.setPixels(correctedPixels, 0, correctedSize.getWidth(), 0, 0, correctedSize.getWidth(), correctedSize.getHeight());
+
+
+ Log.d("BARCODE", "scanning barcode...");
+ ImageScanner scanner = new ImageScanner();
+ Image img = new Image(frameBitmap.getWidth(), frameBitmap.getHeight(), "RGB4");
+ img.setData(framePixels);
+ int result = scanner.scanImage(img.convert("Y800"));
+
+ if (result != 0)
+ {
+ Log.d("BARCODE", "Got positive result...");
+
+ String text = null;
+
+ SymbolSet symSet = scanner.getResults();
+ for (Symbol sym : symSet)
+ text = sym.getData();
+
+
+ barcode = text;
+
+ Log.d("BARCODE", "Barcode text is: " + text);
+ }
+
+ })
+ .setContinueWith(() ->
+ {
+ view.onFrameResult(frameBitmap, correctedBitmap, barcode);
+ isProcessing = false;
+ })
+ .build()
+ .start();
+ }
+ }
+
+ @SuppressWarnings("SuspiciousNameCombination")
+ @Override
+ public void onPreviewSettingsAvailable(int previewWidth, int previewHeight)
+ {
+ this.previewWidth = previewWidth;
+ this.previewHeight = previewHeight;
+ frameBitmap = Bitmap.createBitmap(previewHeight, previewWidth, Bitmap.Config.ARGB_8888);
+ correctedBitmap = Bitmap.createBitmap(correctedSize.getWidth(), correctedSize.getHeight(), Bitmap.Config.ARGB_8888);
+ framePixels = new int[previewWidth * previewHeight];
+ correctedPixels = new int[correctedSize.getWidth() * correctedSize.getHeight()];
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
index c88d632b6..434e5b10d 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/capture/ICaptureFragment.java
@@ -1,7 +1,19 @@
package com.twine.colorcapture.views.capture;
+import android.graphics.Bitmap;
+
import com.twine.colorcapture.mvvm.IView;
public interface ICaptureFragment extends IView
{
+ void setListener(ICaptureFragmentListener listener);
+
+ void onFrameResult(Bitmap frameBitmap,Bitmap correctedBitmap,String barcode);
+
+ interface ICaptureFragmentListener
+ {
+ void onFrameAvailable(byte[] frame);
+
+ void onPreviewSettingsAvailable(int previewWidth, int previewHeight);
+ }
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
index 56f426f9c..74e3d5707 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
+++ b/Software/Android_Studio/ColorCapture/app/src/main/java/com/twine/colorcapture/views/main/MainActivity.java
@@ -4,7 +4,9 @@ import android.app.FragmentTransaction;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
+import android.support.v4.widget.DrawerLayout;
import android.util.Log;
+import android.view.Gravity;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
@@ -35,7 +37,6 @@ import butterknife.ButterKnife;
public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivityVM> implements IMainActivity
{
private boolean displayOnboarding = false;
- private boolean isMenuOpened;
@Inject
public INavigationProvider navigationProvider;
@@ -43,15 +44,12 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
@BindView(R.id.btnMenu)
Button btnMenu;
- @BindView(R.id.frameMask)
- FrameLayout frameMask;
-
- @BindView(R.id.frameMenu)
- FrameLayout frameMenu;
-
@BindView(R.id.header)
LinearLayout frameHeader;
+ @BindView(R.id.drawerLayout)
+ DrawerLayout drawerLayout;
+
// Used to load the 'native-lib' library on application startup.
static
{
@@ -101,9 +99,7 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
}
else
{
- new Handler().postDelayed(() -> {
- showHeader();
- },2000);
+ new Handler().postDelayed(this::showHeader,2000);
navigationProvider.navigateTo(NavigationView.Loading, false);
}
@@ -112,71 +108,8 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
btnMenu.setOnClickListener((x) ->
{
Log.d("TCC", "Clicked...");
- openMenu();
- });
-
- frameMask.setOnClickListener((x) ->
- {
- Log.d("TCC", "Closed...");
- closeMenu();
- });
-
- frameMask.setClickable(false);
- frameMask.setFocusable(false);
- }
-
- @Override
- public void onBackPressed()
- {
- if (!isMenuOpened)
- {
- super.onBackPressed();
- }
- else
- {
- closeMenu();
- }
- }
-
- private void openMenu()
- {
- frameMask.setVisibility(View.VISIBLE);
- frameMenu.setVisibility(View.VISIBLE);
- frameMask.setClickable(true);
- frameMask.setFocusable(true);
- frameMenu.setClickable(true);
- frameMenu.setFocusable(true);
- frameMask.setAlpha(1);
- animateAlpha(frameMask, 0, 1, 200, true);
- frameMenu.setScaleX(1);
- scaleView(frameMenu, 0, 1, 200, true, null);
- isMenuOpened = true;
- }
-
- private void closeMenu()
- {
- animateAlpha(frameMask, 1, 0, 200, true);
- scaleView(frameMenu, 1, 0, 200, false, () ->
- {
- frameMask.setClickable(false);
- frameMask.setFocusable(false);
- frameMenu.setClickable(false);
- frameMenu.setFocusable(false);
- frameMask.setAlpha(0);
- frameMask.setVisibility(View.GONE);
- frameMenu.setVisibility(View.GONE);
+ drawerLayout.openDrawer(Gravity.START);
});
- isMenuOpened = false;
- }
-
- private void showHeader()
- {
- frameHeader.setVisibility(View.VISIBLE);
- }
-
- private void hideHeader()
- {
- frameHeader.setVisibility(View.GONE);
}
@Override
@@ -191,49 +124,13 @@ public class MainActivity extends ActivityBase<ActivityMainBinding, MainActivity
App.getComponent().inject(this);
}
- public void scaleView(View v, float startScale, float endScale, int duration, boolean keepResult, IAction onCompleted)
+ private void showHeader()
{
- Animation anim = new ScaleAnimation(
- startScale, endScale, // Start and end values for the X axis scaling
- 1f, 1f, // Start and end values for the Y axis scaling
- Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
- Animation.RELATIVE_TO_SELF, 0f); // Pivot point of Y scaling
- anim.setFillAfter(keepResult); // Needed to keep the result of the animation
- anim.setDuration(duration);
- anim.setAnimationListener(new AnimationListener()
- {
- @Override
- public void onAnimationStart(Animation animation)
- {
-
- }
-
- @Override
- public void onAnimationEnd(Animation animation)
- {
- if (onCompleted != null) onCompleted.invoke();
- }
-
- @Override
- public void onAnimationRepeat(Animation animation)
- {
-
- }
- });
- v.startAnimation(anim);
+ frameHeader.setVisibility(View.VISIBLE);
}
- public void animateAlpha(View v, float from, float to, int duration, boolean keepResult)
+ private void hideHeader()
{
- AlphaAnimation animation1 = new AlphaAnimation(from, to);
- animation1.setDuration(duration);
- animation1.setFillAfter(keepResult);
- v.startAnimation(animation1);
+ frameHeader.setVisibility(View.GONE);
}
-
- /**
- * A native method that is implemented by the 'native-lib' native library,
- * which is packaged with this application.
- */
-// public native String stringFromJNI();
}
diff --git a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
index 7ac58f008..1d7d77ad4 100644
--- a/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
+++ b/Software/Android_Studio/ColorCapture/app/src/main/res/layout/activity_main.xml
@@ -12,7 +12,7 @@
type="com.twine.colorcapture.views.main.MainActivityVM" />
</data>
- <FrameLayout
+ <android.support.v4.widget.DrawerLayout
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
@@ -82,36 +82,10 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/header" />
-
- <!--Side Menu-->
- <FrameLayout
- android:id="@+id/frameMask"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/colorMask"
- android:clickable="false"
- android:focusable="false"
- android:visibility="gone"
- android:alpha="0">
-
- <FrameLayout
- android:id="@+id/frameMenu"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:visibility="gone"
- android:scaleX="0"
- android:transformPivotX="0dp">
-
- <include
- layout="@layout/side_menu"
- bind:vm="@{vm}" />
-
- </FrameLayout>
- </FrameLayout>
-
</RelativeLayout>
+ <include layout="@layout/side_menu" bind:vm="@{vm}" />
- </FrameLayout>
+ </android.support.v4.widget.DrawerLayout>
</layout>