Add TimeoutAction

pull/580/head
Mattia Iavarone 6 years ago
parent 53d044e340
commit 0ce7d30319
  1. 45
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/action/TimeoutAction.java
  2. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/Snapshot2PictureRecorder.java

@ -0,0 +1,45 @@
package com.otaliastudios.cameraview.engine.action;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.TotalCaptureResult;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
public class TimeoutAction extends ActionWrapper {
private long startMillis;
private long timeoutMillis;
private BaseAction action;
public TimeoutAction(long timeoutMillis, @NonNull BaseAction action) {
this.timeoutMillis = timeoutMillis;
this.action = action;
}
@NonNull
@Override
public BaseAction getAction() {
return action;
}
@Override
protected void onStart(@NonNull ActionHolder holder) {
startMillis = System.currentTimeMillis();
super.onStart(holder);
}
@Override
public void onCaptureCompleted(@NonNull ActionHolder holder,
@NonNull CaptureRequest request,
@NonNull TotalCaptureResult result) {
super.onCaptureCompleted(holder, request, result);
if (!isCompleted()) {
if (System.currentTimeMillis() > startMillis + timeoutMillis) {
setState(STATE_COMPLETED);
}
}
}
}

@ -18,6 +18,7 @@ import com.otaliastudios.cameraview.engine.action.ActionHolder;
import com.otaliastudios.cameraview.engine.action.Actions; import com.otaliastudios.cameraview.engine.action.Actions;
import com.otaliastudios.cameraview.engine.action.BaseAction; import com.otaliastudios.cameraview.engine.action.BaseAction;
import com.otaliastudios.cameraview.engine.action.CompletionCallback; import com.otaliastudios.cameraview.engine.action.CompletionCallback;
import com.otaliastudios.cameraview.engine.action.TimeoutAction;
import com.otaliastudios.cameraview.engine.lock.LockAction; import com.otaliastudios.cameraview.engine.lock.LockAction;
import com.otaliastudios.cameraview.preview.GlCameraPreview; import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
@ -44,6 +45,7 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder {
private final static String TAG = Snapshot2PictureRecorder.class.getSimpleName(); private final static String TAG = Snapshot2PictureRecorder.class.getSimpleName();
private final static CameraLogger LOG = CameraLogger.create(TAG); private final static CameraLogger LOG = CameraLogger.create(TAG);
private final static long LOCK_TIMEOUT = 2500;
private static class FlashAction extends BaseAction { private static class FlashAction extends BaseAction {
@ -88,7 +90,9 @@ public class Snapshot2PictureRecorder extends SnapshotGlPictureRecorder {
super(stub, engine, preview, outputRatio); super(stub, engine, preview, outputRatio);
mHolder = engine; mHolder = engine;
mAction = Actions.sequence(new LockAction(), new FlashAction()); mAction = Actions.sequence(
new TimeoutAction(LOCK_TIMEOUT, new LockAction()),
new FlashAction());
mAction.addCallback(new CompletionCallback() { mAction.addCallback(new CompletionCallback() {
@Override @Override
protected void onActionCompleted(@NonNull Action action) { protected void onActionCompleted(@NonNull Action action) {

Loading…
Cancel
Save