import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.DialogInterface.OnDismissListener;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.hardware.Sensor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.text.format.Formatter;
+import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
private AlertDialog aboutDialog = null;
private AlertDialog managersDialog = null;
private EditText managersField = null;
+ private TextView ownIP = null;
+ private NetworkInfo wifiInfoTask = null;
static EditText voltage33 = null;
static EditText voltage50 = null;
static EditText voltage80 = null;
private PowerManager mPowerManager = null;
private WifiManager mWifiManager = null;
private WakeLock mWakeLock = null;
+ private WakeLock mDimLock = null;
private WifiLock mWifiLock = null;
private DomainApp appDomain = null;
private HokuyoView hokuyo_view = null;
- private MenuItem speed_publ_item = null;
- private MenuItem speed_subs_item = null;
- private MenuItem hokuyo_item = null;
private SharedPreferences prefs = null;
+ private GestureDetector gDetector = null;
static {
System.loadLibrary("jorte");
}
- @Override
- protected void onResume() {
- super.onResume();
-
- mWakeLock.acquire();
- mWifiLock.acquire();
- }
-
@Override
protected void onPause() {
super.onPause();
motion_speed_publ.cancel();
mSensorManager.unregisterListener(accel);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- speed_publ_item.setTitle("Start motion control");
+ mDimLock.release();
+ mWifiLock.release();
}
if (motion_speed_subs != null && !motion_speed_subs.isCancelled()) {
hokuyo_view.runMotion(false);
motion_speed_subs.cancel();
hokuyo_view.invalidate();
- speed_subs_item.setTitle("Start motion monitor");
+ mWakeLock.release();
+ mWifiLock.release();
}
if (hokuyo_scan != null && !hokuyo_scan.isCancelled()) {
hokuyo_view.run(false);
hokuyo_scan.cancel();
hokuyo_view.invalidate();
- hokuyo_item.setTitle("Start LRF");
+ mWakeLock.release();
+ mWifiLock.release();
}
-
- if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
- if (voltageDialog.isShowing())
- voltageDialog.dismiss();
- pwr_voltage.cancel();
- }
-
- mWakeLock.release();
- mWifiLock.release();
}
@Override
protected void onDestroy() {
super.onDestroy();
+
+ if (pwr_voltage != null && !pwr_voltage.isCancelled()) {
+ if (voltageDialog.isShowing())
+ voltageDialog.dismiss();
+ }
if (crane_cmd != null && !crane_cmd.isCancelled()) {
crane_cmd.cancel();
}
}
- @SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(
- PowerManager.SCREEN_BRIGHT_WAKE_LOCK
- | PowerManager.ACQUIRE_CAUSES_WAKEUP
- | PowerManager.ON_AFTER_RELEASE,
- getClass().getName());
+ PowerManager.SCREEN_BRIGHT_WAKE_LOCK,
+ getClass().getName() + " Bright");
+ mDimLock = mPowerManager.newWakeLock(
+ PowerManager.SCREEN_DIM_WAKE_LOCK,
+ getClass().getName() + " Dim");
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
- mWifiLock = mWifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, getClass().getName());
- WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
- int ip = wifiInfo.getIpAddress();
- String ipAddress = Formatter.formatIpAddress(ip);
+ mWifiLock = mWifiManager.createWifiLock(
+ android.os.Build.VERSION.SDK_INT >= 12
+ ? WifiManager.WIFI_MODE_FULL_HIGH_PERF
+ : WifiManager.WIFI_MODE_FULL, getClass().getName());
prefs = getSharedPreferences("prefs", 0);
mgrs = prefs.getString("managers", "10.1.1.1");
AlertDialog.Builder voltageBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View voltageView = inflater.inflate(R.layout.status_dialog, null);
- voltageBuilder.setCancelable(false);
voltageBuilder.setView(voltageView);
- voltageBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
+ voltageBuilder.setPositiveButton("OK",null);
+ voltageBuilder.setTitle("Voltages");
+ voltageDialog = voltageBuilder.create();
+ voltageDialog.setOnDismissListener(new OnDismissListener(){
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onDismiss(DialogInterface arg0) {
voltageDialog.dismiss();
pwr_voltage.cancel();
+ mDimLock.release();
}
});
- voltageBuilder.setTitle("Voltages");
- voltageDialog = voltageBuilder.create();
voltage33 = (EditText)voltageView.findViewById(R.id.editText1);
voltage50 = (EditText)voltageView.findViewById(R.id.editText2);
voltage80 = (EditText)voltageView.findViewById(R.id.editText3);
AlertDialog.Builder managersBuilder = new AlertDialog.Builder(this);
View managersView = inflater.inflate(R.layout.managers_view, null);
- TextView ownIP = (TextView)managersView.findViewById(R.id.ownIP);
- ownIP.setText("\nOwn IP Address: " + ipAddress);
+ ownIP = (TextView)managersView.findViewById(R.id.ownIP);
managersField = (EditText)managersView.findViewById(R.id.managers);
managersField.setText(mgrs);
- managersBuilder.setCancelable(false);
+
managersBuilder.setView(managersView);
managersBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor editor = prefs.edit();
mgrs = managersField.getText().toString();
- System.out.println(mgrs);
editor.putString("managers", mgrs);
editor.commit();
- manager = new Manager(mgrs);
-
- appDomain = new DomainApp();
- magnet_cmd = new MagnetCmdPublish(appDomain);
- magnet_cmd.start();
- crane_cmd = new CraneCmdPublish(appDomain);
- crane_cmd.start();
+ if (manager != null)
+ manager.destroy();
+ manager = new Manager(mgrs);
+
managersDialog.dismiss();
}
});
+ managersBuilder.setNeutralButton("Cancel", null);
managersBuilder.setTitle("Set fellow managers");
managersDialog = managersBuilder.create();
+ managersDialog.setOnDismissListener(new OnDismissListener() {
+ @Override
+ public void onDismiss(DialogInterface arg0) {
+ managersField.setText(mgrs);
+ wifiInfoTask.cancel(false);
+ }
+ });
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
hokuyo_view = (HokuyoView) findViewById(R.id.hokuyo_view);
-
- managersDialog.show();
+ gDetector = new GestureDetector(hokuyo_view.getContext(), new HokuyoGestures());
+ hokuyo_view.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return gDetector.onTouchEvent(event);
+ }
+
+ });
+
+ manager = new Manager(mgrs);
+
+ appDomain = new DomainApp();
+ magnet_cmd = new MagnetCmdPublish(appDomain);
+ magnet_cmd.start();
+ crane_cmd = new CraneCmdPublish(appDomain);
+ crane_cmd.start();
}
@Override
@Override
public boolean onOptionsItemSelected (MenuItem item) {
- System.out.println(item.getTitle());
-
- if(item.getTitle().equals("Start motion control")) {
- accel = new HandleAccelerometer();
- mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
- if (motion_speed_publ == null)
- motion_speed_publ = new MotionSpeedPublish(mGravity.getMaximumRange(),appDomain);
- motion_speed_publ.start();
- speed_publ_item = item;
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- item.setTitle("Stop motion control");
- }
- else if (item.getTitle().equals("Stop motion control")) {
- mSensorManager.unregisterListener(accel);
- motion_speed_publ.cancel();
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
- item.setTitle("Start motion control");
- }
- else if (item.getTitle().equals("Start motion monitor")) {
- if (motion_speed_subs == null)
- motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
- motion_speed_subs.start();
- hokuyo_view.runMotion(true);
- hokuyo_view.invalidate();
- speed_subs_item = item;
- item.setTitle("Stop motion monitor");
- }
- else if (item.getTitle().equals("Stop motion monitor")) {
- hokuyo_view.runMotion(false);
- motion_speed_subs.cancel();
- hokuyo_view.invalidate();
- item.setTitle("Start motion monitor");
- }
- else if (item.getTitle().equals("Start LRF")) {
- if (hokuyo_scan == null)
- hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
- hokuyo_scan.start();
- hokuyo_view.run(true);
- hokuyo_view.invalidate();
- hokuyo_item = item;
- item.setTitle("Stop LRF");
- }
- else if (item.getTitle().equals("Stop LRF")) {
- hokuyo_view.run(false);
- hokuyo_scan.cancel();
- hokuyo_view.invalidate();
- item.setTitle("Start LRF");
- }
- else if (item.getTitle().equals("Crane up")) {
- crane_cmd.send(0x100);
- item.setTitle("Crane down");
- }
- else if (item.getTitle().equals("Crane down")) {
+ if (item.getTitle().equals("Crane: up")) {
crane_cmd.send(0x190);
- item.setTitle("Crane up");
+ item.setTitle("Crane: down");
}
- else if (item.getTitle().equals("Magnet on")) {
- magnet_cmd.send(1);
- item.setTitle("Magnet off");
+ else if (item.getTitle().equals("Crane: down")) {
+ crane_cmd.send(0x100);
+ item.setTitle("Crane: up");
}
- else if (item.getTitle().equals("Magnet off")) {
- magnet_cmd.send(0);
- item.setTitle("Magnet on");
+ else if (item.getTitle().equals("Magnet")) {
+ if (!item.isChecked()) {
+ magnet_cmd.send(1);
+ item.setChecked(true);
+ }
+ else {
+ magnet_cmd.send(0);
+ item.setChecked(false);
+ }
}
else if (item.getTitle().equals("Voltage monitor")) {
+ mDimLock.acquire();
if (pwr_voltage == null)
pwr_voltage = new PwrVoltageSubscribe(appDomain, dialogHandler);
pwr_voltage.start();
voltageDialog.show();
}
+ else if (item.getTitle().equals("Fellow managers")) {
+ wifiInfoTask = new NetworkInfo();
+
+ managersDialog.show();
+ wifiInfoTask.execute();
+ }
else if (item.getTitle().equals("About")) {
aboutDialog.show();
}
}
}
}
+
+// hokuyo_view.setOnTouchListener(new View.OnTouchListener() {
+ private class HokuyoGestures extends GestureDetector.SimpleOnGestureListener {
+
+ @Override
+ public boolean onSingleTapConfirmed(MotionEvent event) {
+ // urceni orientace HokuyoView a poctu pixelu, ktere zabira hokuyo
+ double norm = (double)hokuyo_view.getWidth()/(2*HokuyoView.COSINUS);
+ boolean isVertical = true;
+ if (norm > hokuyo_view.getHeight()) {
+ norm = HokuyoView.COSINUS*hokuyo_view.getHeight()*2;
+ norm = (hokuyo_view.getWidth() - norm)/2;
+ isVertical = false;
+ }
+ else
+ norm = hokuyo_view.getHeight() - norm;
+
+ // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti
+ double normSpeed = ((double)(isVertical ? hokuyo_view.getWidth() : hokuyo_view.getHeight())) * 0.375;
+
+ if (event.getYPrecision()*event.getY() < normSpeed &&
+ event.getXPrecision()*event.getX() < normSpeed) {
+ if(!hokuyo_view.isRunningMotion()) {
+ mWakeLock.acquire();
+ mWifiLock.acquire();
+ if (motion_speed_subs == null)
+ motion_speed_subs = new MotionSpeedSubscribe(appDomain, hokuyo_view);
+ motion_speed_subs.start();
+ hokuyo_view.runMotion(true);
+ hokuyo_view.invalidate();
+ }
+ else {
+ hokuyo_view.runMotion(false);
+ motion_speed_subs.cancel();
+ hokuyo_view.invalidate();
+ mWakeLock.release();
+ mWifiLock.release();
+ }
+ return true;
+ }
+
+ if ((isVertical && event.getYPrecision()*event.getY() > norm) ||
+ (!isVertical && event.getXPrecision()*event.getX() > norm &&
+ event.getXPrecision()*event.getX() < hokuyo_view.getWidth() - norm)) {
+ if (!hokuyo_view.isRunning()) {
+ mWakeLock.acquire();
+ mWifiLock.acquire();
+ hokuyo_view.setData(new int[681]);
+ if (hokuyo_scan == null)
+ hokuyo_scan = new HokuyoScanSubscribe(appDomain, hokuyo_view);
+ hokuyo_scan.start();
+ hokuyo_view.run(true);
+ hokuyo_view.invalidate();
+ }
+ else {
+ hokuyo_view.run(false);
+ hokuyo_scan.cancel();
+ hokuyo_view.invalidate();
+ mWakeLock.release();
+ mWifiLock.release();
+ }
+ return true;
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean onDown(MotionEvent e) {
+ return true;
+ }
+
+ @Override
+ public void onLongPress(MotionEvent event) {
+ // urceni poctu pixelu, ktere zabira ctverec monitoru rychlosti
+ double normSpeed = ((double)(hokuyo_view.getHeight() < hokuyo_view.getWidth() ? hokuyo_view.getHeight() : hokuyo_view.getWidth())) * 0.375;
+
+ if (event.getYPrecision()*event.getY() < normSpeed &&
+ event.getXPrecision()*event.getX() < normSpeed) {
+ if (motion_speed_publ == null || motion_speed_publ.isCancelled()) {
+ mDimLock.acquire();
+ mWifiLock.acquire();
+ accel = new HandleAccelerometer();
+ mSensorManager.registerListener(accel, mGravity, SensorManager.SENSOR_DELAY_GAME);
+ if (motion_speed_publ == null)
+ motion_speed_publ = new MotionSpeedPublish(appDomain);
+ motion_speed_publ.start();
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ }
+ else {
+ mSensorManager.unregisterListener(accel);
+ motion_speed_publ.cancel();
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
+ mDimLock.release();
+ mWifiLock.release();
+ }
+ }
+ }
+ }
+
+ private class NetworkInfo extends AsyncTask<Void, String, Void> {
+ @Override
+ protected Void doInBackground(Void... arg0) {
+ while (!isCancelled()) {
+ WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+ int ip = wifiInfo.getIpAddress();
+ String ipAddress = Formatter.formatIpAddress(ip);
+ String ssid = wifiInfo.getSSID();
+
+ publishProgress("\nOwn IP Address: " + ipAddress + "\nNetwork SSID: " + ssid);
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected void onProgressUpdate(String... values) {
+ super.onProgressUpdate(values);
+
+ ownIP.setText(values[0]);
+ }
+ }
}