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.DialogInterface.OnDismissListener;
11 import android.content.SharedPreferences;
12 import android.content.pm.ActivityInfo;
13 import android.hardware.Sensor;
14 import android.hardware.SensorEvent;
15 import android.hardware.SensorEventListener;
16 import android.hardware.SensorManager;
17 import android.net.wifi.WifiInfo;
18 import android.net.wifi.WifiManager;
19 import android.net.wifi.WifiManager.WifiLock;
20 import android.os.AsyncTask;
21 import android.os.Bundle;
22 import android.os.Handler;
23 import android.os.Message;
24 import android.os.PowerManager;
25 import android.os.PowerManager.WakeLock;
26 import android.text.format.Formatter;
27 import android.view.LayoutInflater;
28 import android.view.Menu;
29 import android.view.MenuItem;
30 import android.view.View;
31 import android.widget.EditText;
32 import android.widget.TextView;
34 public class MainActivity extends Activity {
35 private AlertDialog voltageDialog = null;
36 private AlertDialog aboutDialog = null;
37 private AlertDialog managersDialog = null;
38 private EditText managersField = null;
39 private TextView ownIP = null;
40 private NetworkInfo wifiInfoTask = null;
41 static EditText voltage33 = null;
42 static EditText voltage50 = null;
43 static EditText voltage80 = null;
44 static EditText voltageBAT = null;
45 static Handler dialogHandler = new Handler() {
47 public void handleMessage(Message msg) {
48 double[] values = msg.getData().getDoubleArray("voltages");
50 if (voltage33 != null) {
51 voltage33.setText(Double.toString(values[0]));
53 if (voltage50 != null) {
54 voltage50.setText(Double.toString(values[1]));
56 if (voltage80 != null) {
57 voltage80.setText(Double.toString(values[2]));
59 if (voltageBAT != null) {
60 voltageBAT.setText(Double.toString(values[3]));
66 private Manager manager = null;
67 private String mgrs = null;
68 private MotionSpeedPublish motion_speed_publ = null;
69 private MotionSpeedSubscribe motion_speed_subs = null;
70 private HokuyoScanSubscribe hokuyo_scan = null;
71 private PwrVoltageSubscribe pwr_voltage = null;
72 private MagnetCmdPublish magnet_cmd = null;
73 private CraneCmdPublish crane_cmd = null;
74 private SensorManager mSensorManager = null;
75 private Sensor mGravity = null;
76 private SensorEventListener accel = null;
77 private PowerManager mPowerManager = null;
78 private WifiManager mWifiManager = null;
79 private WakeLock mWakeLock = null;
80 private WakeLock mDimLock = null;
81 private WifiLock mWifiLock = null;
82 private DomainApp appDomain = null;
83 private HokuyoView hokuyo_view = null;
84 private MenuItem speed_publ_item = null;
85 private MenuItem speed_subs_item = null;
86 private MenuItem hokuyo_item = null;
87 private SharedPreferences prefs = null;
90 System.loadLibrary("jorte");
94 protected void onPause() {
97 if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
98 motion_speed_publ.cancel();
99 mSensorManager.unregisterListener(accel);
100 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
101 speed_publ_item.setChecked(false);
106 if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
107 hokuyo_view.runMotion(false);
108 motion_speed_subs.cancel();
109 hokuyo_view.invalidate();
110 speed_subs_item.setChecked(false);
115 if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
116 hokuyo_view.run(false);
117 hokuyo_scan.cancel();
118 hokuyo_view.invalidate();
119 hokuyo_item.setChecked(false);
126 protected void onDestroy() {
129 if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
130 if (voltageDialog.isShowing())
131 voltageDialog.dismiss();
134 if (crane_cmd != null && !crane_cmd.isCancelled()) {
138 if (magnet_cmd != null && !crane_cmd.isCancelled()) {
142 if (appDomain != null) {
147 if (manager != null) {
154 public void onCreate(Bundle savedInstanceState) {
155 super.onCreate(savedInstanceState);
156 setContentView(R.layout.hokuyo_view);
158 mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
159 mWakeLock = mPowerManager.newWakeLock(
160 PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
161 getClass().getName() + " Bright");
162 mDimLock = mPowerManager.newWakeLock(
163 PowerManager.SCREEN_DIM_WAKE_LOCK,
164 getClass().getName() + " Dim");
166 mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
167 mWifiLock = mWifiManager.createWifiLock(
168 android.os.Build.VERSION.SDK_INT >= 12
169 ? WifiManager.WIFI_MODE_FULL_HIGH_PERF
170 : WifiManager.WIFI_MODE_FULL, getClass().getName());
172 prefs = getSharedPreferences("prefs", 0);
173 mgrs = prefs.getString("managers", "10.1.1.1");
175 AlertDialog.Builder voltageBuilder = new AlertDialog.Builder(this);
176 LayoutInflater inflater = getLayoutInflater();
177 View voltageView = inflater.inflate(R.layout.status_dialog, null);
178 voltageBuilder.setView(voltageView);
179 voltageBuilder.setPositiveButton("OK",null);
180 voltageBuilder.setTitle("Voltages");
181 voltageDialog = voltageBuilder.create();
182 voltageDialog.setOnDismissListener(new OnDismissListener(){
184 public void onDismiss(DialogInterface arg0) {
185 voltageDialog.dismiss();
186 pwr_voltage.cancel();
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 ownIP = (TextView)managersView.findViewById(R.id.ownIP);
204 managersField = (EditText)managersView.findViewById(R.id.managers);
205 managersField.setText(mgrs);
207 managersBuilder.setView(managersView);
208 managersBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
210 public void onClick(DialogInterface dialog, int which) {
211 SharedPreferences.Editor editor = prefs.edit();
212 mgrs = managersField.getText().toString();
213 editor.putString("managers", mgrs);
218 manager = new Manager(mgrs);
220 managersDialog.dismiss();
223 managersBuilder.setNeutralButton("Cancel", null);
224 managersBuilder.setTitle("Set fellow managers");
225 managersDialog = managersBuilder.create();
226 managersDialog.setOnDismissListener(new OnDismissListener() {
228 public void onDismiss(DialogInterface arg0) {
229 managersField.setText(mgrs);
230 wifiInfoTask.cancel(false);
234 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
235 mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
237 hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
239 manager = new Manager(mgrs);
241 appDomain = new DomainApp();
242 magnet_cmd = new MagnetCmdPublish(appDomain);
244 crane_cmd = new CraneCmdPublish(appDomain);
249 public boolean onCreateOptionsMenu(Menu menu) {
250 getMenuInflater().inflate(R.menu.activity_main, menu);
256 public boolean onOptionsItemSelected (MenuItem item) {
257 if(item.getTitle().equals("Motion control")) {
258 if (!item.isChecked()) {
261 accel = new HandleAccelerometer();
262 mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
263 if (motion_speed_publ == null)
264 motion_speed_publ = new MotionSpeedPublish(appDomain);
265 motion_speed_publ.start();
266 speed_publ_item = item;
267 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
268 item.setChecked(true);
271 mSensorManager.unregisterListener(accel);
272 motion_speed_publ.cancel();
273 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
274 item.setChecked(false);
279 else if (item.getTitle().equals("Speed monitor")) {
280 if(!item.isChecked()) {
283 if (motion_speed_subs == null)
284 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
285 motion_speed_subs.start();
286 hokuyo_view.runMotion(true);
287 hokuyo_view.invalidate();
288 speed_subs_item = item;
289 item.setChecked(true);
292 hokuyo_view.runMotion(false);
293 motion_speed_subs.cancel();
294 hokuyo_view.invalidate();
295 item.setChecked(false);
300 else if (item.getTitle().equals("Hokuyo")) {
301 if (!item.isChecked()) {
304 if (hokuyo_scan == null)
305 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
307 hokuyo_view.run(true);
308 hokuyo_view.invalidate();
310 item.setChecked(true);
313 hokuyo_view.run(false);
314 hokuyo_scan.cancel();
315 hokuyo_view.invalidate();
316 item.setChecked(false);
321 else if (item.getTitle().equals("Crane: up")) {
322 crane_cmd.send(0x190);
323 item.setTitle("Crane: down");
325 else if (item.getTitle().equals("Crane: down")) {
326 crane_cmd.send(0x100);
327 item.setTitle("Crane: up");
329 else if (item.getTitle().equals("Magnet")) {
330 if (!item.isChecked()) {
332 item.setChecked(true);
336 item.setChecked(false);
339 else if (item.getTitle().equals("Voltage monitor")) {
341 if (pwr_voltage == null)
342 pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
344 voltageDialog.show();
346 else if (item.getTitle().equals("Fellow managers")) {
347 wifiInfoTask = new NetworkInfo();
349 managersDialog.show();
350 wifiInfoTask.execute();
352 else if (item.getTitle().equals("About")) {
355 else if (item.getTitle().equals("Exit")) {
362 private class HandleAccelerometer implements SensorEventListener {
365 public void onAccuracyChanged(Sensor sensor, int accuracy) {}
368 public void onSensorChanged(SensorEvent event) {
369 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
370 if (motion_speed_publ != null)
371 motion_speed_publ.setSpeed(event.values[0], event.values[1]);
376 private class NetworkInfo extends AsyncTask<Void, String, Void> {
378 protected Void doInBackground(Void... arg0) {
379 while (!isCancelled()) {
380 WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
381 int ip = wifiInfo.getIpAddress();
382 String ipAddress = Formatter.formatIpAddress(ip);
383 String ssid = wifiInfo.getSSID();
385 publishProgress("\nOwn IP Address: " + ipAddress + "\nNetwork SSID: " + ssid);
389 } catch (InterruptedException e) {
398 protected void onProgressUpdate(String... values) {
399 super.onProgressUpdate(values);
401 ownIP.setText(values[0]);