X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altosdroid%2Fapp%2Fsrc%2Fmain%2Fjava%2Forg%2Faltusmetrum%2FAltosDroid%2FAltosMapOnline.java;h=8361b278f93b8cc65022effc3c3b8dc86ccbce1b;hp=37e4435a68b0482b5a81832f6f577cdfee22cf77;hb=79f2677143f85a2807b8d4e297f3617aafbd34da;hpb=8b53f860eb3171cd43e4bd0e440f2889bd810662 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 37e4435a..8361b278 100644 --- a/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java +++ b/altosdroid/app/src/main/java/org/altusmetrum/AltosDroid/AltosMapOnline.java @@ -25,16 +25,12 @@ import org.altusmetrum.altoslib_13.*; import com.google.android.gms.maps.*; import com.google.android.gms.maps.model.*; -import android.app.Activity; import android.graphics.Color; import android.graphics.*; import android.os.Bundle; -import android.support.v4.app.Fragment; -//import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.TextView; import android.location.Location; import android.content.*; @@ -103,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; @@ -114,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; @@ -123,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() { @@ -189,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); @@ -254,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)); } }