Page MenuHomec4science

Monitor.java
No OneTemporary

File Metadata

Created
Wed, May 1, 02:17

Monitor.java

package ch.epfl.esl.elevatedmonitor;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.ServiceConnection;
import android.graphics.Color;
import android.os.Handler;
import android.os.IBinder;
import com.jjoe64.graphview.series.DataPoint;
import com.jjoe64.graphview.series.LineGraphSeries;
import java.util.ArrayList;
import ch.epfl.esl.elevatedmonitor.SuperClasses.Data;
import ch.epfl.esl.elevatedmonitor.SuperClasses.Device;
import ch.epfl.esl.elevatedmonitor.SuperClasses.SensorDevice;
public class Monitor {
private final int WINDOW_TIME = 10;
private Runnable mTimer;
private Double time = 0.0;
private long delay = 0;
private int maxDataPoints = 0;
private final Handler mHandler = new Handler();
private Device monitoredDevice = null;
private SensorDevice monitoredSensor = null;
private Context mContext;
private Boolean bound;
private ArrayList<LineGraphSeries<DataPoint>> series = new ArrayList<>();
Service sensorService = null;
public Monitor(Device monitoredDevice, SensorDevice monitoredSensor, Context mContext) {
setContext(mContext);
setMonitoredDevice(monitoredDevice);
setMonitoredSensor(monitoredSensor);
setDelay((long) 100.0);
setMaxDataPoints();
setSeries();
//--- Set timer
time = 0.0;
mTimer = new Runnable() {
@Override
public void run() {
updateSeries();
time += ((double) delay / 1000.0);
mHandler.postDelayed(this, delay);
}
};
mHandler.postDelayed(mTimer, delay);
}
private void setMaxDataPoints() {
this.maxDataPoints = (int) ((WINDOW_TIME * 1000) / delay);
}
private void setDelay(long delay) {
this.delay = delay;
}
private void setSeries() {
int position = 0;
series.clear();
for (Data data : monitoredSensor.getAllData()) {
series.add(new LineGraphSeries<>());
series.get(position).setColor(getColor(position));
position++;
}
updateSeries();
}
private int getColor(int position) {
int color;
position = position % 7;
switch (position) {
case 0:
color = Color.BLUE;
break;
case 1:
color = Color.RED;
break;
case 2:
color = Color.GREEN;
break;
case 3:
color = Color.YELLOW;
break;
case 4:
color = Color.CYAN;
break;
case 5:
color = Color.MAGENTA;
break;
case 6:
color = Color.GRAY;
break;
default:
color = Color.BLUE;
}
return color;
}
private void updateSeries() {
int position = 0;
for (Data data : monitoredSensor.getAllData()) {
LineGraphSeries<DataPoint> serie = series.get(position);
serie.appendData(new DataPoint(this.time, data.alwaysGet()), true, maxDataPoints);
position++;
}
}
private void setContext(Context context) {
this.mContext = context;
}
private void setMonitoredSensor(SensorDevice monitoredSensor) {
this.monitoredSensor = monitoredSensor;
}
private void setMonitoredDevice(Device monitoredDevice) {
this.monitoredDevice = monitoredDevice;
}
Device getMonitoredDevice() {
return this.monitoredDevice;
}
SensorDevice getMonitoredSensor() {
// mContext.bindService(intent, DeviceServiceConnection , Context.BIND_AUTO_CREATE);
return this.monitoredSensor;
}
public ArrayList<LineGraphSeries<DataPoint>> getSeries() {
return this.series;
}
private class DeviceServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
//sensorService = service.getService();
bound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
bound = false;
}
}
}

Event Timeline