From 5b39665ccdf318fe3b43fa76519484bc98764884 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Tue, 18 Jan 2022 00:25:39 -0600 Subject: Improvements to zoom on UnitMapFragment.kt --- .../TrackerMap/android/map/UnitMapFragment.kt | 36 +++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/map') diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt index 768c0f0..ca59266 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.commit import androidx.fragment.app.viewModels +import com.mousebird.maply.Point2d import kotlin.time.ExperimentalTime import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R @@ -30,7 +31,7 @@ class UnitMapFragment : Fragment() { private val binding get() = _binding!! private lateinit var mapFragment: MapWrapperFragment - private var shouldCenter = true + private var shouldCenterMap = true override fun onCreateView( inflater: LayoutInflater, @@ -60,7 +61,7 @@ class UnitMapFragment : Fragment() { } private fun initializeMap() { - shouldCenter = true + shouldCenterMap = true mapFragment = MapWrapperFragment.newInstance( overlayMarginTop = resources.getDimensionPixelSize(R.dimen.nav_height) ) @@ -78,10 +79,12 @@ class UnitMapFragment : Fragment() { mapFragment.display( units.toTypedArray(), isReport = false, - center = shouldCenter && unitsViewModel.selectedUnit.value == null + center = shouldCenterMap + && unitsViewModel.selectedUnit.value == null + && unitsViewModel.camera.value == null ) if (units.isNotEmpty()) { - shouldCenter = false + shouldCenterMap = false } } @@ -91,7 +94,8 @@ class UnitMapFragment : Fragment() { binding.mapUnitCard.visibility = if (selectedUnit == null) View.GONE else View.VISIBLE selectedUnit?.let { unit -> - if (unit.position == null || unit.position!!.latitude == null || unit.position!!.longitude == null) { + if (unit.position == null || unit.position?.latitude == null || unit.position?.longitude == null) { + binding.mapUnitCard.visibility = View.GONE return@let } @@ -107,7 +111,14 @@ class UnitMapFragment : Fragment() { ), binding.mapUnitCard.context, unit, this::itemAction ) - mapFragment.focusOn(unit.position!!.latitude!!, unit.position!!.longitude!!) + unitsViewModel.moveCamera( + UnitsViewModel.Camera( + point = Point2d( + unit.position!!.longitude!!, unit.position!!.latitude!! + ), + animated = true + ) + ) } } @@ -115,13 +126,24 @@ class UnitMapFragment : Fragment() { Log.d("UnitMapFragment", "Loading layer!") mapFragment.updateLayer(type) unitsViewModel.selectedUnit.value?.let { - mapFragment.focusOn(it.position!!.latitude!!, it.position!!.longitude!!) + unitsViewModel.moveCamera( + UnitsViewModel.Camera( + point = Point2d( + it.position!!.longitude!!, it.position!!.latitude!! + ), + animated = false + ) + ) } } unitsViewModel.geofences.observe(viewLifecycleOwner) { geofences -> mapFragment.display(geofences.values.toTypedArray()) } + + unitsViewModel.camera.observe(viewLifecycleOwner) { camera -> + mapFragment.focusOn(camera.point.y, camera.point.x) + } } private fun removeObservers() { -- cgit v1.2.3