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.kt102
1 files changed, 80 insertions, 22 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 bbd1fd7..33b0dfc 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
@@ -8,18 +8,24 @@ import android.view.ViewGroup
import android.widget.PopupMenu
import android.widget.TableRow
import android.widget.TextView
+import androidx.core.view.setMargins
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
+import kotlinx.coroutines.DelicateCoroutinesApi
import mx.trackermap.TrackerMap.android.R
import mx.trackermap.TrackerMap.android.databinding.UnitDetailsReportsBinding
import mx.trackermap.TrackerMap.android.details.UnitDetailsAdapter
import mx.trackermap.TrackerMap.android.map.MapFragment
import mx.trackermap.TrackerMap.android.map.MarkerTransformations
import mx.trackermap.TrackerMap.client.models.Event
+import mx.trackermap.TrackerMap.client.models.EventInformation
import mx.trackermap.TrackerMap.client.models.Position
import mx.trackermap.TrackerMap.client.models.Stop
+import mx.trackermap.TrackerMap.utils.Formatter
import org.koin.androidx.viewmodel.ext.android.viewModel
+import kotlin.math.max
+@DelicateCoroutinesApi
class UnitReportsFragment : Fragment() {
private var _binding: UnitDetailsReportsBinding? = null
@@ -42,8 +48,8 @@ class UnitReportsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- unitReportsViewModel.deviceId.value =
- arguments?.getInt(UnitDetailsAdapter.DEVICE_ID_ARG) ?: 0
+ unitReportsViewModel.setDeviceId(
+ arguments?.getInt(UnitDetailsAdapter.DEVICE_ID_ARG) ?: 0)
initializeMap()
setupEvents()
setupObservers()
@@ -62,21 +68,23 @@ class UnitReportsFragment : Fragment() {
private fun setupEvents() {
binding.reportType.setOnPositionChangedListener { position ->
- unitReportsViewModel.reportType.value = when (position) {
- 0 -> UnitReportsViewModel.ReportType.POSITIONS
- 1 -> UnitReportsViewModel.ReportType.EVENTS
- else -> UnitReportsViewModel.ReportType.STOPS
- }
+ unitReportsViewModel.setReportType(
+ when (position) {
+ 0 -> UnitReportsViewModel.ReportType.POSITIONS
+ 1 -> UnitReportsViewModel.ReportType.EVENTS
+ else -> UnitReportsViewModel.ReportType.STOPS
+ }
+ )
}
binding.periodButton.setOnClickListener {
showPeriodPopUp(it)
}
- unitReportsViewModel.reportPeriod.value = UnitReportsViewModel.ReportPeriod.DAY
- unitReportsViewModel.reportType.value = UnitReportsViewModel.ReportType.POSITIONS
+ unitReportsViewModel.setReportPeriod(UnitReportsViewModel.ReportPeriod.DAY)
+ unitReportsViewModel.setReportType(UnitReportsViewModel.ReportType.POSITIONS)
}
private fun setupObservers() {
- unitReportsViewModel.report.observe(this) { report ->
+ unitReportsViewModel.report.observe(viewLifecycleOwner) { report ->
Log.d("UnitReportsFragment", "Report available: $report")
when (report) {
@@ -96,7 +104,7 @@ class UnitReportsFragment : Fragment() {
}
}
- unitReportsViewModel.reportPeriod.observe(this) { period ->
+ unitReportsViewModel.reportPeriod.observe(viewLifecycleOwner) { period ->
Log.d("UnitReportsFragment", "Period changed: $period")
if (period == null) {
return@observe
@@ -110,17 +118,23 @@ class UnitReportsFragment : Fragment() {
}
)
}
+
+ unitReportsViewModel.geofences.observe(this) { geofences ->
+ Log.d("UnitReportsFragment", "Success $geofences")
+ }
}
private fun showPeriodPopUp(view: View) {
val popOver = PopupMenu(context, view)
popOver.menuInflater.inflate(R.menu.report_period_options, popOver.menu)
popOver.setOnMenuItemClickListener { item ->
- unitReportsViewModel.reportPeriod.value = when (item.itemId) {
- R.id.dayOption -> UnitReportsViewModel.ReportPeriod.DAY
- R.id.weekOption -> UnitReportsViewModel.ReportPeriod.WEEK
- else -> UnitReportsViewModel.ReportPeriod.MONTH
- }
+ unitReportsViewModel.setReportPeriod(
+ when (item.itemId) {
+ R.id.dayOption -> UnitReportsViewModel.ReportPeriod.DAY
+ R.id.weekOption -> UnitReportsViewModel.ReportPeriod.WEEK
+ else -> UnitReportsViewModel.ReportPeriod.MONTH
+ }
+ )
true
}
popOver.show()
@@ -137,25 +151,69 @@ class UnitReportsFragment : Fragment() {
)
}
- private fun display(events: Array<Event>) {
+ private fun display(events: Array<EventInformation>) {
Log.d("UnitReportsFragment", "Displaying events: $events")
binding.eventsScroll.visibility = View.VISIBLE
binding.reportsMapContainer.visibility = View.GONE
- binding.eventsTable.removeViews(1, Math.max(0, binding.eventsTable.childCount - 1))
+ binding.eventsTable.removeViews(1, max(0, binding.eventsTable.childCount - 1))
val context = context!!
events.forEach { event ->
+ val layoutParams = TableRow.LayoutParams()
+ layoutParams.setMargins(
+ resources.getDimensionPixelSize(R.dimen.padding)
+ )
val row = TableRow(context)
- val eventText = TextView(context)
val datetimeText = TextView(context)
+ val eventText = TextView(context)
+ val geofenceText = TextView(context)
+ val addressText = TextView(context)
+
+ datetimeText.layoutParams = layoutParams
+ eventText.layoutParams = layoutParams
+ geofenceText.layoutParams = layoutParams
+ addressText.layoutParams = layoutParams
- row.addView(eventText)
row.addView(datetimeText)
+ row.addView(eventText)
+ row.addView(geofenceText)
+ row.addView(addressText)
binding.eventsTable.addView(row)
- eventText.text = event.type
- datetimeText.text = event.eventTime
+ event.event.eventTime?.let { it ->
+ datetimeText.text = Formatter.formatDate(it)
+ }
+ event.event.type?.let {
+ eventText.text = getString(when (it) {
+ "deviceOnline" -> R.string.event_device_online
+ "deviceUnknown" -> R.string.event_device_unknown
+ "deviceOffline" -> R.string.event_device_offline
+ "deviceInactive" -> R.string.event_device_inactive
+ "deviceMoving" -> R.string.event_device_moving
+ "deviceStopped" -> R.string.event_device_stopped
+ "deviceOverspeed" -> R.string.event_device_overspeed
+ "deviceFuelDrop" -> R.string.event_device_fuel_drop
+ "commandResult" -> R.string.event_command_result
+ "geofenceEnter" -> R.string.event_geofence_enter
+ "geofenceExit" -> R.string.event_geofence_exit
+ "alarm" -> R.string.event_alarm
+ "ignitionOn" -> R.string.event_ignition_on
+ "ignitionOff" -> R.string.event_ignition_off
+ "maintenance" -> R.string.event_maintenance
+ "textMessage" -> R.string.event_text_message
+ "driverChanged" -> R.string.event_driver_changed
+ else -> R.string.event_unknown
+ })
+ }
+ event.event.geofenceId?.let {
+ val geofence = unitReportsViewModel.getGeofence(it)
+ Log.d("UnitReportsFragment", "Getting geofence $geofence")
+ geofenceText.text = geofence?.name
+ }
+ event.position?.let {
+ addressText.text = it.address
+ }
}
}