X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosdroid%2Fsrc%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosVoice.java;h=b05913b68140ce1224f6c028bd3cba3ff4d304fa;hb=bc3fbcb35090be3856284ccf4d908ebf39d02bec;hp=77d4ba382d0e63882ac79e2c750a3feaa5e3f7b5;hpb=f0216d721ed13f4d3dc608bb6ad8f83732b27c0a;p=fw%2Faltos diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java index 77d4ba38..b05913b6 100644 --- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java +++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosVoice.java @@ -21,7 +21,7 @@ package org.altusmetrum.AltosDroid; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; -import org.altusmetrum.altoslib_4.*; +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; }