package interdroid.swan.sensors.impl;
import interdroid.swan.ExpressionManager;
import interdroid.swan.R;
import interdroid.swan.SwanException;
import interdroid.swan.ValueExpressionListener;
import interdroid.swan.sensors.AbstractConfigurationActivity;
import interdroid.swan.sensors.AbstractSwanSensor;
import interdroid.swan.swansong.Expression;
import interdroid.swan.swansong.HistoryReductionMode;
import interdroid.swan.swansong.SensorValueExpression;
import interdroid.swan.swansong.TimestampedValue;
import android.os.Bundle;
public class IntentSensor extends AbstractSwanSensor {
public static final String TAG = "Intent";
/**
* The configuration activity for this sensor.
*
* @author nick <palmer@cs.vu.nl>
*
*/
public static class ConfigurationActivity extends
AbstractConfigurationActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(
RESULT_OK,
getIntent().putExtra("configuration",
IntentSensor.STARTED_FIELD));
finish();
}
@Override
public final int getPreferencesXML() {
return R.xml.intent_preferences;
}
}
public static final String STARTED_FIELD = "started";
protected static final int HISTORY_SIZE = 300;
private static final String MAGIC_RELAY = "INTENTS_FROM_LOGCAT";
@Override
public String[] getValuePaths() {
return new String[] { STARTED_FIELD };
}
@Override
public void initDefaultConfiguration(Bundle DEFAULT_CONFIGURATION) {
}
@Override
public void onConnected() {
SENSOR_NAME = "Intent Sensor";
}
@Override
public void register(final String id, final String valuePath,
final Bundle configuration) {
configuration.putString("logcat_parameters", "'ActivityManager:I'");
try {
ExpressionManager.registerValueExpression(this, id + "."
+ MAGIC_RELAY, new SensorValueExpression(
Expression.LOCATION_SELF, "logcat", "log", configuration,
HistoryReductionMode.ANY, 0),
new ValueExpressionListener() {
@Override
public void onNewValues(String id,
TimestampedValue[] newValues) {
for (TimestampedValue value : newValues) {
// if (value.getValue().toString()
// .contains("Starting: Intent {")) {
if (value.getValue().toString()
.startsWith("START")) {
putValueTrimSize(valuePath, id,
value.getTimestamp(),
getIntentFrom(value.getValue()));
}
}
}
});
} catch (SwanException e) {
e.printStackTrace();
}
}
private String getIntentFrom(final Object value) {
String string = value.toString();
string = string.substring(string.indexOf("cmp=") + 4);
string = string.substring(0, string.indexOf(" "));
System.out.println("got intent: " + string);
return string;
}
@Override
public void unregister(final String id) {
ExpressionManager.unregisterExpression(this, id + "." + MAGIC_RELAY);
}
@Override
public void onDestroySensor() {
super.onDestroySensor();
}
}