altosdroid: Split setup functions to separate dialog
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosDroid.java
index 4f1dcb1a3b441cee951af66fd9728ba060e6eaf8..ea3bbae65d69d4a678432bcb4e72e7447a1c825d 100644 (file)
@@ -64,14 +64,26 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
 
        public static final int MSG_STATE           = 1;
        public static final int MSG_UPDATE_AGE      = 2;
+       public static final int MSG_IDLE_MODE       = 3;
+       public static final int MSG_IGNITER_STATUS  = 4;
 
        // Intent request codes
        public static final int REQUEST_CONNECT_DEVICE = 1;
        public static final int REQUEST_ENABLE_BT      = 2;
        public static final int REQUEST_PRELOAD_MAPS   = 3;
-       public static final int REQUEST_MAP_TYPE       = 4;
+       public static final int REQUEST_IDLE_MODE      = 5;
+       public static final int REQUEST_IGNITERS       = 6;
+       public static final int REQUEST_SETUP          = 7;
 
-       public int map_type = AltosMap.maptype_hybrid;
+       public static final String EXTRA_IDLE_MODE = "idle_mode";
+       public static final String EXTRA_IDLE_RESULT = "idle_result";
+       public static final String EXTRA_TELEMETRY_SERVICE = "telemetry_service";
+
+       // Setup result bits
+       public static final int SETUP_BAUD = 1;
+       public static final int SETUP_UNITS = 2;
+       public static final int SETUP_MAP_SOURCE = 4;
+       public static final int SETUP_MAP_TYPE = 8;
 
        public static FragmentManager   fm;
 
@@ -100,6 +112,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
        private double frequency;
        private int telemetry_rate;
 
+       private boolean idle_mode = false;
+
        public Location location = null;
 
        // Tabs
@@ -146,6 +160,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                        case MSG_UPDATE_AGE:
                                ad.update_age();
                                break;
+                       case MSG_IDLE_MODE:
+                               ad.idle_mode = (Boolean) msg.obj;
+                               ad.update_state(null);
+                               break;
                        }
                }
        };
@@ -216,8 +234,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                switch (telemetry_state.connect) {
                case TelemetryState.CONNECT_CONNECTED:
                        if (telemetry_state.config != null) {
-                               String str = String.format("S/N %d %6.3f MHz", telemetry_state.config.serial,
-                                                          telemetry_state.frequency);
+                               String str = String.format("S/N %d %6.3f MHz%s", telemetry_state.config.serial,
+                                                          telemetry_state.frequency, idle_mode ? " (idle)" : "");
                                if (telemetry_state.telemetry_rate != AltosLib.ao_telemetry_rate_38400)
                                        str = str.concat(String.format(" %d bps",
                                                                       AltosLib.ao_telemetry_rate_values[telemetry_state.telemetry_rate]));
@@ -444,7 +462,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                                mCallsignView.setText(state.callsign);
                        }
                        if (saved_state == null || state.serial != saved_state.serial) {
-                               mSerialView.setText(String.format("%d", state.serial));
+                               if (state.serial == AltosLib.MISSING)
+                                       mSerialView.setText("");
+                               else
+                                       mSerialView.setText(String.format("%d", state.serial));
                        }
                        if (saved_state == null || state.flight != saved_state.flight) {
                                if (state.flight == AltosLib.MISSING)
@@ -461,7 +482,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                                }
                        }
                        if (saved_state == null || state.rssi != saved_state.rssi) {
-                               mRSSIView.setText(String.format("%d", state.rssi));
+                               if (state.rssi == AltosLib.MISSING)
+                                       mRSSIView.setText("");
+                               else
+                                       mRSSIView.setText(String.format("%d", state.rssi));
                        }
                }
 
@@ -514,11 +538,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                return tab_view;
        }
 
-       public void set_map_source(int source) {
-               for (AltosDroidTab mTab : mTabs)
-                       mTab.set_map_source(source);
-       }
-
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
@@ -681,9 +700,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
 
                location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
 
-               AltosDebug.debug("Resume, location is %f,%f\n",
-                                location.getLatitude(),
-                                location.getLongitude());
+               if (location != null)
+                       AltosDebug.debug("Resume, location is %f,%f\n",
+                                        location.getLatitude(),
+                                        location.getLongitude());
 
                update_ui(telemetry_state, saved_state);
        }
@@ -736,13 +756,41 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                                AltosDebug.debug("BT not enabled");
                        }
                        break;
-               case REQUEST_MAP_TYPE:
+               case REQUEST_IDLE_MODE:
+                       if (resultCode == Activity.RESULT_OK)
+                               idle_mode(data);
+                       break;
+               case REQUEST_IGNITERS:
+                       break;
+               case REQUEST_SETUP:
                        if (resultCode == Activity.RESULT_OK)
-                               set_map_type(data);
+                               note_setup_changes(data);
                        break;
                }
        }
 
