public List<String> getSensorMethods() { List<String> out = new LinkedList<String>(); for (AbstractSensor sensor : sensors) { if (sensor.isEnabled()) { String name = sensor.getClass().getName(); name = name.substring(name.lastIndexOf('.') + 1); Field[] fields = sensor.getClass().getDeclaredFields(); try { for (Field f : fields) { f.setAccessible(true); Object o = f.get(sensor); if (o instanceof SensorValue) { out.add(name + "." + f.getName()); } } } catch (IllegalArgumentException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } catch (IllegalAccessException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } } } return out; }
private SensorValue invokeMethod(String classname, String methodname) { AbstractSensor sensor = getSensorForClassname(classname); if (sensor != null) { if (sensor.isEnabled()) { Field[] fields = sensor.getClass().getDeclaredFields(); try { for (Field f : fields) { f.setAccessible(true); Object o = f.get(sensor); if (f.getName().equals(methodname) && o instanceof SensorValue) { return (SensorValue) o; } } } catch (IllegalArgumentException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } catch (IllegalAccessException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } } } return null; }
public void registerSensor(AbstractSensor sensor) { for (AbstractSensor s : sensors) { if (s.getClass().equals(sensor.getClass())) { Log.d(SensorRegistry.TAG, "Sensor of this class already present, not registering."); return; } } sensors.add(sensor); }
private AbstractSensor getSensorWithName(String classname) { for (AbstractSensor sensor : sensors) { String sensorname = sensor.getClass().getName(); sensorname = sensorname.substring(sensorname.lastIndexOf('.') + 1); if (sensorname.equals(classname) && sensor.isEnabled()) { return sensor; } } return null; }
public Object callSensorMethod(String methodname) { if (methodname.lastIndexOf('.') == -1) { Log.d("SeattleSensor", "Invalid XMLRPC method call"); return null; } String classname = methodname.substring(0, methodname.lastIndexOf('.')); methodname = methodname.substring(methodname.lastIndexOf('.') + 1); SensorValue val = invokeMethod(classname, methodname); if (val != null) { AbstractSensor sensor = getSensorWithName(classname); return Privacy.anonymize(val, sensor.getPrivacylevel()).getValue(); } return null; }
public AbstractSensor getSensorForClassname(String classname) { for (AbstractSensor sensor : sensors) { String name = sensor.getClass().getName(); if (classname.lastIndexOf('.') > 0) { // we have a qualified name if (name.equals(classname)) return sensor; } else { name = name.substring(name.lastIndexOf('.') + 1); if (name.equals(classname)) { return sensor; } } } return null; }
public void startup(Context context) { this.context = context; SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); for (AbstractSensor sensor : sensors) { try { boolean savedstate = prefs.getBoolean(sensor.getClass().getName(), true); Log.d(SensorRegistry.TAG, sensor.getClass().getName() + ": " + savedstate); if (savedstate) sensor.enable(); } catch (Exception e) { sensor.disable(); Log.d(SensorRegistry.TAG, e.toString()); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } } }
public Object[] getSensorMethodSignature(String methodname) { List<String> signature = new LinkedList<String>(); if (methodname.lastIndexOf('.') > 0) { String classname = methodname.substring(0, methodname.lastIndexOf('.')); AbstractSensor sensor = getSensorForClassname(classname); if (sensor != null && sensor.isEnabled()) { Field[] fields = sensor.getClass().getDeclaredFields(); try { for (Field f : fields) { f.setAccessible(true); Object o = f.get(sensor); if (o instanceof SensorValue) { String fieldname = f.getName(); if (fieldname.equals(methodname.substring(methodname.lastIndexOf('.') + 1))) { signature.add(methodname); SensorValue sv = (SensorValue) o; String rettype = sv.getValue().getClass().toString(); // TODO: this will frequently be only String and // changing, // due to be set to "n/a" when no value is // present if (rettype.equals("class [Ljava.lang.Object;")) { signature.add("array"); } else if (rettype.equals("class java.lang.String")) { signature.add("string"); } else if (rettype.equals("class java.lang.Integer")) { signature.add("int"); } else if (rettype.equals("class java.lang.Boolean")) { signature.add("boolean"); } else if (rettype.equals("class java.lang.Double")) { signature.add("double"); } else if (rettype.equals("class java.lang.Float")) { signature.add("ex:float"); } else if (rettype.equals("class java.lang.Long")) { signature.add("ex:i8"); } else if (rettype.equals("class java.lang.Byte")) { signature.add("ex:i1"); } else if (rettype.equals("class java.lang.Short")) { signature.add("ex:i2"); } else { signature.add(rettype.toString()); } // add method parameters: always nil signature.add("ex:nil"); } } } } catch (IllegalArgumentException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } catch (IllegalAccessException e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); Log.d(SensorRegistry.TAG, sw.toString()); } } if (!signature.isEmpty()) return signature.toArray(); } return null; }