Browse Source

update location when gps changed

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 4 years ago
parent
commit
0568ea6e72

+ 43 - 7
app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt

@@ -5,6 +5,9 @@ import android.app.SearchManager
 import android.content.Context
 import android.content.pm.PackageManager
 import android.graphics.drawable.ColorDrawable
+import android.location.Location
+import android.location.LocationListener
+import android.location.LocationManager
 import android.os.Build
 import android.os.Bundle
 import android.text.InputType
@@ -74,6 +77,7 @@ import javax.inject.Inject
 class LocationPickerController(args: Bundle) :
     BaseController(args),
     SearchView.OnQueryTextListener,
+    LocationListener,
     GeocodingController.GeocodingResultListener {
 
     @Inject
@@ -114,6 +118,10 @@ class LocationPickerController(args: Bundle) :
 
     var roomToken: String?
 
+    var myLocation: GeoPoint = GeoPoint(0.0, 0.0)
+    private var locationManager: LocationManager? = null
+    private lateinit var locationOverlay: MyLocationNewOverlay
+
     var moveToCurrentLocationWasClicked: Boolean = true
     var readyToShareLocation: Boolean = false
     var searchItem: MenuItem? = null
@@ -141,6 +149,16 @@ class LocationPickerController(args: Bundle) :
         initMap()
     }
 
+    override fun onDetach(view: View) {
+        super.onDetach(view)
+        try {
+            locationManager!!.removeUpdates(this)
+        } catch (e: Exception) {
+            Log.e(TAG, "error when trying to remove updates for location Manager", e)
+        }
+        locationOverlay.disableMyLocation()
+    }
+
     override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
         super.onCreateOptionsMenu(menu, inflater)
         inflater.inflate(R.menu.menu_locationpicker, menu)
@@ -217,14 +235,19 @@ class LocationPickerController(args: Bundle) :
 
         map?.onResume()
 
+        locationManager = activity!!.getSystemService(Context.LOCATION_SERVICE) as LocationManager
+        try {
+            locationManager!!.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0L, 0f, this)
+        } catch (ex: SecurityException) {
+        }
+
         val copyrightOverlay = CopyrightOverlay(context)
         map?.overlays?.add(copyrightOverlay)
 
         map?.setMultiTouchControls(true)
         map?.isTilesScaledToDpi = true
 
-        val locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(context), map)
-        // locationOverlay.enableFollowLocation()
+        locationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(context), map)
         locationOverlay.enableMyLocation()
         locationOverlay.setPersonHotspot(20.0F,20.0F)
         locationOverlay.setPersonIcon(
@@ -239,13 +262,10 @@ class LocationPickerController(args: Bundle) :
             mapController?.setZoom(12.0)
         }
 
-        var myLocation: GeoPoint
-        myLocation = GeoPoint(52.0, 13.0)
-
-        var zoomToCurrentPositionAllowed = !receivedChosenGeocodingResult
+        val zoomToCurrentPositionOnFirstFix = !receivedChosenGeocodingResult
         locationOverlay.runOnFirstFix {
             myLocation = locationOverlay.myLocation
-            if (zoomToCurrentPositionAllowed) {
+            if (zoomToCurrentPositionOnFirstFix) {
                 activity!!.runOnUiThread {
                     mapController?.setZoom(12.0)
                     mapController?.setCenter(myLocation)
@@ -433,6 +453,22 @@ class LocationPickerController(args: Bundle) :
         }
     }
 
+    override fun onLocationChanged(location: Location?) {
+        myLocation = GeoPoint(location)
+    }
+
+    override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
+        // empty
+    }
+
+    override fun onProviderEnabled(provider: String?) {
+        // empty
+    }
+
+    override fun onProviderDisabled(provider: String?) {
+        // empty
+    }
+
     companion object {
         private const val TAG = "LocPicker"
         private const val REQUEST_PERMISSIONS_REQUEST_CODE = 1