+       private void note_setup_changes(Intent data) {
+               int changes = data.getIntExtra(SetupActivity.EXTRA_SETUP_CHANGES, 0);
+
+               if ((changes & SETUP_BAUD) != 0) {
+                       try {
+                               mService.send(Message.obtain(null, TelemetryService.MSG_SETBAUD,
+                                                            AltosPreferences.telemetry_rate(1)));
+                       } catch (RemoteException re) {
+                       }
+               }
+               if ((changes & SETUP_UNITS) != 0) {
+                       /* nothing to do here */
+               }
+               if ((changes & SETUP_MAP_SOURCE) != 0) {
+                       /* nothing to do here */
+               }
+               if ((changes & SETUP_MAP_TYPE) != 0) {
+                       /* nothing to do here */
+               }
+               set_switch_time();
+       }
+
        private void connectUsb(UsbDevice device) {
                if (mService == null)
                        pending_usb_device = device;
@@ -787,14 +835,37 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                }
        }
 
-       private void set_map_type(Intent data) {
-               int type = data.getIntExtra(MapTypeActivity.EXTRA_MAP_TYPE, -1);
+       private void idle_mode(Intent data) {
+               int type = data.getIntExtra(IdleModeActivity.EXTRA_IDLE_RESULT, -1);
+               Message msg;
 
-               AltosDebug.debug("intent set_map_type %d\n", type);
-               if (type != -1) {
-                       map_type = type;
-                       for (AltosDroidTab mTab : mTabs)
-                               mTab.set_map_type(map_type);
+               AltosDebug.debug("intent idle_mode %d", type);
+               switch (type) {
+               case IdleModeActivity.IDLE_MODE_CONNECT:
+                       msg = Message.obtain(null, TelemetryService.MSG_MONITOR_IDLE_START);
+                       try {
+                               mService.send(msg);
+                       } catch (RemoteException re) {
+                       }
+                       break;
+               case IdleModeActivity.IDLE_MODE_DISCONNECT:
+                       msg = Message.obtain(null, TelemetryService.MSG_MONITOR_IDLE_STOP);
+                       try {
+                               mService.send(msg);
+                       } catch (RemoteException re) {
+                       }
+                       break;
+               case IdleModeActivity.IDLE_MODE_REBOOT:
+                       msg = Message.obtain(null, TelemetryService.MSG_REBOOT);
+                       try {
+                               mService.send(msg);
+                       } catch (RemoteException re) {
+                       }
+                       break;
+               case IdleModeActivity.IDLE_MODE_IGNITERS:
+                       Intent serverIntent = new Intent(this, IgniterActivity.class);
+                       startActivityForResult(serverIntent, REQUEST_IGNITERS);
+                       break;
                }
        }
 
@@ -920,6 +991,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                        disconnectDevice();
                        finish();
                        return true;
+               case R.id.setup:
+                       serverIntent = new Intent(this, SetupActivity.class);
+                       startActivityForResult(serverIntent, REQUEST_SETUP);
+                       return true;
                case R.id.select_freq:
                        // Set the TBT radio frequency
 
@@ -947,44 +1022,6 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
                        AlertDialog alert_freq = builder_freq.create();
                        alert_freq.show();
                        return true;
-               case R.id.select_rate:
-                       // Set the TBT baud rate
-
-                       final String[] rates = {
-                               "38400",
-                               "9600",
-                               "2400",
-                       };
-
-                       AlertDialog.Builder builder_rate = new AlertDialog.Builder(this);
-                       builder_rate.setTitle("Pick a baud rate");
-                       builder_rate.setItems(rates,
-                                        new DialogInterface.OnClickListener() {
-                                                public void onClick(DialogInterface dialog, int item) {
-                                                        setBaud(rates[item]);
-                                                }
-                                        });
-                       AlertDialog alert_rate = builder_rate.create();
-                       alert_rate.show();
-                       return true;
-               case R.id.change_units:
-                       boolean imperial = AltosPreferences.imperial_units();
-                       AltosPreferences.set_imperial_units(!imperial);
-                       return true;
-               case R.id.preload_maps:
-                       serverIntent = new Intent(this, PreloadMapActivity.class);
-                       startActivityForResult(serverIntent, REQUEST_PRELOAD_MAPS);
-                       return true;
-               case R.id.map_type:
-                       serverIntent = new Intent(this, MapTypeActivity.class);
-                       startActivityForResult(serverIntent, REQUEST_MAP_TYPE);
-                       return true;
-               case R.id.map_source:
-                       int source = AltosDroidPreferences.map_source();
-                       int new_source = source == AltosDroidPreferences.MAP_SOURCE_ONLINE ? AltosDroidPreferences.MAP_SOURCE_OFFLINE : AltosDroidPreferences.MAP_SOURCE_ONLINE;
-                       AltosDroidPreferences.set_map_source(new_source);
-                       set_map_source(new_source);
-                       return true;
                case R.id.select_tracker:
                        if (serials != null) {
                                String[] trackers = new String[serials.length+1];
@@ -1025,6 +1062,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
 
                        }
                        return true;
+               case R.id.idle_mode:
+                       serverIntent = new Intent(this, IdleModeActivity.class);
+                       serverIntent.putExtra(EXTRA_IDLE_MODE, idle_mode);
+                       startActivityForResult(serverIntent, REQUEST_IDLE_MODE);
+                       return true;
                }
                return false;
        }