diff --git a/android/app/build.gradle b/android/app/build.gradle index 1ea1db3..6b73299 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -15,8 +15,8 @@ apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 21 - buildToolsVersion '21.0.0' + compileSdkVersion 25 + buildToolsVersion '25.0.0' lintOptions { disable 'InvalidPackage' @@ -48,7 +48,5 @@ flutter { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile "com.google.android.gms:play-services-gcm:11.0.1" - androidTestCompile 'com.android.support:support-annotations:21.0.0' - androidTestCompile 'com.android.support.test:runner:0.5' - androidTestCompile 'com.android.support.test:rules:0.5' + compile 'com.android.support:appcompat-v7:25.0.0' } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index b28861b..d7a6f2b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -17,7 +17,7 @@ In most cases you can leave this as-is, but you if you want to provide additional functionality it is fine to subclass or reimplement FlutterApplication and put your custom class here. --> - + + android:theme="@style/AppTheme"/> mContours = new HashMap<>(); - ImageScanner scanner; - - private boolean barcodeScanned = false; + private boolean mBarcodeScanned = false; private boolean previewing = true; static { @@ -49,28 +56,37 @@ public class CameraActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setContentView(R.layout.a_scanner); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - autoFocusHandler = new Handler(); + mAutoFocusHandler = new Handler(); mCamera = getCameraInstance(); + mScanner = new ImageScanner(); - /* Instance barcode scanner */ - scanner = new ImageScanner(); - scanner.setConfig(0, Config.X_DENSITY, 3); - scanner.setConfig(0, Config.Y_DENSITY, 3); + SurfaceView preview = (SurfaceView) findViewById(R.id.cameraPreview); + SurfaceHolder holder = preview.getHolder(); - mPreview = (SurfaceView) findViewById(R.id.cameraPreview); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setTitle(getString(R.string.scanner_title)); + actionBar.setDisplayHomeAsUpEnabled(true); + } - SurfaceHolder holder = mPreview.getHolder(); holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { try { + mCamera.setPreviewDisplay(holder); mCamera.startPreview(); mCamera.setPreviewCallback(previewCallback); mCamera.autoFocus(autoFocusCB); + mCamera.setDisplayOrientation(90); + initCountours(); } catch (Exception e) { e.printStackTrace(); } @@ -78,7 +94,6 @@ public class CameraActivity extends Activity { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - mCamera.setDisplayOrientation(270); } @Override @@ -88,6 +103,31 @@ public class CameraActivity extends Activity { }); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu, menu); + return true; + } + + + private void initCountours() { + + DisplayMetrics displayMetrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + int width = displayMetrics.widthPixels; + + Resources res = getResources(); + mContours.put("left", (int) res.getDimension(R.dimen.scanner_contour_top)); + mContours.put("top", (int) res.getDimension(R.dimen.scanner_contour_left)); + mContours.put("width", (int) res.getDimension(R.dimen.scanner_contour_height)); + mContours.put("height", width - (2 * (int) res.getDimension(R.dimen.scanner_contour_left))); + + Log.d("kifio", "left: " + mContours.get("left")); + Log.d("kifio", "top: " + mContours.get("top")); + Log.d("kifio", "width: " + mContours.get("width")); + Log.d("kifio", "height: " + mContours.get("height")); + } + public void onPause() { super.onPause(); releaseCamera(); @@ -121,22 +161,24 @@ public class CameraActivity extends Activity { PreviewCallback previewCallback = new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera camera) { - Camera.Parameters parameters = camera.getParameters(); + + Parameters parameters = camera.getParameters(); Size size = parameters.getPreviewSize(); Image barcode = new Image(size.width, size.height, "Y800"); barcode.setData(data); +// barcode.setCrop(mContours.get("left"), mContours.get("top"), mContours.get("width"), mContours.get("height")); - int result = scanner.scanImage(barcode); + int result = mScanner.scanImage(barcode); if (result != 0) { previewing = false; mCamera.setPreviewCallback(null); mCamera.stopPreview(); - SymbolSet syms = scanner.getResults(); + SymbolSet syms = mScanner.getResults(); for (Symbol sym : syms) { - barcodeScanned = true; + mBarcodeScanned = true; Toast.makeText(CameraActivity.this, sym.getData(), Toast.LENGTH_SHORT).show(); } } @@ -146,7 +188,7 @@ public class CameraActivity extends Activity { // Mimic continuous auto-focusing AutoFocusCallback autoFocusCB = new AutoFocusCallback() { public void onAutoFocus(boolean success, Camera camera) { - autoFocusHandler.postDelayed(doAutoFocus, 1000); + mAutoFocusHandler.postDelayed(doAutoFocus, 1000); } }; } \ No newline at end of file diff --git a/android/app/src/main/java/com/dinect/checker/view/CameraPreview.java b/android/app/src/main/java/com/dinect/checker/view/CameraPreview.java deleted file mode 100644 index 040215e..0000000 --- a/android/app/src/main/java/com/dinect/checker/view/CameraPreview.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.dinect.checker.view; - -import java.io.IOException; - -import android.app.Activity; -import android.os.Bundle; - -import android.util.Log; - -import android.view.View; -import android.view.Surface; -import android.view.SurfaceView; -import android.view.SurfaceHolder; - -import android.content.Context; - -import android.hardware.Camera; -import android.hardware.Camera.PreviewCallback; -import android.hardware.Camera.AutoFocusCallback; -import android.hardware.Camera.Parameters; - -public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { - - private SurfaceHolder mHolder; - private Camera mCamera; - private PreviewCallback previewCallback; - private AutoFocusCallback autoFocusCallback; - - public CameraPreview(Context context, Camera camera, - PreviewCallback previewCb, - AutoFocusCallback autoFocusCb) { - super(context); - mCamera = camera; - previewCallback = previewCb; - autoFocusCallback = autoFocusCb; - mHolder = getHolder(); - mHolder.addCallback(this); - - // deprecated setting, but required on Android versions prior to 3.0 - mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); - } - - public void surfaceCreated(SurfaceHolder holder) { - // The Surface has been created, now tell the camera where to draw the preview. - try { - mCamera.setPreviewDisplay(holder); - } catch (IOException e) { - Log.d("DBG", "Error setting camera preview: " + e.getMessage()); - } - } - - public void surfaceDestroyed(SurfaceHolder holder) { - // Camera preview released in activity - } - - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - /* - * If your preview can change or rotate, take care of those events here. - * Make sure to stop the preview before resizing or reformatting it. - */ - if (mHolder.getSurface() == null){ - // preview surface does not exist - return; - } - - // stop preview before making changes - try { - mCamera.stopPreview(); - } catch (Exception e){ - // ignore: tried to stop a non-existent preview - } - - try { - // Hard code camera surface rotation 90 degs to match Activity view in portrait - mCamera.setDisplayOrientation(90); - - mCamera.setPreviewDisplay(mHolder); - mCamera.setPreviewCallback(previewCallback); - mCamera.startPreview(); - mCamera.autoFocus(autoFocusCallback); - } catch (Exception e){ - Log.d("DBG", "Error starting camera preview: " + e.getMessage()); - } - } -} diff --git a/android/app/src/main/res/drawable-xxxhdpi/help_outline.png b/android/app/src/main/res/drawable-xxxhdpi/help_outline.png new file mode 100644 index 0000000..3b4a2fc Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/help_outline.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/logout.png b/android/app/src/main/res/drawable-xxxhdpi/logout.png new file mode 100644 index 0000000..83b23bb Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/logout.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png b/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png new file mode 100644 index 0000000..15ffb91 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_left.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_right.png b/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_right.png new file mode 100644 index 0000000..edfd514 Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/shape_bottom_right.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_top_left.png b/android/app/src/main/res/drawable-xxxhdpi/shape_top_left.png new file mode 100644 index 0000000..d2552af Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/shape_top_left.png differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png b/android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png new file mode 100644 index 0000000..e392c7f Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/shape_top_right.png differ diff --git a/android/app/src/main/res/drawable/button_blue.xml b/android/app/src/main/res/drawable/button_blue.xml new file mode 100644 index 0000000..b32220f --- /dev/null +++ b/android/app/src/main/res/drawable/button_blue.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/android/app/src/main/res/drawable/shadow_bottom.xml b/android/app/src/main/res/drawable/shadow_bottom.xml new file mode 100644 index 0000000..e53dff9 --- /dev/null +++ b/android/app/src/main/res/drawable/shadow_bottom.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/android/app/src/main/res/layout/a_scanner.xml b/android/app/src/main/res/layout/a_scanner.xml index 41ae4bf..5adb5da 100644 --- a/android/app/src/main/res/layout/a_scanner.xml +++ b/android/app/src/main/res/layout/a_scanner.xml @@ -2,7 +2,7 @@ @@ -10,5 +10,89 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +