diff options
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt')
-rw-r--r-- | androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt | 86 |
1 files changed, 66 insertions, 20 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt index 600cfe1..e1a24ec 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt @@ -24,6 +24,7 @@ import mx.trackermap.TrackerMap.android.details.UnitDetailsAdapter import mx.trackermap.TrackerMap.android.map.MapFragment import mx.trackermap.TrackerMap.android.shared.MarkerTransformations import mx.trackermap.TrackerMap.client.models.EventInformation +import mx.trackermap.TrackerMap.client.models.Geofence import mx.trackermap.TrackerMap.client.models.Position import mx.trackermap.TrackerMap.client.models.Stop import mx.trackermap.TrackerMap.controllers.ReportController @@ -42,9 +43,7 @@ class UnitReportsFragment : Fragment() { private val binding get() = _binding!! private val unitReportsViewModel: UnitReportsViewModel by viewModel() - private val reportsMapFragment: MapFragment by lazy { - MapFragment() - } + private lateinit var reportsMapFragment: MapFragment override fun onCreateView( inflater: LayoutInflater, @@ -61,19 +60,24 @@ class UnitReportsFragment : Fragment() { unitReportsViewModel.setDeviceId( arguments?.getInt(UnitDetailsAdapter.DEVICE_ID_ARG) ?: 0) setupEvents() - initializeMap() } override fun onResume() { super.onResume() + initializeMap() setupObservers() } - override fun onStop() { - super.onStop() + override fun onPause() { + super.onPause() removeObservers() + removeMap() + + if (unitReportsViewModel.report.value == null) { + unitReportsViewModel.fetchReport() + } } override fun onDestroyView() { @@ -83,11 +87,19 @@ class UnitReportsFragment : Fragment() { private fun initializeMap() { Log.d("UnitReportsFragment", "initializeMap()") + reportsMapFragment = MapFragment() childFragmentManager.commit { replace(R.id.reportsMapContainer, reportsMapFragment) } } + private fun removeMap() { + Log.d("UnitReportsFragment", "removeMap()") + childFragmentManager.commit { + remove(reportsMapFragment) + } + } + private fun setupEvents() { binding.reportType.setOnPositionChangedListener { position -> unitReportsViewModel.setReportType( @@ -109,12 +121,14 @@ class UnitReportsFragment : Fragment() { } private fun setupObservers() { + Log.d("UnitReportsFragment", "Adding observers") unitReportsViewModel.report.observe(viewLifecycleOwner) { report -> Log.d("UnitReportsFragment", "Report available: $report") when (report) { is ReportController.Report.PositionsReport -> { display(report.positions) + display(unitReportsViewModel.geofences.value!!) showMap(true) } is ReportController.Report.EventsReport -> { @@ -123,6 +137,7 @@ class UnitReportsFragment : Fragment() { } is ReportController.Report.StopsReport -> { display(report.stops) + display(unitReportsViewModel.geofences.value!!) showMap(true) } is ReportController.Report.XlsxReport -> { @@ -150,11 +165,17 @@ class UnitReportsFragment : Fragment() { } ) } + + unitReportsViewModel.geofences.observe(viewLifecycleOwner) { geofences -> + display(geofences) + } } private fun removeObservers() { + Log.d("UnitReportsFragment", "Removing observers") unitReportsViewModel.report.removeObservers(viewLifecycleOwner) unitReportsViewModel.reportPeriod.removeObservers(viewLifecycleOwner) + unitReportsViewModel.clearReport() } private fun showPeriodPopUp(view: View) { @@ -179,15 +200,22 @@ class UnitReportsFragment : Fragment() { } private fun display(positions: Array<Position>) { - Log.d("UnitReportsFragment", "Displaying positions: $positions") + if (reportsMapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying positions: $positions") - binding.eventsScroll.visibility = View.GONE - binding.reportsMapContainer.visibility = View.VISIBLE + binding.eventsScroll.visibility = View.GONE + binding.reportsMapContainer.visibility = View.VISIBLE - reportsMapFragment.display( - positions.mapNotNull(MarkerTransformations::positionToMarker).toTypedArray(), - isReport = true - ) + reportsMapFragment.display( + positions.mapNotNull(MarkerTransformations::positionToMarker).toTypedArray(), + isReport = true + ) + } else { + reportsMapFragment.setupCallbacks.clear() + reportsMapFragment.setupCallbacks.add { + display(positions) + } + } } private fun display(events: Array<EventInformation>) { @@ -257,15 +285,33 @@ class UnitReportsFragment : Fragment() { } private fun display(stops: Array<Stop>) { - Log.d("UnitReportsFragment", "Displaying stops: $stops") + if (reportsMapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying stops: $stops") - binding.eventsScroll.visibility = View.GONE - binding.reportsMapContainer.visibility = View.VISIBLE + binding.eventsScroll.visibility = View.GONE + binding.reportsMapContainer.visibility = View.VISIBLE - reportsMapFragment.display( - stops.mapNotNull(MarkerTransformations::stopToMarker).toTypedArray(), - isReport = true - ) + reportsMapFragment.display( + stops.mapNotNull(MarkerTransformations::stopToMarker).toTypedArray(), + isReport = true + ) + } else { + reportsMapFragment.setupCallbacks.add { + display(stops) + } + } + } + + private fun display(geofences: Array<Geofence>) { + Log.d("UnitReportsFragment", "Geofences: $geofences") + if (reportsMapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying geofences: $geofences") + reportsMapFragment.displayGeofences(geofences) + } else { + reportsMapFragment.setupCallbacks.add { + display(geofences) + } + } } private fun loading() { |