package com.miviclin.droidengine2d.input.sensor;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

/**
 * Clase que toma datos del acelerometro
 * 
 * @author Miguel Vicente Linares
 * 
 */
public class Accelerometer implements SensorEventListener {
	
	private volatile float[] accelerometerValues;
	private SensorManager sensorManager;
	
	/**
	 * Crea el objeto y empieza a registrar valores.
	 * 
	 * @param activity Activity
	 */
	public Accelerometer(Activity activity) {
		accelerometerValues = new float[3];
		sensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE);
		sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
	}
	
	@Override
	public void onSensorChanged(SensorEvent event) {
		if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
			SensorUtilities.lowPassFilter(event.values, accelerometerValues, 3, 0.2f);
		}
	}
	
	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
	}
	
	/**
	 * Comienza a registrar valores del sensor
	 */
	public void startListening() {
		sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
	}
	
	/**
	 * Para de registrar valores del sensor
	 */
	public void stopListening() {
		sensorManager.unregisterListener(this);
	}
	
	/**
	 * Devuelve la componente X del acelerometro
	 * 
	 * @return X
	 */
	public float getX() {
		return accelerometerValues[0];
	}
	
	/**
	 * Devuelve la componente Y del acelerometro
	 * 
	 * @return Y
	 */
	public float getY() {
		return accelerometerValues[1];
	}
	
	/**
	 * Devuelve la componente Z del acelerometro
	 * 
	 * @return Z
	 */
	public float getZ() {
		return accelerometerValues[2];
	}
}

@@ -411,16 +411,66 @@
 ner %7B%0A%09%0A
+%09private volatile float lowPassFilterAttenuation;%0A
 %09private
@@ -508,16 +508,16 @@
 Values;%0A
-
 %09private
@@ -685,16 +685,359 @@
 vity) %7B%0A
+%09%09this(0.2f, activity);%0A%09%7D%0A%09%0A%09/**%0A%09 * Crea el objeto y empieza a registrar valores.%0A%09 * %0A%09 * @param lowPassFilterAttenuation Coeficiente de atenuacion del filtro a paso bajo%0A%09 * @param activity Activity%0A%09 */%0A%09public Accelerometer(float lowPassFilterAttenuation, Activity activity) %7B%0A%09%09this.lowPassFilterAttenuation = lowPassFilterAttenuation;%0A
 %09%09accele
@@ -1483,20 +1483,40 @@
 ues, 3, 
-0.2f
+lowPassFilterAttenuation
 );%0A%09%09%7D%0A%09
@@ -1896,32 +1896,32 @@
 opListening() %7B%0A
-
 %09%09sensorManager.
@@ -1948,32 +1948,525 @@
 his);%0A%09%7D%0A%09%0A%09/**%0A
+%09 * Devuelve el coeficiente de atenuacion del filtro a paso bajo%0A%09 * %0A%09 * @return Coeficiente de atenuacion del filtro a paso bajo%0A%09 */%0A%09public float getLowPassFilterAttenuation() %7B%0A%09%09return lowPassFilterAttenuation;%0A%09%7D%0A%09%0A%09/**%0A%09 * Asigna el coeficiente de atenuacion del filtro a paso bajo%0A%09 * %0A%09 * @param lowPassFilterAttenuation Nuevo valor%0A%09 */%0A%09public void setLowPassFilterAttenuation(float lowPassFilterAttenuation) %7B%0A%09%09this.lowPassFilterAttenuation = lowPassFilterAttenuation;%0A%09%7D%0A%09%0A%09/**%0A
 %09 * Devuelve la 

Allow changing the value of the low pass filter in Accelerometer