package org.openiot.cupus.mobile.application;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.hardware.SensorManager;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import org.openiot.cupus.mobile.data.ServiceBounded;
import org.openiot.cupus.mobile.sensors.implementations.LocationPullSensor;
import org.openiot.cupus.mobile.sensors.implementations.PressurePullSensor;
import org.openiot.cupus.mobile.sensors.service.MultiSensorService;
import org.openiot.cupus.mobile.sensors.service.SensorService;
public class SensorServiceActivity extends Activity {
PressurePullSensor barometer;
LocationPullSensor locationSensor;
private SensorService serviceReference;
private MultiSensorService serviceReference2;
private long period;
boolean mBound = false;
boolean mBound2 = false;
private ServiceConnection serviceConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
serviceReference = ((SensorService.SSBinder) service)
.getService();
if (!mBound) {
serviceReference.getSensorManager().setPullSensor(barometer);
serviceReference.getSensorManager().setPeriod(period);
serviceReference.getSensorManager().getSensorEventListener().newSensor();
mBound = true;
ServiceBounded.setSensorServiceBounded(true);
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
serviceReference = null;
mBound = false;
}
};
private ServiceConnection serviceConnection2 = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
serviceReference2 = ((MultiSensorService.MSSBinder) service)
.getService();
if (!mBound2) {
serviceReference2.getSensorManager().setPullMultiSensor(locationSensor);
serviceReference2.getSensorManager().setPeriod(period);
serviceReference2.getSensorManager().getSensorEventListener().newSensor();
mBound2 = true;
ServiceBounded.setMultiSensorServiceBounded(true);
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
serviceReference2 = null;
mBound2 = false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sensor_service);
SensorManager sensorManager = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);
barometer = new PressurePullSensor(sensorManager, SensorManager.SENSOR_DELAY_FASTEST);
Button startServiceButton = (Button) findViewById(R.id.startSensorService);
startServiceButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
barometer.initialize();
EditText sensorPeriod = (EditText) findViewById(R.id.sensorPeriod);
// sec to msec
period = Long.valueOf(sensorPeriod.getText().toString()) * 1000;
Intent intent = new Intent(SensorServiceActivity.this, SensorService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
startService(intent);
findViewById(R.id.stopSensorService).setEnabled(true);
findViewById(R.id.startSensorService).setEnabled(false);
}
});
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
locationSensor = new LocationPullSensor(locationManager, 1000l, telephonyManager);
Button startService2 = (Button) findViewById(R.id.startMultiSensorService);
startService2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
locationSensor.initialize();
EditText sensorPeriod = (EditText) findViewById(R.id.multiSensorPeriod);
// sec to msec
period = Long.valueOf(sensorPeriod.getText().toString()) * 1000;
Intent intent = new Intent(SensorServiceActivity.this, MultiSensorService.class);
startService(intent);
bindService(intent, serviceConnection2, Context.BIND_AUTO_CREATE);
findViewById(R.id.stopMultiSensorService).setEnabled(true);
findViewById(R.id.startMultiSensorService).setEnabled(false);
}
});
Button stopService = (Button) findViewById(R.id.stopSensorService);
stopService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
serviceReference.getSensorManager().terminate();
ServiceBounded.setSensorServiceBounded(false);
findViewById(R.id.stopSensorService).setEnabled(false);
findViewById(R.id.startSensorService).setEnabled(true);
}
});
Button stopService2 = (Button) findViewById(R.id.stopMultiSensorService);
stopService2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
serviceReference2.getSensorManager().terminate();
ServiceBounded.setMultiSensorServiceBounded(false);
findViewById(R.id.stopMultiSensorService).setEnabled(false);
findViewById(R.id.startMultiSensorService).setEnabled(true);
}
});
if (ServiceBounded.isSensorServiceBounded()) {
startServiceButton.setEnabled(false);
Intent intent = new Intent(SensorServiceActivity.this, SensorService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
mBound = true;
}
else {
stopService.setEnabled(false);
}
if (ServiceBounded.isMultiSensorServiceBounded()) {
startService2.setEnabled(false);
Intent intent = new Intent(SensorServiceActivity.this, MultiSensorService.class);
bindService(intent, serviceConnection2, Context.BIND_AUTO_CREATE);
mBound2 = true;
}
else {
stopService2.setEnabled(false);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mBound) {
unbindService(serviceConnection);
}
if (mBound2) {
unbindService(serviceConnection2);
}
}
}