summaryrefslogtreecommitdiff
path: root/altosdroid/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-09-12 13:36:24 -0700
committerKeith Packard <keithp@keithp.com>2017-09-12 13:36:24 -0700
commitbc1cc0db1251e351d862dffbf618d0ce926c389d (patch)
tree5f14823e73bfc6708116bc9003ac0feaf4eb6c61 /altosdroid/src
parent4151c30e1294c0dda3aa02e7ac23b9616f25a4d0 (diff)
altosdroid: Display serial, call, freq in tracker list
This makes the list a lot easier to find entries in when it gets long. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosdroid/src')
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java132
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java1
2 files changed, 109 insertions, 24 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
index 924ab4c9..0776fa00 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
@@ -77,6 +77,75 @@ class SavedState {
}
}
+class Tracker implements CharSequence, Comparable {
+ int serial;
+ String call;
+ double frequency;
+
+ String display;
+
+ public Tracker(int serial, String call, double frequency) {
+ if (call == null)
+ call = "none";
+
+ this.serial = serial;
+ this.call = call;
+ this.frequency = frequency;
+ if (frequency == 0.0)
+ display = "Auto";
+ else if (frequency == AltosLib.MISSING) {
+ display = String.format("%-8.8s %6d", call, serial);
+ } else {
+ display = String.format("%-8.8s %7.3f %6d", call, frequency, serial);
+ }
+ }
+
+ public Tracker(AltosState s) {
+ this(s == null ? 0 : s.cal_data().serial,
+ s == null ? null : s.cal_data().callsign,
+ s == null ? 0.0 : s.frequency);
+ }
+
+ /* CharSequence */
+ public char charAt(int index) {
+ return display.charAt(index);
+ }
+
+ public int length() {
+ return display.length();
+ }
+
+ public CharSequence subSequence(int start, int end) throws IndexOutOfBoundsException {
+ return display.subSequence(start, end);
+ }
+
+ public String toString() {
+ return display.toString();
+ }
+
+ /* Comparable */
+ public int compareTo (Object other) {
+ Tracker o = (Tracker) other;
+ if (frequency == 0.0) {
+ if (o.frequency == 0.0)
+ return 0;
+ return -1;
+ }
+ if (o.frequency == 0.0)
+ return 1;
+
+ int a = serial - o.serial;
+ int b = call.compareTo(o.call);
+ int c = (int) Math.signum(frequency - o.frequency);
+
+ if (b != 0)
+ return b;
+ if (c != 0)
+ return c;
+ return a;
+ }
+}
+
public class AltosDroid extends FragmentActivity implements AltosUnitsListener, LocationListener {
// Actions sent to the telemetry server at startup time
@@ -151,7 +220,8 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
private Timer timer;
TelemetryState telemetry_state;
- Integer[] serials;
+ Tracker[] trackers;
+
UsbDevice pending_usb_device;
boolean start_with_usb;
@@ -323,8 +393,20 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
AltosPreferences.register_units_listener(this);
}
- serials = telemetry_state.states.keySet().toArray(new Integer[0]);
- Arrays.sort(serials);
+ int num_trackers = 0;
+ for (AltosState s : telemetry_state.states.values()) {
+ num_trackers++;
+ }
+
+ trackers = new Tracker[num_trackers + 1];
+
+ int n = 0;
+ trackers[n++] = new Tracker(0, "auto", 0.0);
+
+ for (AltosState s : telemetry_state.states.values())
+ trackers[n++] = new Tracker(s);
+
+ Arrays.sort(trackers);
update_title(telemetry_state);
@@ -955,11 +1037,11 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
}
if (serial != 0) {
- for (i = 0; i < serials.length; i++)
- if (serials[i] == serial)
+ for (i = 0; i < trackers.length; i++)
+ if (trackers[i].serial == serial)
break;
- if (i == serials.length) {
+ if (i == trackers.length) {
AltosDebug.debug("attempt to select unknown tracker %d\n", serial);
return;
}
@@ -972,17 +1054,22 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
void touch_trackers(Integer[] serials) {
AlertDialog.Builder builder_tracker = new AlertDialog.Builder(this);
builder_tracker.setTitle("Select Tracker");
- final String[] trackers = new String[serials.length + 1];
- trackers[0] = "Auto";
- for (int i = 0; i < serials.length; i++)
- trackers[i+1] = String.format("%d", serials[i]);
- builder_tracker.setItems(trackers,
+
+ final Tracker[] my_trackers = new Tracker[serials.length + 1];
+
+ my_trackers[0] = new Tracker(null);
+
+ for (int i = 0; i < serials.length; i++) {
+ AltosState s = telemetry_state.states.get(serials[i]);
+ my_trackers[i+1] = new Tracker(s);
+ }
+ builder_tracker.setItems(my_trackers,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (item == 0)
select_tracker(0);
else
- select_tracker(Integer.parseInt(trackers[item]));
+ select_tracker(my_trackers[item].serial);
}
});
AlertDialog alert_tracker = builder_tracker.create();
@@ -1040,20 +1127,17 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
alert_freq.show();
return true;
case R.id.select_tracker:
- if (serials != null) {
- String[] trackers = new String[serials.length+1];
- trackers[0] = "Auto";
- for (int i = 0; i < serials.length; i++)
- trackers[i+1] = String.format("%d", serials[i]);
+ if (trackers != null) {
AlertDialog.Builder builder_serial = new AlertDialog.Builder(this);
builder_serial.setTitle("Select a tracker");
builder_serial.setItems(trackers,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
+ System.out.printf("select item %d %s\n", item, trackers[item].display);
if (item == 0)
select_tracker(0);
else
- select_tracker(serials[item-1]);
+ select_tracker(trackers[item].serial);
}
});
AlertDialog alert_serial = builder_serial.create();
@@ -1062,16 +1146,16 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener,
}
return true;
case R.id.delete_track:
- if (serials != null) {
- String[] trackers = new String[serials.length];
- for (int i = 0; i < serials.length; i++)
- trackers[i] = String.format("%d", serials[i]);
+ if (trackers != null) {
AlertDialog.Builder builder_serial = new AlertDialog.Builder(this);
builder_serial.setTitle("Delete a track");
- builder_serial.setItems(trackers,
+ 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(serials[item]);
+ delete_track(my_trackers[item].serial);
}
});
AlertDialog alert_serial = builder_serial.create();
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java
index d097a550..69685dc7 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryReader.java
@@ -60,6 +60,7 @@ public class TelemetryReader extends Thread {
while (telemQueue != null) {
try {
AltosTelemetry telem = read();
+ telem.set_frequency(link.frequency);
handler.obtainMessage(TelemetryService.MSG_TELEMETRY, telem).sendToTarget();
} catch (ParseException pp) {
AltosDebug.error("Parse error: %d \"%s\"", pp.getErrorOffset(), pp.getMessage());