From 7ad21708fe56f651fe3be1faaf035b4a1c31be1a Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 3 May 2016 09:53:09 +0100
Subject: [PATCH] Reinitialise viewfinder when camera view is shown. #331

---
 .../briarproject/android/util/CameraView.java | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/briar-android/src/org/briarproject/android/util/CameraView.java b/briar-android/src/org/briarproject/android/util/CameraView.java
index 623650e662..3cceafd500 100644
--- a/briar-android/src/org/briarproject/android/util/CameraView.java
+++ b/briar-android/src/org/briarproject/android/util/CameraView.java
@@ -44,20 +44,19 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 
 	public CameraView(Context context) {
 		super(context);
-		initialize();
 	}
 
 	public CameraView(Context context, AttributeSet attrs) {
 		super(context, attrs);
-		initialize();
 	}
 
 	public CameraView(Context context, AttributeSet attrs, int defStyleAttr) {
 		super(context, attrs, defStyleAttr);
-		initialize();
 	}
 
-	private void initialize() {
+	@Override
+	protected void onAttachedToWindow() {
+		super.onAttachedToWindow();
 		setKeepScreenOn(true);
 		SurfaceHolder holder = getHolder();
 		if (Build.VERSION.SDK_INT < 11)
@@ -65,6 +64,13 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 		holder.addCallback(this);
 	}
 
+	@Override
+	protected void onDetachedFromWindow() {
+		super.onDetachedFromWindow();
+		setKeepScreenOn(false);
+		getHolder().removeCallback(this);
+	}
+
 	public void start(Camera camera, PreviewConsumer previewConsumer,
 			int rotationDegrees) {
 		this.camera = camera;
@@ -93,9 +99,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 			camera.startPreview();
 			if (autoFocus) camera.autoFocus(this);
 			previewConsumer.start(camera);
-		} catch (IOException e) {
-			LOG.log(WARNING, "Error starting camera preview", e);
-		} catch (RuntimeException e) {
+		} catch (IOException | RuntimeException e) {
 			LOG.log(WARNING, "Error starting camera preview", e);
 		}
 	}
@@ -246,7 +250,6 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback,
 	public void surfaceDestroyed(SurfaceHolder holder) {
 		LOG.info("Surface destroyed");
 		surfaceExists = false;
-		holder.removeCallback(this);
 	}
 
 	public void onAutoFocus(boolean success, final Camera camera) {
-- 
GitLab