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