Convert MapFragment to Kotlin

pull/1369/head
Alex Baker 5 years ago
parent c2af267ca3
commit 29fdba597b

@ -21,12 +21,12 @@ import org.tasks.data.Place
import org.tasks.location.MapFragment.MapFragmentCallback import org.tasks.location.MapFragment.MapFragmentCallback
class OsmMapFragment(private val context: Context) : MapFragment { class OsmMapFragment(private val context: Context) : MapFragment {
private lateinit var callbacks: MapFragmentCallback private lateinit var callback: MapFragmentCallback
private lateinit var map: MapView private lateinit var map: MapView
private var locationOverlay: MyLocationNewOverlay? = null private var locationOverlay: MyLocationNewOverlay? = null
override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) {
this.callbacks = callbacks this.callback = callback
Configuration.getInstance() Configuration.getInstance()
.load(activity, PreferenceManager.getDefaultSharedPreferences(activity)) .load(activity, PreferenceManager.getDefaultSharedPreferences(activity))
map = MapView(activity).apply { map = MapView(activity).apply {
@ -42,10 +42,11 @@ class OsmMapFragment(private val context: Context) : MapFragment {
overlays.add(copyright) overlays.add(copyright)
activity.findViewById<ViewGroup>(R.id.map).addView(this) activity.findViewById<ViewGroup>(R.id.map).addView(this)
} }
callbacks.onMapReady(this) callback.onMapReady(this)
} }
override fun getMapPosition(): MapPosition { override val mapPosition: MapPosition
get() {
val center = map.mapCenter val center = map.mapCenter
return MapPosition(center.latitude, center.longitude, map.zoomLevelDouble.toFloat()) return MapPosition(center.latitude, center.longitude, map.zoomLevelDouble.toFloat())
} }
@ -70,7 +71,7 @@ class OsmMapFragment(private val context: Context) : MapFragment {
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_TOP) setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_TOP)
icon = ContextCompat.getDrawable(context, R.drawable.ic_map_marker_select_red_48dp)!!.mutate() icon = ContextCompat.getDrawable(context, R.drawable.ic_map_marker_select_red_48dp)!!.mutate()
setOnMarkerClickListener { _, _ -> setOnMarkerClickListener { _, _ ->
callbacks.onPlaceSelected(place) callback.onPlaceSelected(place)
false false
} }
}) })
@ -78,9 +79,7 @@ class OsmMapFragment(private val context: Context) : MapFragment {
} }
@SuppressLint("ClickableViewAccessibility") @SuppressLint("ClickableViewAccessibility")
override fun disableGestures() { override fun disableGestures() = map.setOnTouchListener { _, _ -> true }
map.setOnTouchListener { _, _ -> true }
}
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
override fun showMyLocation() { override fun showMyLocation() {

@ -13,14 +13,16 @@ import org.tasks.data.Place
import org.tasks.location.MapFragment.MapFragmentCallback import org.tasks.location.MapFragment.MapFragmentCallback
import java.util.* 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<Marker> = ArrayList() private val markers: MutableList<Marker> = ArrayList()
private lateinit var callbacks: MapFragmentCallback private lateinit var callback: MapFragmentCallback
private var dark = false private var dark = false
private var map: GoogleMap? = null private var map: GoogleMap? = null
override fun init(activity: AppCompatActivity, callbacks: MapFragmentCallback, dark: Boolean) { override fun init(activity: AppCompatActivity, callback: MapFragmentCallback, dark: Boolean) {
this.callbacks = callbacks this.callback = callback
this.dark = dark this.dark = dark
val fragmentManager = activity.supportFragmentManager val fragmentManager = activity.supportFragmentManager
var mapFragment = fragmentManager.findFragmentByTag(FRAG_TAG_MAP) as SupportMapFragment? var mapFragment = fragmentManager.findFragmentByTag(FRAG_TAG_MAP) as SupportMapFragment?
@ -31,13 +33,10 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC
mapFragment.getMapAsync(this) mapFragment.getMapAsync(this)
} }
override fun getMapPosition(): MapPosition? { override val mapPosition: MapPosition?
if (map == null) { get() = map?.cameraPosition?.let { it ->
return null 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) { override fun movePosition(mapPosition: MapPosition, animate: Boolean) {
@ -70,7 +69,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC
} }
override fun disableGestures() { override fun disableGestures() {
map!!.uiSettings.setAllGesturesEnabled(false) map?.uiSettings?.setAllGesturesEnabled(false)
} }
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
@ -87,7 +86,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC
uiSettings.isMyLocationButtonEnabled = false uiSettings.isMyLocationButtonEnabled = false
uiSettings.isRotateGesturesEnabled = false uiSettings.isRotateGesturesEnabled = false
map!!.setOnMarkerClickListener(this) map!!.setOnMarkerClickListener(this)
callbacks.onMapReady(this) callback.onMapReady(this)
} }
override fun onPause() {} override fun onPause() {}
@ -97,7 +96,7 @@ class GoogleMapFragment(private val context: Context) : MapFragment, OnMapReadyC
override fun onDestroy() {} override fun onDestroy() {}
override fun onMarkerClick(marker: Marker): Boolean { override fun onMarkerClick(marker: Marker): Boolean {
callbacks.onPlaceSelected(marker.tag as Place?) callback.onPlaceSelected(marker.tag as Place)
return true return true
} }

@ -103,12 +103,12 @@ class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmen
finish() finish()
} }
override fun onMapReady(mapFragment: MapFragment?) { override fun onMapReady(mapFragment: MapFragment) {
map = mapFragment!! map = mapFragment
map.setMarkers(listOf(place)) map.setMarkers(listOf(place))
map.disableGestures() map.disableGestures()
map.movePosition(place.mapPosition, false) map.movePosition(place.mapPosition, false)
} }
override fun onPlaceSelected(place: Place?) {} override fun onPlaceSelected(place: Place) {}
} }

