1 package org.ocera.orte.demo;
3 import org.ocera.orte.DomainApp;
4 import org.ocera.orte.Manager;
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;
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() {
43 public void handleMessage(Message msg) {
44 double[] values = msg.getData().getDoubleArray("voltages");
46 if (voltage33 != null) {
47 voltage33.setText(Double.toString(values[0]));
49 if (voltage50 != null) {
50 voltage50.setText(Double.toString(values[1]));
52 if (voltage80 != null) {
53 voltage80.setText(Double.toString(values[2]));
55 if (voltageBAT != null) {
56 voltageBAT.setText(Double.toString(values[3]));
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;
85 System.loadLibrary("jorte");
89 protected void onResume() {
97 protected void onPause() {
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");
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");
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");
121 if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
122 if (voltageDialog.isShowing())
123 voltageDialog.dismiss();
124 pwr_voltage.cancel();
132 protected void onDestroy() {
135 if (crane_cmd != null && !crane_cmd.isCancelled()) {
139 if (magnet_cmd != null && !crane_cmd.isCancelled()) {
143 if (appDomain != null) {
148 if (manager != null) {
154 @SuppressWarnings("deprecation")
156 public void onCreate(Bundle savedInstanceState) {
157 super.onCreate(savedInstanceState);
158 setContentView(R.layout.hokuyo_view);
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());
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);
173 prefs = getSharedPreferences("prefs", 0);
174 mgrs = prefs.getString("managers", "10.1.1.1");
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() {
183 public void onClick(DialogInterface dialog, int which) {
184 voltageDialog.dismiss();
185 pwr_voltage.cancel();
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);
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();
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() {
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);
218 manager = new Manager(mgrs);
220 appDomain = new DomainApp();
221 magnet_cmd = new MagnetCmdPublish(appDomain);
223 crane_cmd = new CraneCmdPublish(appDomain);
225 managersDialog.dismiss();
228 managersBuilder.setTitle("Set fellow managers");
229 managersDialog = managersBuilder.create();
231 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
232 mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
234 hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
236 managersDialog.show();
240 public boolean onCreateOptionsMenu(Menu menu) {
241 getMenuInflater().inflate(R.menu.activity_main, menu);
247 public boolean onOptionsItemSelected (MenuItem item) {
248 System.out.println(item.getTitle());
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");
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");
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");
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");
281 else if (item.getTitle().equals("Start LRF")) {
282 if (hokuyo_scan == null)
283 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
285 hokuyo_view.run(true);
286 hokuyo_view.invalidate();
288 item.setTitle("Stop LRF");
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");
296 else if (item.getTitle().equals("Crane up")) {
297 crane_cmd.send(0x100);
298 item.setTitle("Crane down");
300 else if (item.getTitle().equals("Crane down")) {
301 crane_cmd.send(0x190);
302 item.setTitle("Crane up");
304 else if (item.getTitle().equals("Magnet on")) {
306 item.setTitle("Magnet off");
308 else if (item.getTitle().equals("Magnet off")) {
310 item.setTitle("Magnet on");
312 else if (item.getTitle().equals("Voltage monitor")) {
313 if (pwr_voltage == null)
314 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
316 voltageDialog.show();
318 else if (item.getTitle().equals("About")) {
321 else if (item.getTitle().equals("Exit")) {
328 private class HandleAccelerometer implements SensorEventListener {
331 public void onAccuracyChanged(Sensor sensor, int accuracy) {}
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]);