aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsFragment.kt
diff options
context:
space:
mode:
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.kt86
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() {