package edu.mit.media.funf.probe.builtin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.os.Debug;
import android.test.AndroidTestCase;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import edu.mit.media.funf.FunfManager;
import edu.mit.media.funf.json.IJsonObject;
import edu.mit.media.funf.probe.Probe;
import edu.mit.media.funf.probe.Probe.ContinuousProbe;
import edu.mit.media.funf.probe.Probe.DataListener;
import edu.mit.media.funf.probe.Probe.State;
import edu.mit.media.funf.probe.Probe.StateListener;
import edu.mit.media.funf.probe.builtin.ProbeKeys.BluetoothKeys;
import edu.mit.media.funf.probe.builtin.ProbeKeys.ProximitySensorKeys;
public class TestBluetoothProbe extends AndroidTestCase{
public static final String TAG = "FunfTest";
private DataListener listener = new DataListener() {
@Override
public void onDataReceived(IJsonObject completeProbeUri, IJsonObject data) {
Log.i(TAG, "DATALL: " + completeProbeUri.toString() + " " + data.toString());
//get values from ProximitySensorKeys
// 1. need to take care the NULL
// 2.
if (completeProbeUri.get("@type").getAsString().equals(ProximitySensorProbe.class.getName())){
Log.i(TAG, "DATA11: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.DISTANCE).getAsFloat());
Log.i(TAG, "DATA21: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.TIMESTAMP).getAsFloat());
//Log.i(TAG, "DATA3: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.VENDOR).getAsString()); //nullPointerexception
}//not getting the message, how do I know which type of the sensor message?
Log.i(TAG, "DATA1: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.DISTANCE).getAsFloat());
Log.i(TAG, "DATA2: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.TIMESTAMP).getAsFloat());
//Log.i(TAG, "DATA3: " + completeProbeUri.toString() + " " + data.get(ProximitySensorKeys.VENDOR).getAsString());
//Log.i(TAG, "BLUEDATA: " + completeProbeUri.toString() + " " + data.get(BluetoothKeys.DEVICES));
Log.i(TAG, "TYPE: " + completeProbeUri.get("@type"));
}
@Override
public void onDataCompleted(IJsonObject completeProbeUri, JsonElement checkpoint) {
Log.i(TAG, "COMPLETE: " + completeProbeUri.toString());
}
};
private StateListener stateListener = new StateListener() {
@Override
public void onStateChanged(Probe probe, State previousState) {
Log.i(TAG, probe.getClass().getName() + ": " + probe.getState());
Log.i(TAG, getGson().toJson(probe));
}
};
private Gson gson;
public Gson getGson() {
if (gson == null) {
gson = new GsonBuilder().registerTypeAdapterFactory(FunfManager.getProbeFactory(getContext())).create();
}
return gson;
}
@SuppressWarnings("rawtypes")
public static final Class[] ALL_PROBES = {
ProximitySensorProbe.class,
BluetoothProbe.class
};
@SuppressWarnings("unchecked")
public void testAll() throws ClassNotFoundException, IOException, InterruptedException {
Log.i(TAG,"Running");
Debug.startMethodTracing("calc");
List<Class<? extends Probe>> allProbeClasses = Arrays.asList((Class<? extends Probe>[])ALL_PROBES);
// Run one at a time
Gson gson = getGson();
for (Class<? extends Probe> probeClass : allProbeClasses) {
JsonObject config = new JsonObject();
config.addProperty("sensorDelay", SensorProbe.SENSOR_DELAY_NORMAL); //how do I know what other configurations can be used for Bluetooth?
config.addProperty("asdf", 1);
config.addProperty("zzzz", "__");
Probe probe = gson.fromJson(config, probeClass);
probe.addStateListener(stateListener);
probe.registerListener(listener);
Thread.sleep(10000L);
if (probe instanceof ContinuousProbe) {
((ContinuousProbe)probe).unregisterListener(listener);
}
}
// // Run simultaneously
// List<Probe> probes = new ArrayList<Probe>();
// for (Class<? extends Probe> probeClass : allProbeClasses) {
// probes.add(gson.fromJson(Probe.DEFAULT_CONFIG, probeClass));
// }
// for (Probe probe : probes) {
// probe.addStateListener(stateListener);
// probe.registerListener(listener);
// }
// Thread.sleep(10000L);
// for (Probe probe : probes) {
// if (probe instanceof ContinuousProbe) {
// ((ContinuousProbe)probe).unregisterListener(listener);
// }
// }
//
// Thread.sleep(1000L); // Give probes time stop
Debug.stopMethodTracing();
}
}