summaryrefslogtreecommitdiff
path: root/altosdroid/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-04-12 01:00:36 -0700
committerKeith Packard <keithp@keithp.com>2013-04-12 01:00:36 -0700
commit1ec6fb3b9cec0f864d6e65d0cc6b4dd42edd3e16 (patch)
tree4457c5b08569b74e15e131d365af7941ed010582 /altosdroid/src
parent02243463adbdfb860f69580f544da9026dc7cbd4 (diff)
altosdroid: Check state.gps != null before using it
Avoid crashing. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altosdroid/src')
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java7
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java3
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java9
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java9
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java9
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java31
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java31
7 files changed, 68 insertions, 31 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
index b1d080db..cf4227ca 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
@@ -233,9 +233,12 @@ public class AltosDroid extends FragmentActivity {
AltosGreatCircle from_receiver = null;
if (saved_location != null && state.gps != null && state.gps.locked) {
+ double altitude = 0;
+ if (saved_location.hasAltitude())
+ altitude = saved_location.getAltitude();
from_receiver = new AltosGreatCircle(saved_location.getLatitude(),
saved_location.getLongitude(),
- saved_location.getAltitude(),
+ altitude,
state.gps.lat,
state.gps.lon,
state.gps.alt);
@@ -248,7 +251,7 @@ public class AltosDroid extends FragmentActivity {
mRSSIView.setText(String.format("%d", state.data.rssi));
for (AltosDroidTab mTab : mTabs)
- mTab.update_ui(state, from_receiver);
+ mTab.update_ui(state, from_receiver, saved_location);
mAltosVoice.tell(state);
}
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java
index 2b5cdae7..6ebb47f7 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroidTab.java
@@ -18,7 +18,8 @@
package org.altusmetrum.AltosDroid;
import org.altusmetrum.altoslib_1.*;
+import android.location.Location;
public interface AltosDroidTab {
- public void update_ui(AltosState state, AltosGreatCircle from_receiver);
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver);
}
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java
index ce677c57..de3bc3d2 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabAscent.java
@@ -27,6 +27,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import android.location.Location;
public class TabAscent extends Fragment implements AltosDroidTab {
AltosDroid mAltosDroid;
@@ -84,7 +85,7 @@ public class TabAscent extends Fragment implements AltosDroidTab {
mAltosDroid = null;
}
- public void update_ui(AltosState state, AltosGreatCircle from_receiver) {
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
mHeightView.setText(String.format("%6.0f m", state.height));
mMaxHeightView.setText(String.format("%6.0f m", state.max_height));
mSpeedView.setText(String.format("%6.0f m/s", state.speed()));
@@ -92,8 +93,10 @@ public class TabAscent extends Fragment implements AltosDroidTab {
mAccelView.setText(String.format("%6.0f m/s²", state.acceleration));
mMaxAccelView.setText(String.format("%6.0f m/s²", state.max_acceleration));
- mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
- mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ if (state.gps != null) {
+ mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
+ mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ }
mApogeeVoltageView.setText(String.format("%4.2f V", state.drogue_sense));
mApogeeLights.set(state.drogue_sense > 3.2);
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java
index b0c6539c..698e89fc 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabDescent.java
@@ -27,6 +27,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import android.location.Location;
public class TabDescent extends Fragment implements AltosDroidTab {
AltosDroid mAltosDroid;
@@ -88,7 +89,7 @@ public class TabDescent extends Fragment implements AltosDroidTab {
mAltosDroid = null;
}
- public void update_ui(AltosState state, AltosGreatCircle from_receiver) {
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
mSpeedView.setText(String.format("%6.0f m/s", state.speed()));
mHeightView.setText(String.format("%6.0f m", state.height));
if (from_receiver != null) {
@@ -104,8 +105,10 @@ public class TabDescent extends Fragment implements AltosDroidTab {
mCompassView.setText("<unknown>");
mDistanceView.setText("<unknown>");
}
- mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
- mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ if (state.gps != null) {
+ mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
+ mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ }
mApogeeVoltageView.setText(String.format("%4.2f V", state.drogue_sense));
mApogeeLights.set(state.drogue_sense > 3.2);
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java
index 93a42334..c346dc99 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabLanded.java
@@ -26,6 +26,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import android.location.Location;
public class TabLanded extends Fragment implements AltosDroidTab {
AltosDroid mAltosDroid;
@@ -68,13 +69,15 @@ public class TabLanded extends Fragment implements AltosDroidTab {
mAltosDroid = null;
}
- public void update_ui(AltosState state, AltosGreatCircle from_receiver) {
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
if (from_receiver != null) {
mBearingView.setText(String.format("%3.0f°", from_receiver.bearing));
mDistanceView.setText(String.format("%6.0f m", from_receiver.distance));
}
- mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
- mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ if (state.gps != null) {
+ mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
+ mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ }
mMaxHeightView.setText(String.format("%6.0f m", state.max_height));
mMaxAccelView.setText(String.format("%6.0f m/s²", state.max_acceleration));
mMaxSpeedView.setText(String.format("%6.0f m/s", state.max_speed()));
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java
index 607ded46..371fd9c1 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabMap.java
@@ -40,6 +40,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
+import android.location.Location;
public class TabMap extends Fragment implements AltosDroidTab {
AltosDroid mAltosDroid;
@@ -50,6 +51,7 @@ public class TabMap extends Fragment implements AltosDroidTab {
private Marker mRocketMarker;
private Marker mPadMarker;
+ private Marker mReceiverMarker;
private Polyline mPolyline;
private TextView mDistanceView;
@@ -128,6 +130,12 @@ public class TabMap extends Fragment implements AltosDroidTab {
.visible(false)
);
+ mReceiverMarker = mMap.addMarker(
+ new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.pad))
+ .position(new LatLng(0,0))
+ .visible(false)
+ );
+
mPolyline = mMap.addPolyline(
new PolylineOptions().add(new LatLng(0,0), new LatLng(0,0))
.width(3)
@@ -139,25 +147,34 @@ public class TabMap extends Fragment implements AltosDroidTab {
}
}
- public void update_ui(AltosState state, AltosGreatCircle from_receiver) {
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
if (state.from_pad != null) {
mDistanceView.setText(String.format("%6.0f m", state.from_pad.distance));
mBearingView.setText(String.format("%3.0f°", state.from_pad.bearing));
}
- mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
- mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ if (state.gps != null) {
+ mLatitudeView.setText(AltosDroid.pos(state.gps.lat, "N", "S"));
+ mLongitudeView.setText(AltosDroid.pos(state.gps.lon, "W", "E"));
+ }
if (mapLoaded) {
- mRocketMarker.setPosition(new LatLng(state.gps.lat, state.gps.lon));
- mRocketMarker.setVisible(true);
+ if (state.gps != null) {
+ mRocketMarker.setPosition(new LatLng(state.gps.lat, state.gps.lon));
+ mRocketMarker.setVisible(true);
- mPolyline.setPoints(Arrays.asList(new LatLng(state.pad_lat, state.pad_lon), new LatLng(state.gps.lat, state.gps.lon)));
- mPolyline.setVisible(true);
+ mPolyline.setPoints(Arrays.asList(new LatLng(state.pad_lat, state.pad_lon), new LatLng(state.gps.lat, state.gps.lon)));
+ mPolyline.setVisible(true);
+ }
if (state.state == AltosLib.ao_flight_pad) {
mPadMarker.setPosition(new LatLng(state.pad_lat, state.pad_lon));
mPadMarker.setVisible(true);
}
+
+ if (receiver != null) {
+ mReceiverMarker.setPosition(new LatLng(receiver.getLatitude(), receiver.getLongitude()));
+ mReceiverMarker.setVisible(true);
+ }
}
}
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java
index 6906324d..5070ec0b 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TabPad.java
@@ -27,6 +27,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import android.location.Location;
public class TabPad extends Fragment implements AltosDroidTab {
AltosDroid mAltosDroid;
@@ -100,7 +101,7 @@ public class TabPad extends Fragment implements AltosDroidTab {
mAltosDroid = null;
}
- public void update_ui(AltosState state, AltosGreatCircle from_receiver) {
+ public void update_ui(AltosState state, AltosGreatCircle from_receiver, Location receiver) {
mBatteryVoltageView.setText(String.format("%4.2f V", state.battery));
mBatteryLights.set(state.battery > 3.7);
@@ -122,18 +123,24 @@ public class TabPad extends Fragment implements AltosDroidTab {
}
mDataLoggingLights.set(state.data.flight != 0);
- mGPSLockedView.setText(String.format("%4d sats", state.gps.nsat));
- mGPSLockedLights.set(state.gps.locked && state.gps.nsat >= 4);
-
- if (state.gps_ready)
- mGPSReadyView.setText("Ready");
- else
- mGPSReadyView.setText(String.format("Waiting %d", state.gps_waiting));
- mGPSReadyLights.set(state.gps_ready);
+ if (state.gps != null) {
+ mGPSLockedView.setText(String.format("%4d sats", state.gps.nsat));
+ mGPSLockedLights.set(state.gps.locked && state.gps.nsat >= 4);
+ if (state.gps_ready)
+ mGPSReadyView.setText("Ready");
+ else
+ mGPSReadyView.setText(String.format("Waiting %d", state.gps_waiting));
+ mGPSReadyLights.set(state.gps_ready);
+ }
- mPadLatitudeView.setText(AltosDroid.pos(state.pad_lat, "N", "S"));
- mPadLongitudeView.setText(AltosDroid.pos(state.pad_lon, "W", "E"));
- mPadAltitudeView.setText(String.format("%4.0f m", state.pad_alt));
+ if (receiver != null) {
+ double altitude = 0;
+ if (receiver.hasAltitude())
+ altitude = receiver.getAltitude();
+ mPadLatitudeView.setText(AltosDroid.pos(receiver.getLatitude(), "N", "S"));
+ mPadLongitudeView.setText(AltosDroid.pos(receiver.getLongitude(), "W", "E"));
+ mPadAltitudeView.setText(String.format("%4.0f m", altitude));
+ }
}
}