]> rtime.felk.cvut.cz Git - orte.git/blob - orte/Robot_Demo/src/org/ocera/orte/demo/MainActivity.java
ROBOT_DEMO: add motion speed subscriber
[orte.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.content.Context;
8 import android.content.pm.ActivityInfo;
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.os.PowerManager;
15 import android.os.PowerManager.WakeLock;
16 import android.view.Menu;
17 import android.view.MenuItem;
18  
19 public class MainActivity extends Activity {
20         
21         private Manager manager = null;
22     private String[] mgrs = {"192.168.1.5","192.168.1.8","192.168.1.29","10.1.1.1"};
23         private MotionSpeedPublish motion_speed_publ = null;
24         private MotionSpeedSubscribe motion_speed_subs = null;
25         private HokuyoScanSubscribe hokuyo_scan = null;
26     private SensorManager mSensorManager = null;
27     private Sensor mGravity = null;
28     private SensorEventListener accel = null;
29     private PowerManager mPowerManager = null;
30     private WakeLock mWakeLock = null;
31     private DomainApp appDomain = null;
32     private HokuyoView hokuyo_view = null;
33     private MenuItem speed_publ_item = null;
34     private MenuItem speed_subs_item = null;
35     private MenuItem hokuyo_item = null;
36
37     static {
38         System.loadLibrary("jorte");     
39     }
40
41     @Override
42     protected void onResume() {
43         super.onResume();
44
45         mWakeLock.acquire();
46     }
47
48     @Override
49     protected void onPause() {
50         super.onPause();
51         
52         if (motion_speed_publ != null && !motion_speed_publ.isCancelled()) {
53                 motion_speed_publ.cancel();
54             mSensorManager.unregisterListener(accel);
55             this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
56                 speed_publ_item.setTitle("Start motion control");
57         }
58         
59         if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
60                 hokuyo_view.runMotion(false);
61                 motion_speed_subs.cancel();
62                 hokuyo_view.invalidate();
63                 speed_subs_item.setTitle("Start motion monitor");
64         }
65
66         if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
67                         hokuyo_view.run(false);
68                         hokuyo_scan.cancel();
69                         hokuyo_view.invalidate();
70                         hokuyo_item.setTitle("Start LRF");
71         }
72         
73         mWakeLock.release();
74     }
75     
76     @Override
77     protected void onDestroy() {
78         super.onDestroy();
79         
80         if (appDomain != null) {
81                 appDomain.destroy();
82                 appDomain = null;
83         }
84         
85         if (manager != null) {
86                 manager.destroy();
87                 manager = null;
88         }
89     }
90         
91         @Override
92     public void onCreate(Bundle savedInstanceState) {
93         super.onCreate(savedInstanceState);
94         setContentView(R.layout.hokuyo_view);
95         
96         mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
97         mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
98         
99         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
100         mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
101         
102         hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
103         
104         manager = new Manager(mgrs);
105
106         appDomain = new DomainApp();
107     }
108     
109         @Override
110         public boolean onCreateOptionsMenu(Menu menu) {
111                 getMenuInflater().inflate(R.menu.activity_main, menu);
112
113                 return true;
114         }
115         
116         @Override
117         public boolean onOptionsItemSelected (MenuItem item) {
118                 System.out.println(item.getTitle());
119                 
120                 if(item.getTitle().equals("Start motion control")) {
121                         accel = new HandleAccelerometer();
122                         mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
123                         if (motion_speed_publ == null)
124                                 motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
125                         motion_speed_publ.start();
126                         speed_publ_item = item;
127                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
128                         item.setTitle("Stop motion control");
129                 }
130                 else if (item.getTitle().equals("Stop motion control")) {
131                         mSensorManager.unregisterListener(accel);
132                         motion_speed_publ.cancel();
133                         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
134                         item.setTitle("Start motion control");
135                 }
136                 else if (item.getTitle().equals("Start motion monitor")) {
137                         if (motion_speed_subs == null)
138                                 motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
139                         motion_speed_subs.start();
140                         hokuyo_view.runMotion(true);
141                         hokuyo_view.invalidate();
142                         speed_subs_item = item;
143                         item.setTitle("Stop motion monitor");
144                 }
145                 else if (item.getTitle().equals("Stop motion monitor")) {
146                         hokuyo_view.runMotion(false);
147                         motion_speed_subs.cancel();
148                         hokuyo_view.invalidate();
149                         item.setTitle("Start motion monitor");
150                 }
151                 else if (item.getTitle().equals("Start LRF")) {
152                         if (hokuyo_scan == null)
153                                 hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
154                         hokuyo_scan.start();
155                         hokuyo_view.run(true);
156                         hokuyo_view.invalidate();
157                         hokuyo_item = item;
158                         item.setTitle("Stop LRF");
159                 }
160                 else if (item.getTitle().equals("Stop LRF")) {
161                         hokuyo_view.run(false);
162                         hokuyo_scan.cancel();
163                         hokuyo_view.invalidate();
164                         item.setTitle("Start LRF");
165                 }
166                 else if (item.getTitle().equals("Lift up")) {
167                         
168                 }
169                 else if (item.getTitle().equals("Lift down")) {
170                         
171                 }
172                 else if (item.getTitle().equals("Magnet on")) {
173                         
174                 }
175                 else if (item.getTitle().equals("Magnet off")) {
176                         
177                 }
178                 else if (item.getTitle().equals("Exit")) {
179                         finish();
180                 }
181                 
182                 return true;
183         }
184         
185     private class HandleAccelerometer implements SensorEventListener {
186
187         @Override
188         public void onAccuracyChanged(Sensor sensor, int accuracy) {}
189
190         @Override
191         public void onSensorChanged(SensorEvent event) {
192                  if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
193                          if (motion_speed_publ != null)
194                                  motion_speed_publ.setSpeed(event.values[0], event.values[1]);
195                  }
196         }
197     }
198 }