Page MenuHomec4science

PhoneManager.java
No OneTemporary

File Metadata

Created
Sun, May 5, 00:54

PhoneManager.java

package ch.epfl.esl.elevatedmonitor.Devices.Phone;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.BatteryManager;
import android.os.Build;
import android.util.Log;
import java.util.Calendar;
import ch.epfl.esl.elevatedmonitor.Devices.Phone.Sensors.Accelerometer;
import ch.epfl.esl.elevatedmonitor.Devices.Phone.Sensors.Light;
import ch.epfl.esl.elevatedmonitor.Devices.Phone.Sensors.Proximity;
import ch.epfl.esl.elevatedmonitor.Devices.Phone.Sensors.Temperature;
import ch.epfl.esl.elevatedmonitor.Interfaces.InterfaceManager;
import ch.epfl.esl.elevatedmonitor.ServiceManager;
import ch.epfl.esl.elevatedmonitor.SuperClasses.Device;
import ch.epfl.esl.elevatedmonitor.SuperClasses.Manager;
import static android.content.Context.BATTERY_SERVICE;
public class PhoneManager extends Manager implements InterfaceManager, SensorEventListener {
private SensorManager mSensorManager;
private static String TAG = "Phone Man SQUINCI";
private Phone myPhone = null;
//--- Constructor
public PhoneManager(Context context) {
super(context, TAG);
}
@Override
public void scan() {
boolean alreadyThere = false;
for (Device device : getScannedDevices()) {
if (device.getId().equals(Build.MODEL)) {
alreadyThere = true;
break;
}
}
if(!alreadyThere) {
myPhone = new Phone(managerContext);
addScannedDevice(myPhone);
ServiceManager.startActionScanned(managerContext);
Log.d(TAG, "Phone has been scanned");
}
}
@Override
public void isDevice(String name, String address) {
}
@Override
public void stopScan() {
}
@Override
public void connect(String id) {
boolean alreadyThere = false;
for (Device cd : getConnectedDevice()) {
if (cd.getId().equals(id)) {
alreadyThere = true;
break;
}
}
if(!alreadyThere) {
for (Device device : getScannedDevices()) {
if (device.getId().equals(id)) {
//--- Add connected device to list
myPhone.setConnected(true);
addConnectedDevice(myPhone);
//--- Set sensors
mSensorManager = (SensorManager) managerContext.getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION) != null) {
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
if (mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE) != null) {
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE);
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
if (mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT) != null) {
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
if (mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) != null) {
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
}
//--- save device
saveConnectedFile();
//--- Send info to UI
ServiceManager.startActionConnected(managerContext);
Log.d(TAG, "Phone has been connected");
readBatteryLevel(id);
}
}
}
}
@Override
public void disconnect(String id) {
if (mSensorManager != null && myPhone != null && myPhone.isConnected()) {
for (Device device : getConnectedDevice()){
if(device.getId().equals(myPhone.getId())){
device.setConnected(false);
device.setScanned(false);
break;
}
}
for (Device device : getScannedDevices()){
if(device.getId().equals(myPhone.getId())){
device.setConnected(false);
device.setScanned(false);
break;
}
}
mSensorManager.unregisterListener(this);
deleteDisconnectedDevice();
ServiceManager.startActionDisconnect(managerContext, myPhone.getName());
Log.d(TAG, "Phone has been disconnected");
// If a saving has already been started, stop that session
if (ServiceManager.saving()) {
ServiceManager.startActionStopOneSave(managerContext, myPhone.getId(), myPhone.getName());
}
}
}
@Override
public void onActivityResult(String requestCode, int resultCode) {
}
@Override
public void readBatteryLevel(String id) {
BatteryManager bm = (BatteryManager)managerContext.getSystemService(BATTERY_SERVICE);
int batLevel = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
for (Device cd : getConnectedDevice()) {
if (cd.getId().equals(id)) {
cd.setBatteryLevel(batLevel);
break;
}
}
ServiceManager.startActionBatteryRead(managerContext);
Log.d(TAG, "battery level = " + batLevel);
}
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_LINEAR_ACCELERATION:
for (Device device : getConnectedDevice()) {
if (device.isConnected()) {
device.getSensor(Phone.ACCELEROMETER).getData(Accelerometer.ACC_X).set(event.values[0]);
device.getSensor(Phone.ACCELEROMETER).getData(Accelerometer.ACC_Y).set(event.values[1]);
device.getSensor(Phone.ACCELEROMETER).getData(Accelerometer.ACC_Z).set(event.values[2]);
device.getSensor(Phone.ACCELEROMETER).getTimeStamp().set(Calendar.getInstance());
ServiceManager.save(device.getId());
break;
}
}
break;
case Sensor.TYPE_LIGHT:
for (Device device : getConnectedDevice()) {
if (device.isConnected()) {
device.getSensor(Phone.LIGHT).getData(Light.LIGHT).set(event.values[0]);
device.getSensor(Phone.LIGHT).getTimeStamp().set(Calendar.getInstance());
ServiceManager.save(device.getId());
break;
}
}
break;
case Sensor.TYPE_PROXIMITY:
for (Device device : getConnectedDevice()) {
if (device.isConnected()) {
device.getSensor(Phone.PROXIMITY).getData(Proximity.PROX).set(event.values[0]);
device.getSensor(Phone.PROXIMITY).getTimeStamp().set(Calendar.getInstance());
ServiceManager.save(device.getId());
break;
}
}
break;
case Sensor.TYPE_AMBIENT_TEMPERATURE:
for (Device device : getConnectedDevice()) {
if (device.isConnected()) {
device.getSensor(Phone.TEMPERATURE).getData(Temperature.TEMP).set(event.values[0]);
ServiceManager.save(device.getId());
break;
}
}
break;
default:
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}

Event Timeline