From 5870bfb7ffebe613c894c4195ef7ce3e34014457 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 7 Apr 2015 09:16:43 +0100
Subject: [PATCH] Remove listener when surface is destroyed.

---
 src/org/briarproject/qrtest/CameraView.java     |  1 +
 src/org/briarproject/qrtest/QrTestActivity.java | 10 ++++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/org/briarproject/qrtest/CameraView.java b/src/org/briarproject/qrtest/CameraView.java
index 0fb0a93..dbf50d5 100644
--- a/src/org/briarproject/qrtest/CameraView.java
+++ b/src/org/briarproject/qrtest/CameraView.java
@@ -161,6 +161,7 @@ AutoFocusCallback {
 	public void surfaceDestroyed(SurfaceHolder holder) {
 		Log.d(TAG, "Surface destroyed");
 		surfaceExists = false;
+		holder.removeCallback(this);
 	}
 
 	public void onAutoFocus(boolean success, final Camera camera) {
diff --git a/src/org/briarproject/qrtest/QrTestActivity.java b/src/org/briarproject/qrtest/QrTestActivity.java
index 3373f78..39a3a90 100644
--- a/src/org/briarproject/qrtest/QrTestActivity.java
+++ b/src/org/briarproject/qrtest/QrTestActivity.java
@@ -115,10 +115,12 @@ implements QrCodeDecoder.ResultCallback {
 		runOnUiThread(new Runnable() {
 			public void run() {
 				Log.d(TAG, "Got result from decoder");
-				cameraBorder.setVisibility(GONE);
-				tickView.setVisibility(VISIBLE);
-				if(!gotResult) releaseCamera();
-				gotResult = true;
+				if(!gotResult) {
+					gotResult = true;
+					cameraBorder.setVisibility(GONE);
+					tickView.setVisibility(VISIBLE);
+					releaseCamera();
+				}
 			}
 		});
 	}
-- 
GitLab