Skip to content
Snippets Groups Projects
Verified Commit 6c59d7dd authored by Torsten Grote's avatar Torsten Grote
Browse files

Prevent NPE in CameraView

This prevents crashes, but still might cause the camera to not show up
thus preventing the user from adding contacts.
parent 050191f0
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ import android.hardware.Camera.CameraInfo; ...@@ -7,6 +7,7 @@ import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters; import android.hardware.Camera.Parameters;
import android.hardware.Camera.Size; import android.hardware.Camera.Size;
import android.os.Build; import android.os.Build;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread; import android.support.annotation.UiThread;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.Surface; import android.view.Surface;
...@@ -43,6 +44,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -43,6 +44,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
private static final Logger LOG = private static final Logger LOG =
Logger.getLogger(CameraView.class.getName()); Logger.getLogger(CameraView.class.getName());
@Nullable
private Camera camera = null; private Camera camera = null;
private PreviewConsumer previewConsumer = null; private PreviewConsumer previewConsumer = null;
private Surface surface = null; private Surface surface = null;
...@@ -86,6 +88,8 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -86,6 +88,8 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
try { try {
LOG.info("Opening camera"); LOG.info("Opening camera");
camera = Camera.open(); camera = Camera.open();
if (camera == null)
throw new RuntimeException("No back-facing camera.");
} catch (RuntimeException e) { } catch (RuntimeException e) {
LOG.log(WARNING, "Error opening camera", e); LOG.log(WARNING, "Error opening camera", e);
return; return;
...@@ -129,6 +133,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -129,6 +133,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
private void startPreview(SurfaceHolder holder) { private void startPreview(SurfaceHolder holder) {
LOG.info("Starting preview"); LOG.info("Starting preview");
try { try {
if (camera == null) throw new IOException("Camera is null.");
camera.setPreviewDisplay(holder); camera.setPreviewDisplay(holder);
camera.startPreview(); camera.startPreview();
previewStarted = true; previewStarted = true;
...@@ -142,6 +147,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -142,6 +147,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
private void stopPreview() { private void stopPreview() {
LOG.info("Stopping preview"); LOG.info("Stopping preview");
try { try {
if (camera == null) throw new RuntimeException("Camera is null.");
stopConsumer(); stopConsumer();
camera.stopPreview(); camera.stopPreview();
} catch (RuntimeException e) { } catch (RuntimeException e) {
...@@ -152,12 +158,14 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -152,12 +158,14 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
@UiThread @UiThread
private void startConsumer() { private void startConsumer() {
if (camera == null) throw new RuntimeException("Camera is null");
if (autoFocus) camera.autoFocus(this); if (autoFocus) camera.autoFocus(this);
previewConsumer.start(camera); previewConsumer.start(camera);
} }
@UiThread @UiThread
private void stopConsumer() { private void stopConsumer() {
if (camera == null) throw new RuntimeException("Camera is null");
if (autoFocus) camera.cancelAutoFocus(); if (autoFocus) camera.cancelAutoFocus();
previewConsumer.stop(); previewConsumer.stop();
} }
...@@ -176,6 +184,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -176,6 +184,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
if (LOG.isLoggable(INFO)) if (LOG.isLoggable(INFO))
LOG.info("Display orientation " + orientation + " degrees"); LOG.info("Display orientation " + orientation + " degrees");
try { try {
if (camera == null) throw new RuntimeException("Camera is null");
camera.setDisplayOrientation(orientation); camera.setDisplayOrientation(orientation);
} catch (RuntimeException e) { } catch (RuntimeException e) {
LOG.log(WARNING, "Error setting display orientation", e); LOG.log(WARNING, "Error setting display orientation", e);
...@@ -287,7 +296,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, ...@@ -287,7 +296,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
@UiThread @UiThread
private void logCameraParameters() { private void logCameraParameters() {
if (LOG.isLoggable(INFO)) { if (camera != null && LOG.isLoggable(INFO)) {
Parameters params = camera.getParameters(); Parameters params = camera.getParameters();
if (Build.VERSION.SDK_INT >= 15) { if (Build.VERSION.SDK_INT >= 15) {
LOG.info("Video stabilisation enabled: " LOG.info("Video stabilisation enabled: "
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment