package com.dappervision.wearscript.dataproviders;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import com.dappervision.wearscript.managers.DataManager;
public class NativeDataProvider extends DataProvider implements SensorEventListener {
private Sensor sensor;
public NativeDataProvider(DataManager parent, long samplePeriod, Sensor sensor) {
super(parent, samplePeriod, sensor.getType(), sensor.getName());
this.sensor = sensor;
// TODO(brandyn): We should base the sensor sample on the Type and selected sampling rate (requires calibration)
parent.sensorManager().registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
public void unregister() {
parent.sensorManager().unregisterListener(this);
this.sensor = null;
super.unregister();
}
@Override
public void onSensorChanged(SensorEvent event) {
if (!useSample(event.timestamp))
return;
// TODO(brandyn): Compensate for light sensor and offset here
DataPoint dataPoint = new DataPoint(this, System.currentTimeMillis() / 1000., event.timestamp);
for (int i = 0; i < event.values.length; i++) {
dataPoint.addValue(Double.valueOf(event.values[i]));
}
// NOTE(brandyn): This prevents a race condition but doesn't completely eliminate it, look into further
if (parent != null)
parent.queue(dataPoint);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
}