@ -188,11 +188,10 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC
if (permissionChecker.canAccessForegroundLocation()) { if (permissionChecker.canAccessForegroundLocation()) {
mapFragment.showMyLocation() mapFragment.showMyLocation()
} }
if (mapPosition != null) {
map.movePosition(mapPosition, false) mapPosition
} else if (permissionChecker.canAccessForegroundLocation()) { ?.let { map.movePosition(it, false) }
moveToCurrentLocation(false) ?: moveToCurrentLocation(false)
}
} }
override fun onBackPressed() { override fun onBackPressed() {
@ -213,11 +212,7 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC
} }
@OnClick(R.id.current_location) @OnClick(R.id.current_location)
fun onClick() { fun onClick() = moveToCurrentLocation(true)
if (permissionRequestor.requestForegroundLocation()) {
moveToCurrentLocation(true)
}
}
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(
requestCode: Int, permissions: Array<String>, grantResults: IntArray) { requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
@ -258,6 +253,9 @@ class LocationPickerActivity : InjectingAppCompatActivity(), Toolbar.OnMenuItemC
@SuppressLint("MissingPermission") @SuppressLint("MissingPermission")
private fun moveToCurrentLocation(animate: Boolean) { private fun moveToCurrentLocation(animate: Boolean) {
if (!permissionChecker.canAccessForegroundLocation()) {
return
}
LocationEngineProvider.getBestLocationEngine(this) LocationEngineProvider.getBestLocationEngine(this)
.getLastLocation( .getLastLocation(
object : LocationEngineCallback<LocationEngineResult> { object : LocationEngineCallback<LocationEngineResult> {

@ -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<Place> places);
void disableGestures();
void showMyLocation();
void onPause();
void onResume();
void onDestroy();
interface MapFragmentCallback {
void onMapReady(MapFragment mapFragment);
void onPlaceSelected(Place place);
}
}

@ -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<Place>)
fun disableGestures()
fun showMyLocation()
fun onPause()
fun onResume()
fun onDestroy()
interface MapFragmentCallback {
fun onMapReady(mapFragment: MapFragment)
fun onPlaceSelected(place: Place)
}
}
Loading…
Cancel
Save