rename papers
[gsk.git] / GestureDetectionApp / GestureSensitiveControl / src / at / mus / GestureSensitiveControl / GestureActivity.java
blobea42fa0cfef8c79e00b77f024f7b6edf542ed4eb
1 package at.mus.GestureSensitiveControl;
3 import java.text.DecimalFormat;
4 import java.text.NumberFormat;
5 import java.util.*;
7 import android.app.Activity;
8 import android.content.Intent;
9 import android.hardware.Sensor;
10 import android.hardware.SensorEvent;
11 import android.hardware.SensorEventListener;
12 import android.hardware.SensorManager;
13 import android.os.Bundle;
14 import android.view.MotionEvent;
15 import android.view.View;
16 import android.view.View.OnClickListener;
17 import android.view.View.OnTouchListener;
18 import android.widget.Button;
19 import android.widget.EditText;
20 import android.widget.TextView;
21 import at.mus.recognition.*;
22 import at.mus.recognition.dtw.AccelerationFactory;
23 import at.mus.recognition.dtw.DTW;
25 public class GestureActivity extends Activity implements SensorEventListener {
26 private static final NumberFormat codePointFormat = DecimalFormat.getInstance(Locale.ENGLISH);
28 // ui elements
29 private Button btnFindServer;
30 private Button btnCloseApp;
31 private Button btnConnect;
32 private Button btnDevMessage1;
33 private Button btnDevMessage2;
34 private Button btnRecognize;
35 private TextView lbInformation;
36 private TextView lbAcceleration;
37 private TextView lbOrientation;
38 private TextView lbGyroscope;
39 private EditText txtServerIp;
41 // logic
42 private Connector connector;
44 // sensor
45 private SensorManager mSensorManager;
46 private Sensor mAccelerometer;
47 private Sensor mOrientation;
48 private Sensor mLinearAcceleration;
50 private ArrayList<ICoordinate> data = new ArrayList<ICoordinate>();
51 private IRecognizer dtw = new DTW();
52 private CoordinateFactory coords = new AccelerationFactory();
54 @Override
55 public void onCreate(Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
58 connector = new Connector();
60 setContentView(R.layout.main);
62 // get ui controls
63 lbInformation = (TextView) findViewById(R.id.lbInformation);
64 lbAcceleration = (TextView) findViewById(R.id.lbAcceleration);
65 lbOrientation = (TextView) findViewById(R.id.lbOrientation);
66 lbGyroscope = (TextView) findViewById(R.id.lbGyroscope);
67 txtServerIp = (EditText) findViewById(R.id.txtServerIp);
68 btnFindServer = (Button) findViewById(R.id.btnFindServer);
69 btnFindServer.setOnClickListener(new OnClickListener() {
70 public void onClick(View v) {
71 btnFindServer.setEnabled(false);
72 txtServerIp.setText(connector.findServers());
73 btnFindServer.setEnabled(true);
75 });
76 btnCloseApp = (Button) findViewById(R.id.btnCloseApp);
77 btnCloseApp.setOnClickListener(new OnClickListener() {
78 public void onClick(View v) {
79 connector.close();
80 finish();
82 });
83 btnConnect = (Button) findViewById(R.id.btnConnect);
84 btnConnect.setOnClickListener(new OnClickListener() {
85 public void onClick(View v) {
86 lbInformation.setText("Trying to connect to Server ...");
87 String ip = txtServerIp.getText().toString();
88 connector.connectToServer(ip);
90 lbInformation.setText("Connected to Server, make gesture !");
91 btnDevMessage1.setEnabled(true);
92 btnDevMessage2.setEnabled(true);
93 btnRecognize.setEnabled(true);
95 });
96 btnDevMessage1 = (Button) findViewById(R.id.btnSendDevMessag1);
97 btnDevMessage1.setOnClickListener(new OnClickListener() {
98 public void onClick(View v) {
99 connector.send("ForwardGesture");
102 btnDevMessage2 = (Button) findViewById(R.id.btnSendDevMessag2);
103 btnDevMessage2.setOnClickListener(new OnClickListener() {
104 public void onClick(View v) {
105 connector.send("BackwardGesture");
109 btnRecognize = (Button) findViewById(R.id.btnRecognize);
110 btnRecognize.setOnTouchListener(new OnTouchListener() {
111 public boolean onTouch(View v, MotionEvent event) {
112 if (event.getAction() == MotionEvent.ACTION_DOWN) {
113 startGesture();
114 } else if (event.getAction() == MotionEvent.ACTION_UP) {
115 endGesture();
117 return false;
122 protected void onResume() {
123 super.onResume();
124 if (mSensorManager != null) { // maybe delete this one
125 mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
126 mSensorManager.registerListener(this, mLinearAcceleration, SensorManager.SENSOR_DELAY_NORMAL);
127 mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL);
131 protected void onPause() {
132 super.onPause();
133 if (mSensorManager != null) {
134 mSensorManager.unregisterListener(this);
138 private void startGesture() {
139 // create sensor manager and accelerometer
140 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
141 mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
142 mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
143 mLinearAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
145 // clear list
146 data.clear();
148 // register listener
149 mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
150 mSensorManager.registerListener(this, mLinearAcceleration, SensorManager.SENSOR_DELAY_FASTEST);
151 mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL);
154 private void endGesture() {
155 // deregister listener
156 mSensorManager.unregisterListener(this);
158 Result r = dtw.recognize(data, Templates.templates, 0, 0, null);
159 lbOrientation.setText(r.getTemplate().name + " " + r.getMatch());
161 connector.send(r.getTemplate().name);
163 //this.createVectorListCode(data);
166 // will be called if accuracy changes
167 public void onAccuracyChanged(Sensor sensor, int accuracy) {
170 // will be called if a sensor changes its value
171 public void onSensorChanged(SensorEvent event) {
172 String s = "";
173 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
174 s = String.format("Acc.: X:%f Y:%f Z:%f", event.values[0],
175 event.values[1], event.values[2]);
176 lbAcceleration.setText(s);
178 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
179 s = String.format("%s %n Orientation: X:%f Y:%f Z:%f", s,
180 event.values[0], event.values[1], event.values[2]);
181 lbOrientation.setText(s);
182 // mPosRecorder.setOrientation(event.values);
184 if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
185 s = String.format("LinAcc.: X:%f Y:%f Z:%f", event.values[0],
186 event.values[1], event.values[2]);
187 lbGyroscope.setText(s);
188 data.add(coords.create(event.values));
192 @SuppressWarnings("unused")
193 private void createVectorListCode(List<ICoordinate> points) {
194 StringBuilder sb = new StringBuilder();
195 sb.append(String.format("public static float[][] vectors = { "));
197 int cnt = 0;
198 for (ICoordinate c : points) {
199 sb.append(String.format("{ %1$sf, %2$sf, %3$sf }", codePointFormat.format(c.getX()),
200 codePointFormat.format(c.getY()),
201 codePointFormat.format(c.getZ())));
202 ++cnt;
203 if (cnt < points.size())
204 sb.append(", ");
206 sb.append("};");
208 // send mail
209 final Intent emailIntent = new Intent(
210 android.content.Intent.ACTION_SEND);
211 emailIntent.setType("plain/text");
212 emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
213 new String[] { "patrick.ecker@gmail.com" });
214 emailIntent.putExtra(android.content.Intent.EXTRA_CC, new String[] {
215 "martin.enzelsberger@fh-hagenberg.at", "knittl89@gmail.com" });
216 emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
217 "MUS Testdata - Links Krümmung");
218 emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, sb.toString());
219 this.startActivity(Intent.createChooser(emailIntent, "Send mail..."));