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 | 102 |
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 + } } } |