From 7666b210e4ddf1001ff90ee7d6d2c528bc8c6316 Mon Sep 17 00:00:00 2001
From: goapunk <noobie@goapunks.net>
Date: Wed, 14 Dec 2016 13:35:59 +0100
Subject: [PATCH] Ignore results from the QrScanner if task is not ready

* Ignore results until the KeyAgreementTask is ready and returned the local payload

Signed-off-by: goapunk <noobie@goapunks.net>
---
 .../briar/android/keyagreement/ShowQrCodeFragment.java     | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
index f20bb4d78c..29a249d60e 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ShowQrCodeFragment.java
@@ -86,6 +86,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 
 	private BluetoothStateReceiver receiver;
 	private boolean gotRemotePayload, waitingForBluetooth;
+	private volatile boolean gotLocalPayload;
 	private KeyAgreementTask task;
 
 	public static ShowQrCodeFragment newInstance() {
@@ -202,6 +203,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 		statusView.setVisibility(INVISIBLE);
 		cameraView.setVisibility(VISIBLE);
 		gotRemotePayload = false;
+		gotLocalPayload = false;
 		startListening();
 	}
 
@@ -227,6 +229,7 @@ public class ShowQrCodeFragment extends BaseEventFragment
 	public void eventOccurred(Event e) {
 		if (e instanceof KeyAgreementListeningEvent) {
 			KeyAgreementListeningEvent event = (KeyAgreementListeningEvent) e;
+			gotLocalPayload = true;
 			setQrCode(event.getLocalPayload());
 		} else if (e instanceof KeyAgreementFailedEvent) {
 			keyAgreementFailed();
@@ -341,6 +344,10 @@ public class ShowQrCodeFragment extends BaseEventFragment
 			@Override
 			public void run() {
 				LOG.info("Got result from decoder");
+				// Ignore results until the KeyAgreementTask is ready
+				if (!gotLocalPayload) {
+					return;
+				}
 				if (!gotRemotePayload) {
 					gotRemotePayload = true;
 					qrCodeScanned(result.getText());
-- 
GitLab