From f2cfca14605d0d417c7edf26b6711c3309fc08e4 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 20 Mar 2018 11:30:31 +0000 Subject: [PATCH 1/3] Remove performance logging. --- .../briar/android/keyagreement/QrCodeDecoder.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java index cf3834319..ebdad55ae 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java @@ -65,7 +65,6 @@ class QrCodeDecoder implements PreviewConsumer, PreviewCallback { @Override public void onPreviewFrame(byte[] data, Camera camera) { if (camera == this.camera) { - LOG.info("Got preview frame"); try { Size size = camera.getParameters().getPreviewSize(); // The preview should be in NV21 format: width * height bytes of @@ -103,19 +102,12 @@ class QrCodeDecoder implements PreviewConsumer, PreviewCallback { @Override protected Void doInBackground(Void... params) { - long now = System.currentTimeMillis(); BinaryBitmap bitmap = binarize(data, width, height, orientation); - Result result = null; + Result result; try { result = reader.decode(bitmap); - long duration = System.currentTimeMillis() - now; - if (LOG.isLoggable(INFO)) - LOG.info("Decoding barcode took " + duration + " ms"); } catch (ReaderException e) { // No barcode found - long duration = System.currentTimeMillis() - now; - if (LOG.isLoggable(INFO)) - LOG.info("No barcode found after " + duration + " ms"); return null; } catch (RuntimeException e) { LOG.warning("Invalid preview frame"); From 54b0bb608409687dca41f235a3eb269a85a860a1 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 20 Mar 2018 11:43:44 +0000 Subject: [PATCH 2/3] Don't create a stack of QR code fragments. --- .../android/keyagreement/KeyAgreementActivity.java | 14 +++++++++----- .../android/keyagreement/ShowQrCodeFragment.java | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java index c960ffe9b..ea539e066 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/KeyAgreementActivity.java @@ -9,6 +9,7 @@ import android.content.IntentFilter; import android.os.Bundle; import android.support.annotation.UiThread; import android.support.v4.app.ActivityCompat; +import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog.Builder; import android.support.v7.widget.Toolbar; @@ -206,11 +207,14 @@ public class KeyAgreementActivity extends BriarActivity implements private void showQrCodeFragment() { // FIXME #824 - BaseFragment f = ShowQrCodeFragment.newInstance(); - getSupportFragmentManager().beginTransaction() - .replace(R.id.fragmentContainer, f, f.getUniqueTag()) - .addToBackStack(f.getUniqueTag()) - .commit(); + FragmentManager fm = getSupportFragmentManager(); + if (fm.findFragmentByTag(ShowQrCodeFragment.TAG) == null) { + BaseFragment f = ShowQrCodeFragment.newInstance(); + fm.beginTransaction() + .replace(R.id.fragmentContainer, f, f.getUniqueTag()) + .addToBackStack(f.getUniqueTag()) + .commit(); + } } private boolean checkPermissions() { 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 4007a8c3a..6e5fe688b 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 @@ -59,7 +59,8 @@ import static java.util.logging.Level.WARNING; public class ShowQrCodeFragment extends BaseEventFragment implements QrCodeDecoder.ResultCallback { - private static final String TAG = ShowQrCodeFragment.class.getName(); + static final String TAG = ShowQrCodeFragment.class.getName(); + private static final Logger LOG = Logger.getLogger(TAG); @Inject From 53f85d4b7172c49e3c3d4f54327016791f3c35ad Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 20 Mar 2018 11:58:40 +0000 Subject: [PATCH 3/3] When resetting, restart camera if we've stopped it. --- .../keyagreement/ShowQrCodeFragment.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) 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 6e5fe688b..9608385aa 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 @@ -205,6 +205,15 @@ public class ShowQrCodeFragment extends BaseEventFragment @UiThread private void reset() { + // If we've stopped the camera view, restart it + if (gotRemotePayload) { + try { + cameraView.start(getScreenRotationDegrees()); + } catch (CameraException e) { + logCameraExceptionAndFinish(e); + return; + } + } statusView.setVisibility(INVISIBLE); cameraView.setVisibility(VISIBLE); gotRemotePayload = false; @@ -219,12 +228,17 @@ public class ShowQrCodeFragment extends BaseEventFragment if (LOG.isLoggable(INFO)) LOG.info("Remote payload is " + encoded.length + " bytes"); Payload remotePayload = payloadParser.parse(encoded); + gotRemotePayload = true; + cameraView.stop(); cameraView.setVisibility(INVISIBLE); statusView.setVisibility(VISIBLE); status.setText(R.string.connecting_to_device); task.connectAndRunProtocol(remotePayload); + } catch (CameraException e) { + logCameraExceptionAndFinish(e); } catch (IOException | IllegalArgumentException e) { - // TODO show failure + if (LOG.isLoggable(WARNING)) LOG.log(WARNING, "QR Code Invalid", e); + reset(); Toast.makeText(getActivity(), R.string.qr_code_invalid, LENGTH_LONG).show(); } @@ -262,6 +276,7 @@ public class ShowQrCodeFragment extends BaseEventFragment new AsyncTask() { @Override + @Nullable protected Bitmap doInBackground(Void... params) { byte[] encoded = payloadEncoder.encode(payload); if (LOG.isLoggable(INFO)) @@ -326,13 +341,8 @@ public class ShowQrCodeFragment extends BaseEventFragment runOnUiThreadUnlessDestroyed(() -> { LOG.info("Got result from decoder"); // Ignore results until the KeyAgreementTask is ready - if (!gotLocalPayload) { - return; - } - if (!gotRemotePayload) { - gotRemotePayload = true; - qrCodeScanned(result.getText()); - } + if (!gotLocalPayload) return; + if (!gotRemotePayload) qrCodeScanned(result.getText()); }); }