altosdroid: Change tracker selection dialog
[fw/altos] / altosdroid / app / src / main / java / org / altusmetrum / AltosDroid / AltosMapOnline.java
index 8d3a662e908ce43e0961ff808c756acbb4cce910..8361b278f93b8cc65022effc3c3b8dc86ccbce1b 100644 (file)
@@ -99,8 +99,8 @@ class RocketOnline implements Comparable {
        }
 }
 
-public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapClickListener, AltosMapTypeListener {
-       public SupportMapFragment mMapFragment;
+public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarkerClickListener, GoogleMap.OnMapClickListener, OnMapReadyCallback, AltosMapTypeListener {
+       public AltosOnlineMapFragment mMapFragment;
        private GoogleMap mMap;
        private boolean mapLoaded = false;
        Context context;
@@ -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;
@@ -119,27 +117,47 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke
 
        private AltosDroid altos_droid;
 
+       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);
+                       if (c != null)
+                               getMapAsync(c);
+               }
+               @Override
+               public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+                       map_view = super.onCreateView(inflater, container, savedInstanceState);
+                       return map_view;
+               }
+               @Override
+               public void onDestroyView() {
+                       super.onDestroyView();
+                       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);
+               }
+       }
+
        public void onCreateView(AltosDroid altos_droid) {
                this.altos_droid = altos_droid;
-               final int map_type = AltosPreferences.map_type();
                AltosPreferences.register_map_type_listener(this);
-               mMapFragment = new SupportMapFragment() {
-                       @Override
-                       public void onActivityCreated(Bundle savedInstanceState) {
-                               super.onActivityCreated(savedInstanceState);
-                               setupMap(map_type);
-                       }
-                       @Override
-                       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-                               map_view = super.onCreateView(inflater, container, savedInstanceState);
-                               return map_view;
-                       }
-                       @Override
-                       public void onDestroyView() {
-                               super.onDestroyView();
-                               map_view = null;
-                       }
-               };
+               mMapFragment = new AltosOnlineMapFragment(this);
        }
 
        public void onDestroyView() {
@@ -185,11 +203,22 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke
                return true;
        }
 
-       public void setupMap(int map_type) {
-               mMap = mMapFragment.getMap();
+       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);
@@ -250,24 +279,20 @@ public class AltosMapOnline implements AltosDroidMapInterface, GoogleMap.OnMarke
        }
 
        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))
+                               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));
                        }
                }