X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosMapOnline.java;fp=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosMapOnline.java;h=76cd990be7f5b474f38fbddea13f3c8653db1341;hp=c35bbb4d308c32ae608583ac5fe813ad69a2e3ef;hb=55a820e517f9705bc80c653b456ce5d8b3a634bc;hpb=09a2a37b31b816236f023ba2a1d767646d5c8f34 diff --git a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java index c35bbb4d..76cd990b 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java @@ -174,10 +174,12 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke } private RocketOnline[] sorted_rockets() { - RocketOnline[] rocket_array = rockets.values().toArray(new RocketOnline[0]); + synchronized(rockets) { + RocketOnline[] rocket_array = rockets.values().toArray(new RocketOnline[0]); - Arrays.sort(rocket_array); - return rocket_array; + Arrays.sort(rocket_array); + return rocket_array; + } } public void onMapClick(LatLng lat_lng) { @@ -260,22 +262,26 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke if (mMap == null) return; - if (rockets.containsKey(serial)) { - rocket = rockets.get(serial); - rocket.set_position(new AltosLatLon(state.gps.lat, state.gps.lon), state.received_time); - } else { - rocket = new RocketOnline(context, - serial, - mMap, state.gps.lat, state.gps.lon, - state.received_time); - rockets.put(serial, rocket); + synchronized(rockets) { + if (rockets.containsKey(serial)) { + rocket = rockets.get(serial); + rocket.set_position(new AltosLatLon(state.gps.lat, state.gps.lon), state.received_time); + } else { + rocket = new RocketOnline(context, + serial, + mMap, state.gps.lat, state.gps.lon, + state.received_time); + rockets.put(serial, rocket); + } } } private void remove_rocket(int serial) { - RocketOnline rocket = rockets.get(serial); - rocket.remove(); - rockets.remove(serial); + synchronized(rockets) { + RocketOnline rocket = rockets.get(serial); + rocket.remove(); + rockets.remove(serial); + } } public void set_visible(boolean visible) { @@ -286,13 +292,15 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke public void show(TelemetryState telem_state, AltosState state, AltosGreatCircle from_receiver, Location receiver) { if (telem_state != null) { - for (int serial : rockets.keySet()) { - if (!telem_state.containsKey(serial)) - remove_rocket(serial); - } + synchronized(rockets) { + for (int serial : rockets.keySet()) { + if (!telem_state.containsKey(serial)) + remove_rocket(serial); + } - for (int serial : telem_state.keySet()) { - set_rocket(serial, telem_state.get(serial)); + for (int serial : telem_state.keySet()) { + set_rocket(serial, telem_state.get(serial)); + } } }