X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroid.java;h=ea3bbae65d69d4a678432bcb4e72e7447a1c825d;hb=d81f94fd5339d513de9bde5a2e19f8eca526344f;hp=855133253cd36e6ae142c3316698cae48fb7dc4d;hpb=39af826ce9032e339929eb7917b1d29c87d03f69;p=fw%2Faltos diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java index 85513325..ea3bbae6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java @@ -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); @@ -564,22 +583,15 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, mAgeOldColor = getResources().getColor(R.color.old_color); } - private boolean ensureBluetooth() { + private void ensureBluetooth() { // Get local Bluetooth adapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - // If the adapter is null, then Bluetooth is not supported - if (mBluetoothAdapter == null) { - Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show(); - return false; - } - - if (!mBluetoothAdapter.isEnabled()) { + /* if there is a BT adapter and it isn't turned on, then turn it on */ + if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) { Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableIntent, AltosDroid.REQUEST_ENABLE_BT); } - - return true; } private boolean check_usb() { @@ -645,9 +657,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, return; } AltosDebug.debug("Starting by looking for bluetooth devices"); - if (ensureBluetooth()) - return; - finish(); + ensureBluetooth(); } } @@ -690,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); } @@ -738,21 +749,48 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, if (resultCode == Activity.RESULT_OK) { // Bluetooth is now enabled, so set up a chat session //setupChat(); + AltosDebug.debug("BT enabled"); + bluetoothEnabled(data); } else { // User did not enable Bluetooth or an error occured - AltosDebug.error("BT not enabled"); - stopService(new Intent(AltosDroid.this, TelemetryService.class)); - Toast.makeText(this, R.string.bt_not_enabled, Toast.LENGTH_SHORT).show(); - finish(); + 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; @@ -767,6 +805,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } } + private void bluetoothEnabled(Intent data) { + try { + mService.send(Message.obtain(null, TelemetryService.MSG_BLUETOOTH_ENABLED, null)); + } catch (RemoteException e) { + AltosDebug.debug("send BT enabled message failed"); + } + } + private void connectDevice(Intent data) { // Attempt to connect to the device try { @@ -789,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; } } @@ -907,11 +976,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, Intent serverIntent = null; switch (item.getItemId()) { case R.id.connect_scan: - if (ensureBluetooth()) { - // Launch the DeviceListActivity to see devices and do scan - serverIntent = new Intent(this, DeviceListActivity.class); - startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE); - } + ensureBluetooth(); + // Launch the DeviceListActivity to see devices and do scan + serverIntent = new Intent(this, DeviceListActivity.class); + startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE); return true; case R.id.disconnect: /* Disconnect the device @@ -923,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 @@ -950,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]; @@ -1028,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; }