Skip to content
Snippets Groups Projects
Commit 6390f5d4 authored by Vitaliy Vashchenko's avatar Vitaliy Vashchenko
Browse files

#558 Handle async camera open.

parent 6cbe4e2e
Branches
No related merge requests found
......@@ -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");
......
......@@ -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;
}
......
package cz.nic.tablexia.android.camera;
/**
* Created by Vitaliy Vashchenko on 7.10.16.
*/
public interface OnCameraReadyCallback {
void onCameraReady();
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment