diff --git a/android/src/main/java/cz/nic/tablexia/android/AndroidQRCodeScanner.java b/android/src/main/java/cz/nic/tablexia/android/AndroidQRCodeScanner.java index e09868467f9b6e1bb7e5d58acb153e68691c632b..2eef5f7eb9394a157c3499f90e8b213a2240df80 100644 --- a/android/src/main/java/cz/nic/tablexia/android/AndroidQRCodeScanner.java +++ b/android/src/main/java/cz/nic/tablexia/android/AndroidQRCodeScanner.java @@ -19,17 +19,20 @@ import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; import cz.nic.tablexia.android.camera.CameraSurface; +import cz.nic.tablexia.android.camera.OnCameraReadyCallback; import cz.nic.tablexia.util.Log; import cz.nic.tablexia.util.ui.QRCodeScanner; /** * Created by Vitaliy Vashchenko on 6.10.16. */ -public class AndroidQRCodeScanner extends QRCodeScanner implements Camera.PreviewCallback { +public class AndroidQRCodeScanner extends QRCodeScanner implements Camera.PreviewCallback, OnCameraReadyCallback { private final AndroidLauncher activity; private CameraSurface cameraSurface; private ScreenOrientationListener screenOrientationListener; + private boolean previewCalled = false; + private boolean cameraReady = false; @Override public void onPreviewFrame(byte[] bytes, Camera camera) { @@ -51,6 +54,12 @@ public class AndroidQRCodeScanner extends QRCodeScanner implements Camera.Previe } } + @Override + public void onCameraReady() { + cameraReady = true; + if (previewCalled) startPreviewAsync(); + } + private class ScreenOrientationListener extends OrientationEventListener { @@ -75,14 +84,22 @@ public class AndroidQRCodeScanner extends QRCodeScanner implements Camera.Previe return activity.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); } + @Override + public void enableScanning() { + prepareCameraAsync(); + } + @Override public void startCameraPreview() { - startPreviewAsync(); + if (!cameraReady) { + previewCalled = true; + }else { + startPreviewAsync(); + } } @Override public void stopCameraPreview() { - prepareCamera(); stopPreviewAsync(); } @@ -104,11 +121,20 @@ public class AndroidQRCodeScanner extends QRCodeScanner implements Camera.Previe activity.post(r); } + public synchronized void prepareCameraAsync() { + Runnable r = new Runnable() { + public void run() { + prepareCamera(); + } + }; + activity.post(r); + } + private void prepareCamera() { Log.debug(getClass().getSimpleName(), "prepareCamera"); if (cameraSurface == null) { Log.debug(getClass(), "surface is null"); - cameraSurface = new CameraSurface(activity); + cameraSurface = new CameraSurface(activity, this); } if (cameraSurface.getParent() == null) { Log.debug(getClass(), "parent==null - adding view to parent"); diff --git a/android/src/main/java/cz/nic/tablexia/android/camera/CameraSurface.java b/android/src/main/java/cz/nic/tablexia/android/camera/CameraSurface.java index 6e148ab333561699144a399ff81708a2ff450098..38dd5f3089913eaea8c6739d742799c7405255e6 100644 --- a/android/src/main/java/cz/nic/tablexia/android/camera/CameraSurface.java +++ b/android/src/main/java/cz/nic/tablexia/android/camera/CameraSurface.java @@ -24,12 +24,13 @@ import java.io.IOException; public class CameraSurface extends SurfaceView implements SurfaceHolder.Callback { private Camera camera; - private boolean previewReady = false; + private OnCameraReadyCallback cameraReadyCallback; - public CameraSurface(Context context) { + public CameraSurface(Context context, OnCameraReadyCallback cameraReadyCallback) { super(context); getHolder().addCallback(this); + this.cameraReadyCallback = cameraReadyCallback; } @@ -42,7 +43,7 @@ public class CameraSurface extends SurfaceView implements SurfaceHolder.Callback public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { try { camera.setPreviewDisplay(holder); - previewReady = true; + cameraReadyCallback.onCameraReady(); } catch (IOException e) { e.printStackTrace(); } @@ -65,15 +66,10 @@ public class CameraSurface extends SurfaceView implements SurfaceHolder.Callback camera.stopPreview(); holder.removeCallback(this); holder.getSurface().release(); - previewReady = false; camera.release(); camera = null; } - public boolean isPreviewReady() { - return previewReady; - } - public Camera getCamera() { return camera; } diff --git a/android/src/main/java/cz/nic/tablexia/android/camera/OnCameraReadyCallback.java b/android/src/main/java/cz/nic/tablexia/android/camera/OnCameraReadyCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..8bcaa50c402acf414b83fbbd396f333d276ce4d0 --- /dev/null +++ b/android/src/main/java/cz/nic/tablexia/android/camera/OnCameraReadyCallback.java @@ -0,0 +1,8 @@ +package cz.nic.tablexia.android.camera; + +/** + * Created by Vitaliy Vashchenko on 7.10.16. + */ +public interface OnCameraReadyCallback { + void onCameraReady(); +}