]> rtime.felk.cvut.cz Git - orte/eurobot.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
845ae1124211932e3f3685d1edca9be99a60aca8
[orte/eurobot.git] / orte / Robot_Demo / src / org / ocera / orte / demo / MainActivity.java
1 package org.ocera.orte.demo;
2
3 import org.ocera.orte.DomainApp;
4 import org.ocera.orte.Manager;
5
6 import android.app.Activity;
7 import android.app.AlertDialog;
8 import android.content.Context;
9 import android.content.DialogInterface;
10 import android.content.SharedPreferences;
11 import android.content.pm.ActivityInfo;
12 import android.hardware.Sensor;
13 import android.hardware.SensorEvent;
14 import android.hardware.SensorEventListener;
15 import android.hardware.SensorManager;
16 import android.net.wifi.WifiInfo;
17 import android.net.wifi.WifiManager;
18 import android.net.wifi.WifiManager.WifiLock;
19 import android.os.Bundle;
20 import android.os.Handler;
21 import android.os.Message;
22 import android.os.PowerManager;
23 import android.os.PowerManager.WakeLock;
24 import android.text.format.Formatter;
25 import android.view.LayoutInflater;
26 import android.view.Menu;
27 import android.view.MenuItem;
28 import android.view.View;
29 import android.widget.EditText;
30 import android.widget.TextView;
31  
32 public class MainActivity extends Activity {
33         private AlertDialog voltageDialog = null;
34         private AlertDialog aboutDialog = null;
35         private AlertDialog managersDialog = null;
36         private EditText managersField = null;
37         static EditText voltage33 = null;
38         static EditText voltage50 = null;
39         static EditText voltage80 = null;
40         static EditText voltageBAT = null;
41         static Handler dialogHandler = new Handler() {
42                 @Override
43                 public void handleMessage(Message msg) {
44                         double[] values = msg.getData().getDoubleArray("voltages");
45                         if (values != null) {
46                                 if (voltage33 != null) {
47                                         voltage33.setText(Double.toString(values[0]));
48                                 }
49                                 if (voltage50 != null) {
50                                         voltage50.setText(Double.toString(values[1]));
51                                 }
52                                 if (voltage80 != null) {
53                                         voltage80.setText(Double.toString(values[2]));
54                                 }
55                                 if (voltageBAT != null) {
56                                         voltageBAT.setText(Double.toString(values[3]));
57                                 }
58                         }
59                 }
60     };
61         
62         private Manager manager = null;
63     private String mgrs = null;
64         private MotionSpeedPublish motion_speed_publ = null;
65         private MotionSpeedSubscribe motion_speed_subs = null;
66         private HokuyoScanSubscribe hokuyo_scan = null;
67         private PwrVoltageSubscribe pwr_voltage = null;
68         private MagnetCmdPublish magnet_cmd = null;
69         private CraneCmdPublish crane_cmd = null;
70     private SensorManager mSensorManager = null;
71     private Sensor mGravity = null;
72     private SensorEventListener accel = null;
73     private PowerManager mPowerManager = null;
74     private WifiManager mWifiManager = null;
75     private WakeLock mWakeLock = null;
76     private WifiLock mWifiLock = null;
77     private DomainApp appDomain = null;
78     private HokuyoView hokuyo_view = null;
79     private MenuItem speed_publ_item = null;
80     private MenuItem speed_subs_item = null;
81     private MenuItem hokuyo_item = null;
82     private SharedPreferences prefs = null;
83
84     static {
85         System.loadLibrary("jorte");     
86     }
87
88     @Override
89     protected void onResume() {
90         super.onResume();
91
92         mWakeLock.acquire();
93         mWifiLock.acquire();
94     }
95
96     @Override
97     protected void onPause() {
98         super.onPause();
99         
100         if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
101                 motion_speed_publ.cancel();
102             mSensorManager.unregisterListener(accel);
103             this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
104                 speed_publ_item.setTitle("Start motion control");
105         }
106         
107         if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
108                 hokuyo_view.runMotion(false);
109                 motion_speed_subs.cancel();
110                 hokuyo_view.invalidate();
111                 speed_subs_item.setTitle("Start motion monitor");
112         }
113
114         if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
115                         hokuyo_view.run(false);
116                         hokuyo_scan.cancel();
117                         hokuyo_view.invalidate();
118                         hokuyo_item.setTitle("Start LRF");
119         }
120
121         if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
122                 if (voltageDialog.isShowing())
123                         voltageDialog.dismiss();
124                         pwr_voltage.cancel();
125         }
126         
127         mWakeLock.release();
128         mWifiLock.release();
129     }
130     
131     @Override
132     protected void onDestroy() {
133         super.onDestroy();
134         
135         if (crane_cmd != null && !crane_cmd.isCancelled()) {
136                 crane_cmd.cancel();
137         }
138         
139         if (magnet_cmd != null && !crane_cmd.isCancelled()) {
140                 magnet_cmd.cancel();
141         }
142         
143         if (appDomain != null) {
144                 appDomain.destroy();
145                 appDomain = null;
146         }
147         
148         if (manager != null) {
149                 manager.destroy();
150                 manager = null;
151         }
152     }
153         
154         @SuppressWarnings("deprecation")
155         @Override
156     public void onCreate(Bundle savedInstanceState) {
157         super.onCreate(savedInstanceState);
158         setContentView(R.layout.hokuyo_view);
159         
160         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
161         mWakeLock = mPowerManager.newWakeLock(
162                         PowerManager.SCREEN_BRIGHT_WAKE_LOCK
163                         | PowerManager.ACQUIRE_CAUSES_WAKEUP
164                         | PowerManager.ON_AFTER_RELEASE,
165                         getClass().getName());
166
167         mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
168         mWifiLock = mWifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, getClass().getName());
169         WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
170         int ip = wifiInfo.getIpAddress();
171         String ipAddress = Formatter.formatIpAddress(ip);
172         
173         prefs = getSharedPreferences("prefs", 0);
174         mgrs = prefs.getString("managers", "10.1.1.1");
175         
176                 AlertDialog.Builder voltageBuilder = new AlertDialog.Builder(this);
177                 LayoutInflater inflater = getLayoutInflater();
178                 View voltageView = inflater.inflate(R.layout.status_dialog, null);
179                 voltageBuilder.setCancelable(false);
180                 voltageBuilder.setView(voltageView);
181                 voltageBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
182                         @Override
183                         public void onClick(DialogInterface dialog, int which) {
184                                 voltageDialog.dismiss();
185                                 pwr_voltage.cancel();
186                         }
187                 });
188                 voltageBuilder.setTitle("Voltages");
189                 voltageDialog = voltageBuilder.create();
190                 voltage33 = (EditText)voltageView.findViewById(R.id.editText1);
191                 voltage50 = (EditText)voltageView.findViewById(R.id.editText2);
192                 voltage80 = (EditText)voltageView.findViewById(R.id.editText3);
193                 voltageBAT = (EditText)voltageView.findViewById(R.id.editText4);
194                 
195                 AlertDialog.Builder builder = new AlertDialog.Builder(this);
196                 View aboutView = inflater.inflate(R.layout.about_dialog, null);
197                 builder.setView(aboutView);
198                 builder.setPositiveButton("OK", null);
199                 aboutDialog = builder.create();
200                 
201                 AlertDialog.Builder managersBuilder = new AlertDialog.Builder(this);
202                 View managersView = inflater.inflate(R.layout.managers_view, null);
203                 TextView ownIP = (TextView)managersView.findViewById(R.id.ownIP);
204                 ownIP.setText("\nOwn IP Address: " + ipAddress);
205                 managersField = (EditText)managersView.findViewById(R.id.managers);
206                 managersField.setText(mgrs);
207                 managersBuilder.setCancelable(false);
208                 managersBuilder.setView(managersView);
209                 managersBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
210                         @Override
211                         public void onClick(DialogInterface dialog, int which) {
212                                 SharedPreferences.Editor editor = prefs.edit();
213                                 mgrs = managersField.getText().toString();
214                                 System.out.println(mgrs);
215                                 editor.putString("managers", mgrs);
216                                 editor.commit();
217                                 
218                         manager = new Manager(mgrs);
219
220                         appDomain = new DomainApp();
221                         magnet_cmd = new MagnetCmdPublish(appDomain);
222                         magnet_cmd.start();
223                         crane_cmd = new CraneCmdPublish(appDomain);
224                         crane_cmd.start();
225                                 managersDialog.dismiss();
226                         }
227                 });
228                 managersBuilder.setTitle("Set fellow managers");
229                 managersDialog = managersBuilder.create();
230                 
231         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
232         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
233         
234         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
235         
236         managersDialog.show();
237     }
238     
239         @Override
240         public boolean onCreateOptionsMenu(Menu menu) {
241                 getMenuInflater().inflate(R.menu.activity_main, menu);
242
243                 return true;
244         }
245         
246         @Override
247         public boolean onOptionsItemSelected (MenuItem item) {
248                 System.out.println(item.getTitle());
249                 
250                 if(item.getTitle().equals("Start motion control")) {
251                         accel = new HandleAccelerometer();
252                         mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
253                         if (motion_speed_publ == null)
254                                 motion_speed_publ = new MotionSpeedPublish(appDomain);
255                         motion_speed_publ.start();
256                         speed_publ_item = item;
257                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
258                         item.setTitle("Stop motion control");
259                 }
260                 else if (item.getTitle().equals("Stop motion control")) {
261                         mSensorManager.unregisterListener(accel);
262                         motion_speed_publ.cancel();
263                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
264                         item.setTitle("Start motion control");
265                 }
266                 else if (item.getTitle().equals("Start motion monitor")) {
267                         if (motion_speed_subs == null)
268                                 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
269                         motion_speed_subs.start();
270                         hokuyo_view.runMotion(true);
271                         hokuyo_view.invalidate();
272                         speed_subs_item = item;
273                         item.setTitle("Stop motion monitor");
274                 }
275                 else if (item.getTitle().equals("Stop motion monitor")) {
276                         hokuyo_view.runMotion(false);
277                         motion_speed_subs.cancel();
278                         hokuyo_view.invalidate();
279                         item.setTitle("Start motion monitor");
280                 }
281                 else if (item.getTitle().equals("Start LRF")) {
282                         if (hokuyo_scan == null)
283                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
284                         hokuyo_scan.start();
285                         hokuyo_view.run(true);
286                         hokuyo_view.invalidate();
287                         hokuyo_item = item;
288                         item.setTitle("Stop LRF");
289                 }
290                 else if (item.getTitle().equals("Stop LRF")) {
291                         hokuyo_view.run(false);
292                         hokuyo_scan.cancel();
293                         hokuyo_view.invalidate();
294                         item.setTitle("Start LRF");
295                 }
296                 else if (item.getTitle().equals("Crane up")) {
297                         crane_cmd.send(0x100);
298                         item.setTitle("Crane down");
299                 }
300                 else if (item.getTitle().equals("Crane down")) {
301                         crane_cmd.send(0x190);
302                         item.setTitle("Crane up");
303                 }
304                 else if (item.getTitle().equals("Magnet on")) {
305                         magnet_cmd.send(1);
306                         item.setTitle("Magnet off");                    
307                 }
308                 else if (item.getTitle().equals("Magnet off")) {
309                         magnet_cmd.send(0);
310                         item.setTitle("Magnet on");                     
311                 }
312                 else if (item.getTitle().equals("Voltage monitor")) {
313                         if (pwr_voltage == null)
314                                 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
315                         pwr_voltage.start();
316                         voltageDialog.show();
317                 }
318                 else if (item.getTitle().equals("About")) {
319                         aboutDialog.show();
320                 }
321                 else if (item.getTitle().equals("Exit")) {
322                         finish();
323                 }
324                 
325                 return true;
326         }
327         
328     private class HandleAccelerometer implements SensorEventListener {
329
330         @Override
331         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
332
333         @Override
334         public void onSensorChanged(SensorEvent event) {
335                  if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
336                          if (motion_speed_publ != null)
337                                  motion_speed_publ.setSpeed(event.values[0], event.values[1]);
338                  }
339         }
340     }
341 }