aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2021-12-30 22:05:55 -0600
committerIván Ávalos <avalos@disroot.org>2021-12-30 22:43:25 -0600
commit1c4c5128fac5b1b6c8d9de29bd1ccf6262c7894b (patch)
tree1468e72b8b6afdb1527c7092751f85605efc7e4e /androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
parentc11d9d0aaa0428e93df978642a54ba466ccf4e93 (diff)
downloadetbsa-trackermap-mobile-1c4c5128fac5b1b6c8d9de29bd1ccf6262c7894b.tar.gz
etbsa-trackermap-mobile-1c4c5128fac5b1b6c8d9de29bd1ccf6262c7894b.tar.bz2
etbsa-trackermap-mobile-1c4c5128fac5b1b6c8d9de29bd1ccf6262c7894b.zip
- ViewModel LiveData no longer externally mutable.
- Observers in fragments now owned by viewLifecycleOwner. - Disabled center animation on MapFragment startup - Search filter now triggered automatically. - Case insensitive filter logic.
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt33
1 files changed, 18 insertions, 15 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
index 289cc2d..8dbd26c 100644
--- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
@@ -1,19 +1,15 @@
package mx.trackermap.TrackerMap.android.map
import android.graphics.BitmapFactory
-import android.graphics.Point
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.mousebird.maply.*
-import io.ktor.util.*
import kotlinx.coroutines.DelicateCoroutinesApi
import mx.trackermap.TrackerMap.android.R
-import mx.trackermap.TrackerMap.android.databinding.MapFragmentBinding
import mx.trackermap.TrackerMap.android.units.UnitsViewModel
-import mx.trackermap.TrackerMap.client.models.UnitInformation
import org.koin.androidx.viewmodel.ext.android.viewModel
import java.io.File
@@ -22,7 +18,7 @@ class MapFragment: GlobeMapFragment() {
private val unitsViewModel: UnitsViewModel by viewModel()
- private val markers = mutableListOf<ScreenMarker>()
+ private val markers = mutableListOf<Pair<ScreenMarker, ComponentObject>>()
override fun chooseDisplayType(): MapDisplayType {
return MapDisplayType.Map
@@ -59,7 +55,7 @@ class MapFragment: GlobeMapFragment() {
val latitude = 23.191 * Math.PI / 180
val longitude = -100.36 * Math.PI / 180
val zoom = 0.4
- mapControl.animatePositionGeo(longitude, latitude, zoom, 1.0)
+ mapControl.setPositionGeo(longitude, latitude, zoom)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -70,13 +66,18 @@ class MapFragment: GlobeMapFragment() {
@DelicateCoroutinesApi
private fun setupObservers() {
- unitsViewModel.units.observe(this) { units ->
+ Log.d("MapFragment", "setupObservers()")
+ unitsViewModel.units.observe(viewLifecycleOwner) { units ->
+ /* Remove all markers */
+ markers.forEach {
+ mapControl.removeObject(it.second, ThreadMode.ThreadAny)
+ }
+ markers.clear()
+
+ /* Reinsert markers from units */
units.forEach { unit ->
unit.position?.let { position ->
if (position.longitude != null && position.longitude != null) {
-
- /* Add marker */
- val markerInfo = MarkerInfo()
val icon =
BitmapFactory.decodeResource(
activity!!.resources,
@@ -105,23 +106,25 @@ class MapFragment: GlobeMapFragment() {
else -> R.drawable.map_default
}
)
- val markerSize = Point2d(144.0, 144.0)
val marker = ScreenMarker()
+ val markerSize = Point2d(144.0, 144.0)
+
marker.loc = Point2d.FromDegrees(position.longitude!!, position.latitude!!)
marker.image = icon
marker.size = markerSize
marker.userObject = unit
- markers.add(marker)
- mapControl.addScreenMarker(marker, markerInfo, ThreadMode.ThreadAny)
+ /* Add marker to map */
+ val markerInfo = MarkerInfo()
+ val componentObject = mapControl.addScreenMarker(marker, markerInfo, ThreadMode.ThreadAny)
+ markers.add(marker to componentObject)
}
}
}
}
- unitsViewModel.selectedUnit.observe(this) {
+ unitsViewModel.selectedUnit.observe(viewLifecycleOwner) {
it?.let { unit ->
- Log.d("MapFragment", "Centering map on ${it.position?.latitude}, ${it.position?.longitude}")
unit.position?.let { position ->
val latitude = position.latitude!! * Math.PI / 180
val longitude = position.longitude!! * Math.PI / 180