diff options
author | Isidro Henoch <imhenoch@protonmail.com> | 2022-01-03 15:15:50 -0600 |
---|---|---|
committer | Isidro Henoch <imhenoch@protonmail.com> | 2022-01-03 15:15:50 -0600 |
commit | f6171f524e64966355fa64644a46939a35beb412 (patch) | |
tree | 0e0a1c2a6ed83d18141225e1ed1fa7141aec6703 /androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt | |
parent | 1c94fbca0faebea6d005a92a53e7885e3ddd7dc6 (diff) | |
download | etbsa-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.kt | 103 |
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 |