From 0568ea6e72786d0ab6c6c50be33e59b003e3ff11 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Tue, 8 Jun 2021 20:19:33 +0200 Subject: [PATCH] update location when gps changed Signed-off-by: Marcel Hibbe --- .../controllers/LocationPickerController.kt | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt b/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt index 9ecc5b646..c1d84349d 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/LocationPickerController.kt +++ b/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