- Handle close camera device when the user leaves the screen before camera has been opened.

- Create Release function for Orchestrator to cancel all pending tasks.
- Handle NullPointerExceptions.
- Create function to force close camera.
pull/946/head
MayconCardoso 5 years ago
parent d096382294
commit d1d376b2c6
  1. 15
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/orchestrator/CameraOrchestrator.java

@ -59,7 +59,7 @@ public class CameraOrchestrator {
protected final ArrayDeque<Token> mJobs = new ArrayDeque<>(); protected final ArrayDeque<Token> mJobs = new ArrayDeque<>();
protected final Object mLock = new Object(); protected final Object mLock = new Object();
private final Map<String, Runnable> mDelayedJobs = new HashMap<>(); private final Map<String, Runnable> mDelayedJobs = new HashMap<>();
private boolean released = false; private boolean mIsReleased = false;
public CameraOrchestrator(@NonNull Callback callback) { public CameraOrchestrator(@NonNull Callback callback) {
mCallback = callback; mCallback = callback;
@ -82,12 +82,13 @@ public class CameraOrchestrator {
public void release(){ public void release(){
mJobs.clear(); mJobs.clear();
mDelayedJobs.clear(); mDelayedJobs.clear();
reset(); reset();
released = true; mIsReleased = true;
} }
public boolean isReleased(){ public boolean isReleased(){
return released; return mIsReleased;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -99,7 +100,7 @@ public class CameraOrchestrator {
final TaskCompletionSource<T> source = new TaskCompletionSource<>(); final TaskCompletionSource<T> source = new TaskCompletionSource<>();
final WorkerHandler handler = mCallback.getJobWorker(name); final WorkerHandler handler = mCallback.getJobWorker(name);
synchronized (mLock) { synchronized (mLock) {
if(released){ if(isReleased()){
return source.getTask(); return source.getTask();
} }
@ -152,7 +153,9 @@ public class CameraOrchestrator {
public void scheduleDelayed(@NonNull final String name, public void scheduleDelayed(@NonNull final String name,
long minDelay, long minDelay,
@NonNull final Runnable runnable) { @NonNull final Runnable runnable) {
if(released) return; if(mIsReleased) {
return;
}
Runnable wrapper = new Runnable() { Runnable wrapper = new Runnable() {
@Override @Override
@ -187,7 +190,7 @@ public class CameraOrchestrator {
public void reset() { public void reset() {
synchronized (mLock) { synchronized (mLock) {
released = false; mIsReleased = false;
List<String> all = new ArrayList<>(); List<String> all = new ArrayList<>();
//noinspection CollectionAddAllCanBeReplacedWithConstructor //noinspection CollectionAddAllCanBeReplacedWithConstructor
all.addAll(mDelayedJobs.keySet()); all.addAll(mDelayedJobs.keySet());

Loading…
Cancel
Save