aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt
diff options
context:
space:
mode:
authorIsidro Henoch <imhenoch@protonmail.com>2022-01-03 15:15:50 -0600
committerIsidro Henoch <imhenoch@protonmail.com>2022-01-03 15:15:50 -0600
commitf6171f524e64966355fa64644a46939a35beb412 (patch)
tree0e0a1c2a6ed83d18141225e1ed1fa7141aec6703 /androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt
parent1c94fbca0faebea6d005a92a53e7885e3ddd7dc6 (diff)
downloadetbsa-trackermap-mobile-f6171f524e64966355fa64644a46939a35beb412.tar.gz
etbsa-trackermap-mobile-f6171f524e64966355fa64644a46939a35beb412.tar.bz2
etbsa-trackermap-mobile-f6171f524e64966355fa64644a46939a35beb412.zip
Splits the MapFragment funcionality
- Now there's MapFragment, which is the map and is responsible for displaying markers and focusing on a particular point. This functionality will be extended. - UnitMapFragment is the entity in charge of the subscriptions and converts UnitInformation entities to something MapFragment can handle.
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt103
1 files changed, 103 insertions, 0 deletions
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
new file mode 100644
index 0000000..7212a23
--- /dev/null
+++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt
@@ -0,0 +1,103 @@
+package mx.trackermap.TrackerMap.android.map
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import kotlinx.coroutines.DelicateCoroutinesApi
+import mx.trackermap.TrackerMap.android.R
+import mx.trackermap.TrackerMap.android.databinding.UnitMapFragmentBinding
+import mx.trackermap.TrackerMap.android.units.UnitsViewModel
+import mx.trackermap.TrackerMap.client.models.UnitInformation
+import org.koin.androidx.viewmodel.ext.android.viewModel
+
+@DelicateCoroutinesApi
+class UnitMapFragment : Fragment() {
+
+ private val unitsViewModel: UnitsViewModel by viewModel()
+
+ private var _binding: UnitMapFragmentBinding? = null
+ private val binding get() = _binding!!
+ private lateinit var unitsMapFragment: MapFragment
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ _binding = UnitMapFragmentBinding.inflate(inflater)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ initializeMap()
+ setupObservers()
+ }
+
+ private fun initializeMap() {
+ unitsMapFragment = childFragmentManager.findFragmentById(R.id.unitsMap) as MapFragment
+ }
+
+ private fun setupObservers() {
+ Log.d("MapFragment", "setupObservers()")
+
+ unitsViewModel.units.observe(viewLifecycleOwner) { units ->
+ Log.d("UnitMapFragment", "Available units: $units")
+
+ unitsMapFragment.display(units.mapNotNull(this::unitToMarker).toTypedArray())
+ }
+
+ unitsViewModel.selectedUnit.observe(viewLifecycleOwner) { selectedUnit ->
+ Log.d("UnitMapFragment", "Selected Unit: $selectedUnit")
+
+ binding.mapUnitCard.visibility = if (selectedUnit == null) View.GONE else View.VISIBLE
+ selectedUnit?.position?.let { position ->
+ if (position.latitude == null || position.longitude == null) {
+ return@let
+ }
+
+ unitsMapFragment.focusOn(position.latitude!!, position.longitude!!)
+ }
+ }
+ }
+
+ private fun unitToMarker(unit: UnitInformation): MapFragment.Marker? {
+ if (unit.position == null || unit.position!!.latitude == null || unit.position!!.longitude == null) {
+ return null
+ }
+
+ return MapFragment.Marker(
+ unit.position!!.id!!,
+ unit.position!!.latitude!!,
+ unit.position!!.longitude!!,
+ when (unit.device.category?.lowercase()) {
+ "animal" -> MapFragment.MarkerType.ANIMAL
+ "bicycle" -> MapFragment.MarkerType.BICYCLE
+ "boat" -> MapFragment.MarkerType.BOAT
+ "bus" -> MapFragment.MarkerType.BUS
+ "car" -> MapFragment.MarkerType.CAR
+ "crane" -> MapFragment.MarkerType.CRANE
+ "helicopter" -> MapFragment.MarkerType.HELICOPTER
+ "motorcycle" -> MapFragment.MarkerType.MOTORCYCLE
+ "offroad" -> MapFragment.MarkerType.OFFROAD
+ "person" -> MapFragment.MarkerType.PERSON
+ "pickup" -> MapFragment.MarkerType.PICKUP
+ "plane" -> MapFragment.MarkerType.PLANE
+ "scooter" -> MapFragment.MarkerType.SCOOTER
+ "ship" -> MapFragment.MarkerType.SHIP
+ "tractor" -> MapFragment.MarkerType.TRACTOR
+ "train" -> MapFragment.MarkerType.TRAIN
+ "tram" -> MapFragment.MarkerType.TRAM
+ "trolleybus" -> MapFragment.MarkerType.TROLLEYBUS
+ "truck" -> MapFragment.MarkerType.TRUCK
+ "van" -> MapFragment.MarkerType.VAN
+ else -> MapFragment.MarkerType.DEFAULT
+ }
+ )
+ }
+
+} \ No newline at end of file