package com.dappervision.wearscript.managers;
import android.app.Activity;
import android.content.Intent;
import android.graphics.ImageFormat;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.os.FileObserver;
import android.os.Handler;
import android.provider.MediaStore;
import android.util.Base64;
import android.view.WindowManager;
import com.dappervision.wearscript.BackgroundService;
import com.dappervision.wearscript.Log;
import com.dappervision.wearscript.Utils;
import com.dappervision.wearscript.events.ActivityResultEvent;
import com.dappervision.wearscript.events.CallbackRegistration;
import com.dappervision.wearscript.events.CameraEvents;
import com.dappervision.wearscript.events.OpenCVLoadEvent;
import com.dappervision.wearscript.events.OpenCVLoadedEvent;
import com.dappervision.wearscript.events.SayEvent;
import com.dappervision.wearscript.events.StartActivityEvent;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class OpenCVManager extends Manager {
private static final String TAG = "OpenCVManager";
public static final String LOAD = "LOAD";
public enum State {
UNLOADED, LOADING, LOADED
}
private State state = State.UNLOADED;
public OpenCVManager(BackgroundService bs) {
super(bs);
reset();
}
public void onEventBackgroundThread(OpenCVLoadEvent event) {
synchronized (this) {
loadOpenCV();
}
}
public void setupCallback(CallbackRegistration r) {
// Entry point for capturing photos/videos
super.setupCallback(r);
Log.d(TAG, "setupCallback");
if (r.getEvent().equals(LOAD)) {
loadOpenCV();
}
}
public void callLoaded() {
synchronized (this) {
makeCall(LOAD, "");
unregisterCallback(LOAD);
Utils.eventBusPost(new OpenCVLoadedEvent());
}
}
public void loadOpenCV() {
synchronized (this) {
if (state == State.LOADED) {
Log.w(TAG, "Already Loaded: camflow");
callLoaded();
return;
}
if (state != State.UNLOADED) {
return;
}
state = State.LOADING;
BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(service) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "Lifecycle: OpenCV loaded successfully: camflow");
synchronized (this) {
state = State.LOADED;
callLoaded();
}
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
try {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, service, mLoaderCallback);
} catch (WindowManager.BadTokenException e) {
Log.w(TAG, "OpenCV apk not installed");
Utils.eventBusPost(new SayEvent("Please install open CV. See wearscript.com for details"));
}
}
}
}