blob: b3a3eedbafab4328df8e775774c722a8eed15ce2 [file] [log] [blame]
package com.fairphone.diagnostics.tests.magnetometer;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.fairphone.diagnostics.R;
import com.fairphone.diagnostics.tests.Test;
/**
* Created by maarten on 23/09/16.
*/
public class MagnetometerTest extends Test implements SensorEventListener {
private static final String TAG = MagnetometerTest.class.getSimpleName();
View mTestView;
private TextView tvHeading;
private SensorManager mSensorManager;
private Sensor mMagnetometer;
private Sensor mAccelerometer;
private float[] mMagnetometerData;
private float[] mAccelerometerData;
private float[] mOrientation = new float[3];
public MagnetometerTest(Context context) {
super(context);
}
@Override
protected int getTestTitleID() {
return R.string.magnetometer_test_title;
}
@Override
protected int getTestDescriptionID() {
return R.string.magnetometer_test_description;
}
protected void onPrepare() {
mSensorManager = ((SensorManager)getContext().getSystemService(Context.SENSOR_SERVICE));
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
protected void runTest() {
replaceView();
tvHeading = (TextView)findViewById(R.id.tvHeading);
mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_UI);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
//askIfSuccess(getContext().getString(R.string.magnetometer_test_finish_question));
}
@Override
protected void onCleanUp() {
mSensorManager.unregisterListener(this);
super.onCleanUp();
}
private void replaceView() {
mTestView = LayoutInflater.from(getContext()).inflate(R.layout.view_magnetometer_test, null);
setTestView(mTestView);
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
mAccelerometerData = event.values;
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
mMagnetometerData = event.values;
}
if ((mAccelerometerData != null) && (mMagnetometerData != null)) {
float R[] = new float[9];
float I[] = new float[9];
if (SensorManager.getRotationMatrix(R, I, mAccelerometerData, mMagnetometerData)) {
SensorManager.getOrientation(R, mOrientation);
float azimuth = mOrientation[0] * 57.29578F;
tvHeading.setText("Heading: " + azimuth);
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}