package org.witness.informacam.informa; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; import org.witness.informacam.json.JSONArray; import org.witness.informacam.json.JSONException; import org.witness.informacam.json.JSONObject; import org.witness.informacam.models.j3m.ILogPack; import org.witness.informacam.utils.Constants.SuckerCacheListener; import org.witness.informacam.utils.Constants.Suckers.CaptureEvent; import android.content.Context; public class SensorLogger<T> { public T _sucker; Timer mTimer = new Timer(); TimerTask mTask; String tag; File mLog; JSONArray mBuffer; Context mContext; boolean isRunning; //private final static String LOG = Suckers.LOG; public SensorLogger(Context context) { isRunning = true; mContext = context; } public T getSucker() { return _sucker; } public void setSucker(T sucker) { _sucker = sucker; } public String getTag() { return tag; } public void setTag(String name) { this.tag = name; } public JSONArray getLog() { return mBuffer; } public Timer getTimer() { return mTimer; } public TimerTask getTask() { return mTask; } public void setTask(TimerTask task) { mTask = task; } public void setIsRunning(boolean b) { isRunning = b; if(!b) mTimer.cancel(); } public boolean getIsRunning() { return isRunning; } public JSONObject returnFromLog() { JSONObject logged = new JSONObject(); return logged; } public ILogPack forceReturn() throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, JSONException { Class<?> args = null; if(_sucker.getClass().getDeclaredMethod("forceReturn", args) != null) { Method fr = _sucker.getClass().getDeclaredMethod("forceReturn", args); ILogPack logPack = (ILogPack) fr.invoke(_sucker, args); if(logPack.captureTypes == null) { logPack.captureTypes = new ArrayList<Integer>(); } logPack.captureTypes.add(CaptureEvent.SENSOR_PLAYBACK); return logPack; } return null; } public void sendToBuffer(final ILogPack logPack) { new Thread(new Runnable() { @Override public void run() { try { if(logPack.captureTypes == null) { logPack.captureTypes = new ArrayList<Integer>(); } logPack.captureTypes.add(CaptureEvent.SENSOR_PLAYBACK); if (mSuckerCacheListener != null) { mSuckerCacheListener.onUpdate(logPack); } //((SuckerCacheListener) informaCam.informaService).onUpdate(logPack); } catch(NullPointerException e) {} } }).start(); } private SuckerCacheListener mSuckerCacheListener; public void setSuckerCacheListener (SuckerCacheListener scl) { mSuckerCacheListener = scl; } public Context getContext () { return mContext; } }