tweaking test scripts
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / AltosVoice.java
index b50cab2232254e8f4d68aff83d233b16a685e492..b05913b68140ce1224f6c028bd3cba3ff4d304fa 100644 (file)
@@ -21,7 +21,7 @@ package org.altusmetrum.AltosDroid;
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.TextToSpeech.OnInitListener;
 
-import org.altusmetrum.altoslib_3.*;
+import org.altusmetrum.altoslib_5.*;
 
 public class AltosVoice {
 
@@ -45,7 +45,7 @@ public class AltosVoice {
 
        }
 
-       public void speak(String s) {
+       public synchronized void speak(String s) {
                if (!tts_enabled) return;
                tts.speak(s, TextToSpeech.QUEUE_ADD, null);
        }
@@ -63,14 +63,17 @@ public class AltosVoice {
 
                boolean spoke = false;
                if (old_state == null || old_state.state != state.state) {
-                       speak(state.state_name());
+                       if (state.state != AltosLib.ao_flight_stateless)
+                               speak(state.state_name());
                        if ((old_state == null || old_state.state <= AltosLib.ao_flight_boost) &&
                            state.state > AltosLib.ao_flight_boost) {
-                               speak(String.format("max speed: %d meters per second.", (int) (state.max_speed() + 0.5)));
+                               if (state.max_speed() != AltosLib.MISSING)
+                                       speak(String.format("max speed: %d meters per second.", (int) (state.max_speed() + 0.5)));
                                spoke = true;
                        } else if ((old_state == null || old_state.state < AltosLib.ao_flight_drogue) &&
                                   state.state >= AltosLib.ao_flight_drogue) {
-                               speak(String.format("max height: %d meters.", (int) (state.max_height() + 0.5)));
+                               if (state.max_height() != AltosLib.MISSING)
+                                       speak(String.format("max height: %d meters.", (int) (state.max_height() + 0.5)));
                                spoke = true;
                        }
                }
@@ -84,7 +87,8 @@ public class AltosVoice {
                        }
                }
                old_state = state;
-               idle_thread.notice(state, spoke);
+               if (idle_thread != null)
+                       idle_thread.notice(state, spoke);
        }
 
 
@@ -109,19 +113,28 @@ public class AltosVoice {
                        }
 
                        /* If the rocket isn't on the pad, then report height */
-                       if (AltosLib.ao_flight_drogue <= state.state &&
-                           state.state < AltosLib.ao_flight_landed &&
+                       if (((AltosLib.ao_flight_drogue <= state.state &&
+                             state.state < AltosLib.ao_flight_landed) ||
+                            state.state == AltosLib.ao_flight_stateless) &&
                            state.range >= 0)
                        {
-                               speak(String.format("Height %d, bearing %s %d, elevation %d, range %d.\n",
-                                                   (int) (state.height() + 0.5),
-                                       state.from_pad.bearing_words(
-                                             AltosGreatCircle.BEARING_VOICE),
-                                                   (int) (state.from_pad.bearing + 0.5),
-                                                   (int) (state.elevation + 0.5),
-                                                   (int) (state.range + 0.5)));
+                               if (state.from_pad != null) {
+                                       speak(String.format("Height %d, bearing %s %d, elevation %d, range %d.\n",
+                                                           (int) (state.height() + 0.5),
+                                                           state.from_pad.bearing_words(
+                                                                   AltosGreatCircle.BEARING_VOICE),
+                                                           (int) (state.from_pad.bearing + 0.5),
+                                                           (int) (state.elevation + 0.5),
+                                                           (int) (state.range + 0.5)));
+                               } else {
+                                       speak(String.format("Height %d, elevation %d, range %d.\n",
+                                                           (int) (state.height() + 0.5),
+                                                           (int) (state.elevation + 0.5),
+                                                           (int) (state.range + 0.5)));
+                               }
                        } else if (state.state > AltosLib.ao_flight_pad) {
-                               speak(String.format("%d meters", (int) (state.height() + 0.5)));
+                               if (state.height() != AltosLib.MISSING)
+                                       speak(String.format("%d meters", (int) (state.height() + 0.5)));
                        } else {
                                reported_landing = 0;
                        }