X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosDroid.java;h=5caee5f87aab5323ea0032cf54f865649ff22a8b;hb=f6f6b53283d6a02cb62d3315d71e5a6911f59646;hp=0b354f637f7f37c45c4deb7d06819a8d55495129;hpb=79f2677143f85a2807b8d4e297f3617aafbd34da;p=fw%2Faltos diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java index 0b354f63..5caee5f8 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosDroid.java @@ -48,7 +48,7 @@ import android.location.LocationListener; import android.hardware.usb.*; import android.content.pm.PackageManager; import androidx.core.app.ActivityCompat; -import org.altusmetrum.altoslib_13.*; +import org.altusmetrum.altoslib_14.*; class SavedState { long received_time; @@ -95,12 +95,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, public static final int REQUEST_IGNITERS = 6; public static final int REQUEST_SETUP = 7; public static final int REQUEST_SELECT_TRACKER = 8; + public static final int REQUEST_DELETE_TRACKER = 9; public static final String EXTRA_IDLE_MODE = "idle_mode"; public static final String EXTRA_IDLE_RESULT = "idle_result"; public static final String EXTRA_FREQUENCY = "frequency"; public static final String EXTRA_TELEMETRY_SERVICE = "telemetry_service"; public static final String EXTRA_TRACKERS = "trackers"; + public static final String EXTRA_TRACKERS_TITLE = "trackers_title"; // Setup result bits public static final int SETUP_BAUD = 1; @@ -311,9 +313,23 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, if (new_telemetry_state != null) telemetry_state = new_telemetry_state; - if (selected_serial == 0 || telemetry_state.get(selected_serial) == null) { - AltosDebug.debug("selected serial set to %d", selected_serial); + if (selected_frequency != AltosLib.MISSING) { + AltosState selected_state = telemetry_state.get(selected_serial); + AltosState latest_state = telemetry_state.get(telemetry_state.latest_serial); + + if (selected_state != null && selected_state.frequency == selected_frequency) { + selected_frequency = AltosLib.MISSING; + } else if ((selected_state == null || selected_state.frequency != selected_frequency) && + (latest_state != null && latest_state.frequency == selected_frequency)) + { + selected_frequency = AltosLib.MISSING; + selected_serial = telemetry_state.latest_serial; + } + } + + if (!telemetry_state.containsKey(selected_serial)) { selected_serial = telemetry_state.latest_serial; + AltosDebug.debug("selected serial set to %d", selected_serial); } int shown_serial = selected_serial; @@ -614,7 +630,7 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, mStateView = (TextView) findViewById(R.id.state_value); mAgeView = (TextView) findViewById(R.id.age_value); mAgeNewColor = mAgeView.getTextColors().getDefaultColor(); - mAgeOldColor = getResources().getColor(R.color.old_color, getTheme()); + mAgeOldColor = getResources().getColor(R.color.old_color); } private void ensureBluetooth() { @@ -726,14 +742,23 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, private void enable_location_updates() { // Listen for GPS and Network position updates LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); - locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); - location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (locationManager != null) + { + try { + locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this); + location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + } catch (Exception e) { + locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, this); + location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); + } - if (location != null) - 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()); + AltosDebug.debug("Failed to get GPS updates\n"); + } update_ui(telemetry_state, state, true); } @@ -869,6 +894,10 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, if (resultCode == Activity.RESULT_OK) select_tracker(data); break; + case REQUEST_DELETE_TRACKER: + if (resultCode == Activity.RESULT_OK) + delete_track(data); + break; } } @@ -989,9 +1018,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, } double telem_frequency = 434.550; + double selected_frequency = AltosLib.MISSING; void setFrequency(double freq) { telem_frequency = freq; + selected_frequency = AltosLib.MISSING; try { mService.send(Message.obtain(null, TelemetryService.MSG_SETFREQUENCY, freq)); set_switch_time(); @@ -1064,36 +1095,44 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, select_tracker(serial, frequency); } - void touch_trackers(Integer[] serials) { - AlertDialog.Builder builder_tracker = new AlertDialog.Builder(this); - builder_tracker.setTitle("Select Tracker"); - - final Tracker[] my_trackers = new Tracker[serials.length + 1]; + void delete_track(int serial) { + try { + mService.send(Message.obtain(null, TelemetryService.MSG_DELETE_SERIAL, (Integer) serial)); + } catch (Exception ex) { + } + } - my_trackers[0] = new Tracker(null); + void delete_track(Intent data) { + int serial = data.getIntExtra(SelectTrackerActivity.EXTRA_SERIAL_NUMBER, 0); + if (serial != 0) + delete_track(serial); + } - for (int i = 0; i < serials.length; i++) { - AltosState s = telemetry_state.get(serials[i]); - my_trackers[i+1] = new Tracker(s); + void start_select_tracker(Tracker[] select_trackers, int title_id, int request) { + Intent intent = new Intent(this, SelectTrackerActivity.class); + AltosDebug.debug("put title id 0x%x %s", title_id, getResources().getString(title_id)); + intent.putExtra(EXTRA_TRACKERS_TITLE, title_id); + if (select_trackers != null) { + ArrayList tracker_array = new ArrayList(Arrays.asList(select_trackers)); + intent.putParcelableArrayListExtra(EXTRA_TRACKERS, tracker_array); + } else { + intent.putExtra(EXTRA_TRACKERS, (Parcelable[]) null); } - builder_tracker.setItems(my_trackers, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int item) { - if (item == 0) - select_tracker(0, 0.0); - else - select_tracker(my_trackers[item].serial, my_trackers[item].frequency); - } - }); - AlertDialog alert_tracker = builder_tracker.create(); - alert_tracker.show(); + startActivityForResult(intent, request); } - void delete_track(int serial) { - try { - mService.send(Message.obtain(null, TelemetryService.MSG_DELETE_SERIAL, (Integer) serial)); - } catch (Exception ex) { + void start_select_tracker(Tracker[] select_trackers) { + start_select_tracker(select_trackers, R.string.select_tracker, REQUEST_SELECT_TRACKER); + } + + void touch_trackers(Integer[] serials) { + Tracker[] my_trackers = new Tracker[serials.length]; + + for (int i = 0; i < serials.length; i++) { + AltosState s = telemetry_state.get(serials[i]); + my_trackers[i] = new Tracker(s); } + start_select_tracker(my_trackers); } @Override @@ -1129,43 +1168,23 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener, frequency_strings[i] = frequencies[i].toString(); AlertDialog.Builder builder_freq = new AlertDialog.Builder(this); - builder_freq.setTitle("Pick a frequency"); + builder_freq.setTitle("Select Frequency"); builder_freq.setItems(frequency_strings, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { setFrequency(frequencies[item]); + selected_frequency = frequencies[item].frequency; } }); AlertDialog alert_freq = builder_freq.create(); alert_freq.show(); return true; case R.id.select_tracker: - serverIntent = new Intent(this, SelectTrackerActivity.class); - if (trackers != null) { - ArrayList tracker_array = new ArrayList(Arrays.asList(trackers)); - serverIntent.putParcelableArrayListExtra(EXTRA_TRACKERS, tracker_array); - } else { - serverIntent.putExtra(EXTRA_TRACKERS, (Parcelable[]) null); - } - startActivityForResult(serverIntent, REQUEST_SELECT_TRACKER); + start_select_tracker(trackers); return true; case R.id.delete_track: - if (trackers != null) { - AlertDialog.Builder builder_serial = new AlertDialog.Builder(this); - builder_serial.setTitle("Delete a track"); - final Tracker[] my_trackers = new Tracker[trackers.length - 1]; - for (int i = 0; i < trackers.length - 1; i++) - my_trackers[i] = trackers[i+1]; - builder_serial.setItems(my_trackers, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int item) { - delete_track(my_trackers[item].serial); - } - }); - AlertDialog alert_serial = builder_serial.create(); - alert_serial.show(); - - } + if (trackers != null && trackers.length > 0) + start_select_tracker(trackers, R.string.delete_track, REQUEST_DELETE_TRACKER); return true; case R.id.idle_mode: serverIntent = new Intent(this, IdleModeActivity.class);