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 f20bb4d78c0ebe885c13f74966486be3db6f7f99..29a249d60ec5f1ba7e0ad2cbfd5a040e119d06b0 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());