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 c960ffe9bf06430c71b829f3b626adab5dfbb6f6..ea539e0662adc0fb45607a86ef668228409e0719 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/QrCodeDecoder.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java index e191c640500a6af4afec18aed69a04a1eaaeb85f..7b018be03a96dab6abbb9836310071c5858685ff 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 @@ -24,7 +24,6 @@ import java.util.logging.Logger; import static com.google.zxing.DecodeHintType.CHARACTER_SET; import static java.util.Collections.singletonMap; -import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; @SuppressWarnings("deprecation") @@ -67,7 +66,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 @@ -105,20 +103,13 @@ class QrCodeDecoder implements PreviewConsumer, PreviewCallback { @Override protected Void doInBackground(Void... params) { - long now = System.currentTimeMillis(); BinaryBitmap bitmap = binarize(data, width, height, orientation); Result result; try { result = reader.decode(bitmap, singletonMap(CHARACTER_SET, "ISO8859_1")); - 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"); 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 b89f630d105a40418fad4ee9f6e43a3ddcb047e5..1088d78afdedaa306f3a1ddc5c24e4a2b34a67be 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 @@ -61,7 +61,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); private static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); @@ -207,6 +208,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;