parent
8e1e373572
commit
e470e37101
@ -0,0 +1,99 @@
|
|||||||
|
package uca.baptistearthur.geocaching.ui.fragment
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.pm.PackageManager
|
||||||
|
import android.location.LocationManager
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import org.osmdroid.config.Configuration
|
||||||
|
import org.osmdroid.util.GeoPoint
|
||||||
|
import org.osmdroid.views.MapView
|
||||||
|
import org.osmdroid.views.overlay.ScaleBarOverlay
|
||||||
|
import android.Manifest.permission.ACCESS_FINE_LOCATION
|
||||||
|
import android.location.Location
|
||||||
|
import android.location.LocationListener
|
||||||
|
import android.util.Log
|
||||||
|
import android.widget.ProgressBar
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider
|
||||||
|
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
|
||||||
|
import uca.baptistearthur.geocaching.R
|
||||||
|
import uca.baptistearthur.geocaching.ui.overlay.RecenterOverlay
|
||||||
|
|
||||||
|
class MyLocationMap : Map() {
|
||||||
|
|
||||||
|
private lateinit var spinner: ProgressBar
|
||||||
|
private lateinit var locationManager: LocationManager
|
||||||
|
private var isMapCentered = false;
|
||||||
|
|
||||||
|
private val locationListener = LocationListener { location ->
|
||||||
|
val geoPoint = GeoPoint(location.latitude, location.longitude)
|
||||||
|
if(!isMapCentered){
|
||||||
|
map.controller.setCenter(geoPoint)
|
||||||
|
spinner.visibility=View.GONE;
|
||||||
|
isMapCentered=true;
|
||||||
|
}
|
||||||
|
map.invalidate()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()){}
|
||||||
|
|
||||||
|
private fun displaySpinner(view: View){
|
||||||
|
spinner = view.findViewById(R.id.mapLoading)
|
||||||
|
spinner.visibility=View.VISIBLE
|
||||||
|
if (ContextCompat.checkSelfPermission(requireActivity(), ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
||||||
|
requestPermissionLauncher.launch(ACCESS_FINE_LOCATION)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun addMapOverlays(mapView: MapView){
|
||||||
|
super.addMapOverlays(mapView)
|
||||||
|
Log.d("GeoMap", "MyLocationOverlay")
|
||||||
|
|
||||||
|
// Recenter Overlay
|
||||||
|
val recenter = RecenterOverlay(GpsMyLocationProvider(context), map)
|
||||||
|
recenter.enableMyLocation()
|
||||||
|
map.overlays.add(recenter);
|
||||||
|
|
||||||
|
// My Location Overlay
|
||||||
|
val myLocation = MyLocationNewOverlay(GpsMyLocationProvider(context), map)
|
||||||
|
myLocation.enableMyLocation()
|
||||||
|
|
||||||
|
map.overlays.add(myLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
Log.d("GeoMap", "MAP ON CREATE VIEW")
|
||||||
|
val view = inflater.inflate(R.layout.fragment_map, container, false)
|
||||||
|
map = view.findViewById(R.id.mapView)
|
||||||
|
configureMap()
|
||||||
|
displaySpinner(view)
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
Log.d("GeoMap", "MAP RESUME")
|
||||||
|
if (ContextCompat.checkSelfPermission(requireActivity(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
|
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0f, locationListener)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
Log.d("GeoMap", "MAP PAUSE")
|
||||||
|
if (ContextCompat.checkSelfPermission(requireActivity(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
locationManager = requireActivity().getSystemService(Context.LOCATION_SERVICE) as LocationManager
|
||||||
|
locationManager.removeUpdates(locationListener)
|
||||||
|
isMapCentered=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue