X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosMapOnline.java;h=76cd990be7f5b474f38fbddea13f3c8653db1341;hb=HEAD;hp=29979a07cdbf79b871f8e210e03339dd11f4c3d6;hpb=faa5abe0bc9aa071ffa55534a24638bc0972e3c2;p=fw%2Faltos 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 29979a07..76cd990b 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java @@ -20,7 +20,7 @@ package org.altusmetrum.AltosDroid; import java.util.*; -import org.altusmetrum.altoslib_13.*; +import org.altusmetrum.altoslib_14.*; import com.google.android.gms.maps.*; import com.google.android.gms.maps.model.*; @@ -110,8 +110,6 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke private boolean pad_set; private Polyline mPolyline; - private View map_view; - private double mapAccuracy = -1; private AltosLatLon my_position = null; @@ -121,25 +119,38 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke public static class AltosOnlineMapFragment extends SupportMapFragment { AltosMapOnline c; + View map_view; public AltosOnlineMapFragment(AltosMapOnline c) { this.c = c; } + public AltosOnlineMapFragment() { + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - getMapAsync(c); + if (c != null) + getMapAsync(c); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - c.map_view = super.onCreateView(inflater, container, savedInstanceState); - return c.map_view; + map_view = super.onCreateView(inflater, container, savedInstanceState); + return map_view; } @Override public void onDestroyView() { super.onDestroyView(); - c.map_view = null; + map_view = null; + } + public void set_visible(boolean visible) { + if (map_view == null) + return; + if (visible) + map_view.setVisibility(View.VISIBLE); + else + map_view.setVisibility(View.GONE); } } @@ -163,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) { @@ -192,13 +205,22 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke return true; } + void + position_permission() { + if (mMap != null) + mMap.setMyLocationEnabled(true); + } + @Override public void onMapReady(GoogleMap googleMap) { final int map_type = AltosPreferences.map_type(); mMap = googleMap; if (mMap != null) { map_type_changed(map_type); - mMap.setMyLocationEnabled(true); + if (altos_droid.have_location_permission) + mMap.setMyLocationEnabled(true); + else + altos_droid.tell_map_permission(this); mMap.getUiSettings().setTiltGesturesEnabled(false); mMap.getUiSettings().setZoomControlsEnabled(false); mMap.setOnMarkerClickListener(this); @@ -240,43 +262,45 @@ 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) { - if (map_view == null) - return; - if (visible) - map_view.setVisibility(View.VISIBLE); - else - map_view.setVisibility(View.GONE); + if (mMapFragment != null) + mMapFragment.set_visible(visible); } 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.states.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.states.keySet()) { - set_rocket(serial, telem_state.states.get(serial)); + for (int serial : telem_state.keySet()) { + set_rocket(serial, telem_state.get(serial)); + } } }