Merge branch '696-npe-key-agreement-task' into 'master'

Fix NPE when stopping KeyAgreementTask, improve thread safety

This branch fixes #696 and improves the thread safety of the camera code, mostly by adding @UiThread annotations and occasionally by moving stuff onto the UI thread that might have happened on other threads before.

Closes #696

See merge request !345
This commit is contained in:
akwizgran
2016-10-10 14:46:25 +00:00
5 changed files with 84 additions and 22 deletions

View File

@@ -1,11 +1,14 @@
package org.briarproject.android.util;
import android.hardware.Camera;
import android.support.annotation.UiThread;
@SuppressWarnings("deprecation")
public interface PreviewConsumer {
@UiThread
void start(Camera camera);
@UiThread
void stop();
}

View File

@@ -4,6 +4,7 @@ import android.hardware.Camera;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.Size;
import android.os.AsyncTask;
import android.support.annotation.UiThread;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
@@ -33,19 +34,24 @@ public class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
this.callback = callback;
}
@Override
public void start(Camera camera) {
stopped = false;
askForPreviewFrame(camera);
}
@Override
public void stop() {
stopped = true;
}
@UiThread
private void askForPreviewFrame(Camera camera) {
if (!stopped) camera.setOneShotPreviewCallback(this);
}
@UiThread
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (!stopped) {
Size size = camera.getParameters().getPreviewSize();
@@ -55,9 +61,9 @@ public class QrCodeDecoder implements PreviewConsumer, PreviewCallback {
private class DecoderTask extends AsyncTask<Void, Void, Void> {
final Camera camera;
final byte[] data;
final int width, height;
private final Camera camera;
private final byte[] data;
private final int width, height;
DecoderTask(Camera camera, byte[] data, int width, int height) {
this.camera = camera;