diff --git a/app/src/generic/java/org/tasks/location/OsmMapFragment.kt b/app/src/generic/java/org/tasks/location/OsmMapFragment.kt index a04b7d6f3..5da469b45 100644 --- a/app/src/generic/java/org/tasks/location/OsmMapFragment.kt +++ b/app/src/generic/java/org/tasks/location/OsmMapFragment.kt @@ -21,12 +21,12 @@ import org.tasks.data.Place import org.tasks.location.MapFragment.MapFragmentCallback class OsmMapFragment(private val context: Context) : MapFragment { - private lateinit var callbacks: MapFragmentCallback + private lateinit var callback: MapFragmentCallback private lateinit var map: MapView private var locationOverlay: MyLocationNewOverlay? = null - override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { - this.callbacks = callbacks + override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) { + this.callback = callback Configuration.getInstance() .load(activity, PreferenceManager.getDefaultSharedPreferences(activity)) map = MapView(activity).apply { @@ -42,13 +42,14 @@ class OsmMapFragment(private val context: Context) : MapFragment { overlays.add(copyright) activity.findViewById(R.id.map).addView(this) } - callbacks.onMapReady(this) + callback.onMapReady(this) } - override fun getMapPosition(): MapPosition { - val center = map.mapCenter - return MapPosition(center.latitude, center.longitude, map.zoomLevelDouble.toFloat()) - } + override val mapPosition: MapPosition + get() { + val center = map.mapCenter + return MapPosition(center.latitude, center.longitude, map.zoomLevelDouble.toFloat()) + } override fun movePosition(mapPosition: MapPosition, animate: Boolean) { val controller = map.controller @@ -70,7 +71,7 @@ class OsmMapFragment(private val context: Context) : MapFragment { setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_TOP) icon = ContextCompat.getDrawable(context, R.drawable.ic_map_marker_select_red_48dp)!!.mutate() setOnMarkerClickListener { _, _ -> - callbacks.onPlaceSelected(place) + callback.onPlaceSelected(place) false } }) @@ -78,9 +79,7 @@ class OsmMapFragment(private val context: Context) : MapFragment { } @SuppressLint("ClickableViewAccessibility") - override fun disableGestures() { - map.setOnTouchListener { _, _ -> true } - } + override fun disableGestures() = map.setOnTouchListener { _, _ -> true } @SuppressLint("MissingPermission") override fun showMyLocation() { diff --git a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt index 86aed4e37..6167b6139 100644 --- a/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt +++ b/app/src/googleplay/java/org/tasks/location/GoogleMapFragment.kt @@ -13,14 +13,16 @@ import org.tasks.data.Place import org.tasks.location.MapFragment.MapFragmentCallback import java.util.* -class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyCallback, GoogleMap.OnMarkerClickListener { +class GoogleMapFragment( + private val context: Context +) : MapFragment, OnMapReadyCallback, GoogleMap.OnMarkerClickListener { private val markers: MutableList = ArrayList() - private lateinit var callbacks: MapFragmentCallback + private lateinit var callback: MapFragmentCallback private var dark = false private var map: GoogleMap? = null - override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { - this.callbacks = callbacks + override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) { + this.callback = callback this.dark = dark val fragmentManager = activity.supportFragmentManager var mapFragment = fragmentManager.findFragmentByTag(FRAG_TAG_MAP) as SupportMapFragment? @@ -31,14 +33,11 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC mapFragment.getMapAsync(this) } - override fun getMapPosition(): MapPosition? { - if (map == null) { - return null + override val mapPosition: MapPosition? + get() = map?.cameraPosition?.let { it -> + val target = it.target + return MapPosition(target.latitude, target.longitude, it.zoom) } - val cameraPosition = map!!.cameraPosition - val target = cameraPosition.target - return MapPosition(target.latitude, target.longitude, cameraPosition.zoom) - } override fun movePosition(mapPosition: MapPosition, animate: Boolean) { val cameraUpdate = CameraUpdateFactory.newCameraPosition( @@ -70,7 +69,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC } override fun disableGestures() { - map!!.uiSettings.setAllGesturesEnabled(false) + map?.uiSettings?.setAllGesturesEnabled(false) } @SuppressLint("MissingPermission") @@ -87,7 +86,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC uiSettings.isMyLocationButtonEnabled = false uiSettings.isRotateGesturesEnabled = false map!!.setOnMarkerClickListener(this) - callbacks.onMapReady(this) + callback.onMapReady(this) } override fun onPause() {} @@ -97,7 +96,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC override fun onDestroy() {} override fun onMarkerClick(marker: Marker): Boolean { - callbacks.onPlaceSelected(marker.tag as Place?) + callback.onPlaceSelected(marker.tag as Place) return true } diff --git a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt index a2fb0e4c0..7e724c2fe 100644 --- a/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt +++ b/app/src/main/java/org/tasks/activities/PlaceSettingsActivity.kt @@ -103,12 +103,12 @@ class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmen finish() } - override fun onMapReady(mapFragment: MapFragment?) { - map = mapFragment!! + override fun onMapReady(mapFragment: MapFragment) { + map = mapFragment map.setMarkers(listOf(place)) map.disableGestures() map.movePosition(place.mapPosition, false) } - override fun onPlaceSelected(place: Place?) {} + override fun onPlaceSelected(place: Place) {} } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt index f8e21bd0d..8c4198aa7 100644 --- a/app/src/main/java/org/tasks/location/LocationPickerActivity.kt +++ b/app/src/main/java/org/tasks/location/LocationPickerActivity.kt @@ -188,11 +188,10 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC if (permissionChecker.canAccessForegroundLocation()) { mapFragment.showMyLocation() } - if (mapPosition != null) { - map.movePosition(mapPosition, false) - } else if (permissionChecker.canAccessForegroundLocation()) { - moveToCurrentLocation(false) - } + + mapPosition + ?.let { map.movePosition(it, false) } + ?: moveToCurrentLocation(false) } override fun onBackPressed() { @@ -213,11 +212,7 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC } @OnClick(R.id.current_location) - fun onClick() { - if (permissionRequestor.requestForegroundLocation()) { - moveToCurrentLocation(true) - } - } + fun onClick() = moveToCurrentLocation(true) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array, grantResults: IntArray) { @@ -258,6 +253,9 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC @SuppressLint("MissingPermission") private fun moveToCurrentLocation(animate: Boolean) { + if (!permissionChecker.canAccessForegroundLocation()) { + return + } LocationEngineProvider.getBestLocationEngine(this) .getLastLocation( object : LocationEngineCallback { diff --git a/app/src/main/java/org/tasks/location/MapFragment.java b/app/src/main/java/org/tasks/location/MapFragment.java deleted file mode 100644 index 9afefdd40..000000000 --- a/app/src/main/java/org/tasks/location/MapFragment.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.tasks.location; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import java.util.List; -import org.tasks.data.Place; - -public interface MapFragment { - - void init(AppCompatActivity activity, MapFragmentCallback callback, boolean dark); - - @Nullable MapPosition getMapPosition(); - - void movePosition(MapPosition mapPosition, boolean animate); - - void setMarkers(List places); - - void disableGestures(); - - void showMyLocation(); - - void onPause(); - - void onResume(); - - void onDestroy(); - - interface MapFragmentCallback { - void onMapReady(MapFragment mapFragment); - - void onPlaceSelected(Place place); - } -} diff --git a/app/src/main/java/org/tasks/location/MapFragment.kt b/app/src/main/java/org/tasks/location/MapFragment.kt new file mode 100644 index 000000000..5e16ca760 --- /dev/null +++ b/app/src/main/java/org/tasks/location/MapFragment.kt @@ -0,0 +1,29 @@ +package org.tasks.location + +import androidx.appcompat.app.AppCompatActivity +import org.tasks.data.Place + +interface MapFragment { + fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) + + val mapPosition: MapPosition? + + fun movePosition(mapPosition: MapPosition, animate: Boolean) + + fun setMarkers(places: List) + + fun disableGestures() + + fun showMyLocation() + + fun onPause() + + fun onResume() + + fun onDestroy() + + interface MapFragmentCallback { + fun onMapReady(mapFragment: MapFragment) + fun onPlaceSelected(place: Place) + } +} \ No newline at end of file