summaryrefslogtreecommitdiff
path: root/altosdroid/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-06-23 21:35:43 -0700
committerKeith Packard <keithp@keithp.com>2015-06-23 21:42:35 -0700
commit56146cd379e1319b7adcf8e22cdda55f771e11be (patch)
tree6417550c523318e3792167a947367bfd57a606c6 /altosdroid/src
parent60b8bea12edb954e6140a92c8412364c9581e3c2 (diff)
altosdroid: Show direction to target in recover tab
This takes the bearing to target and current direction of motion (from the Android API) and computes a turn amount and displays that so you don't have to know which way is north when walking towards the rocket. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosdroid/src')
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java25
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java7
2 files changed, 32 insertions, 0 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
index 6cd9463a..f1da27d8 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
@@ -990,4 +990,29 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
}
return false;
}
+
+ static String direction(AltosGreatCircle from_receiver,
+ Location receiver) {
+ if (!receiver.hasBearing())
+ return null;
+
+ float bearing = receiver.getBearing();
+ float heading = (float) from_receiver.bearing - bearing;
+
+ while (heading <= -180.0f)
+ heading += 360.0f;
+ while (heading > 180.0f)
+ heading -= 360.0f;
+
+ int iheading = (int) (heading + 0.5f);
+
+ if (-1 < iheading && iheading < 1)
+ return "ahead";
+ else if (iheading < -179 || 179 < iheading)
+ return "backwards";
+ else if (iheading < 0)
+ return String.format("left %d", -iheading);
+ else
+ return String.format("right %d", iheading);
+ }
}
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java
index 0ab20f5f..cb394dbe 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabRecover.java
@@ -30,6 +30,7 @@ import android.location.Location;
public class TabRecover extends AltosDroidTab {
private TextView mBearingView;
+ private TextView mDirectionView;
private TextView mDistanceView;
private TextView mTargetLatitudeView;
private TextView mTargetLongitudeView;
@@ -44,6 +45,7 @@ public class TabRecover extends AltosDroidTab {
View v = inflater.inflate(R.layout.tab_recover, container, false);
mBearingView = (TextView) v.findViewById(R.id.bearing_value);
+ mDirectionView = (TextView) v.findViewById(R.id.direction_value);
mDistanceView = (TextView) v.findViewById(R.id.distance_value);
mTargetLatitudeView = (TextView) v.findViewById(R.id.target_lat_value);
mTargetLongitudeView = (TextView) v.findViewById(R.id.target_lon_value);
@@ -62,6 +64,11 @@ public class TabRecover extends AltosDroidTab {
if (from_receiver != null) {
mBearingView.setText(String.format("%3.0f°", from_receiver.bearing));
set_value(mDistanceView, AltosConvert.distance, 6, from_receiver.distance);
+ String direction = AltosDroid.direction(from_receiver, receiver);
+ if (direction == null)
+ mDirectionView.setText("");
+ else
+ mDirectionView.setText(direction);
}
if (state != null && state.gps != null) {
mTargetLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));