diff options
author | Iván Ávalos <avalos@disroot.org> | 2022-01-16 18:21:12 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2022-01-16 18:21:12 -0600 |
commit | c7b28c25b032a1b82b782ef5ff8dd5e703d5a8ad (patch) | |
tree | 4095a6c4c64442277081e58fff72829ac01c7d11 /androidApp/src/main/java | |
parent | f47c9f6b62dd1949cd2f926348a7e057c3ae221c (diff) | |
parent | 21e16e27f047053582d8b0c722feedf3c8badebe (diff) | |
download | etbsa-trackermap-mobile-c7b28c25b032a1b82b782ef5ff8dd5e703d5a8ad.tar.gz etbsa-trackermap-mobile-c7b28c25b032a1b82b782ef5ff8dd5e703d5a8ad.tar.bz2 etbsa-trackermap-mobile-c7b28c25b032a1b82b782ef5ff8dd5e703d5a8ad.zip |
Merge branch 'main' of https://git.sr.ht/~avalos/trackermap-mobile
Diffstat (limited to 'androidApp/src/main/java')
12 files changed, 122 insertions, 68 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/DetailsActivity.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/DetailsActivity.kt index f66a760..c6d260b 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/DetailsActivity.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/DetailsActivity.kt @@ -12,7 +12,7 @@ import com.google.android.material.tabs.TabLayoutMediator import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.DetailsActivityBinding -import mx.trackermap.TrackerMap.android.devices.Action +import mx.trackermap.TrackerMap.android.shared.UnitRenderData @DelicateCoroutinesApi class DetailsActivity : AppCompatActivity() { @@ -47,7 +47,7 @@ class DetailsActivity : AppCompatActivity() { private fun initialize() { deviceId = intent.getIntExtra(DEVICE_ID_EXTRA, 0) deviceName = intent.getStringExtra(DEVICE_NAME_EXTRA) ?: "" - val initialSection = intent.getSerializableExtra(ACTION_EXTRA) as Action + val initialSection = intent.getSerializableExtra(ACTION_EXTRA) as UnitRenderData.Action Log.d("DetailsActivity", "Device ID - $deviceId") Log.d("DetailsActivity", "Initial Section - $initialSection") @@ -62,14 +62,14 @@ class DetailsActivity : AppCompatActivity() { }.attach() binding.detailsPager.setCurrentItem( when (initialSection) { - Action.DETAILS -> 0 - Action.REPORTS -> 1 + UnitRenderData.Action.DETAILS -> 0 + UnitRenderData.Action.REPORTS -> 1 else -> 2 }, false ) binding.detailsPager.isUserInputEnabled = when (initialSection) { - Action.DETAILS -> true - Action.REPORTS -> false + UnitRenderData.Action.DETAILS -> true + UnitRenderData.Action.REPORTS -> false else -> true } binding.detailsTabs.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener { @@ -84,6 +84,9 @@ class DetailsActivity : AppCompatActivity() { override fun onTabUnselected(tab: TabLayout.Tab?) {} override fun onTabReselected(tab: TabLayout.Tab?) {} }) + binding.closeButton.setOnClickListener { + finish() + } requestPermission {} } diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/commands/UnitCommandsFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/commands/UnitCommandsFragment.kt index b56a403..822d351 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/commands/UnitCommandsFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/commands/UnitCommandsFragment.kt @@ -75,7 +75,7 @@ class UnitCommandsFragment: Fragment() { setPositiveButton(R.string.shared_cancel) { dialogInterface, _ -> dialogInterface.dismiss() } - setNegativeButton(R.string.send_command) { dialogInterface, _ -> + setNegativeButton(R.string.shared_send) { dialogInterface, _ -> unitCommandsViewModel.sendCommand() dialogInterface.dismiss() } diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/information/UnitInformationFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/information/UnitInformationFragment.kt index 0c3577e..6c15ae4 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/information/UnitInformationFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/information/UnitInformationFragment.kt @@ -13,6 +13,7 @@ import androidx.core.widget.TextViewCompat import androidx.fragment.app.Fragment import com.google.android.material.button.MaterialButton import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.serialization.json.longOrNull import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitDetailsInformationBinding import mx.trackermap.TrackerMap.android.details.UnitDetailsAdapter @@ -94,6 +95,13 @@ class UnitInformationFragment : Fragment() { unit.position?.address?.let { address -> details.add(getString(R.string.unit_info_address) to address) } + unit.position?.attributes?.get("hours")?.longOrNull?.let { + if (it > 0) { + details.add( + getString(R.string.unit_hourmeter) to Formatter.formatHours(it) + ) + } + } unit.position?.protocol?.let { protocol -> details.add(getString(R.string.unit_info_protocol) to protocol) } 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 20d2a48..4c87b31 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 @@ -22,7 +22,7 @@ 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.android.shared.MarkerTransformations import mx.trackermap.TrackerMap.client.models.EventInformation import mx.trackermap.TrackerMap.client.models.Position import mx.trackermap.TrackerMap.client.models.Stop @@ -205,26 +205,28 @@ class UnitReportsFragment : Fragment() { 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 - }) + eventText.text = getString( + when (EventInformation.stringToReportType(it)) { + EventInformation.Type.DEVICE_ONLINE -> R.string.event_device_online + EventInformation.Type.DEVICE_UNKNOWN -> R.string.event_device_unknown + EventInformation.Type.DEVICE_OFFLINE -> R.string.event_device_offline + EventInformation.Type.DEVICE_INACTIVE -> R.string.event_device_inactive + EventInformation.Type.DEVICE_MOVING -> R.string.event_device_moving + EventInformation.Type.DEVICE_STOPPED -> R.string.event_device_stopped + EventInformation.Type.DEVICE_OVERSPEED -> R.string.event_device_overspeed + EventInformation.Type.DEVICE_FUEL_DROP -> R.string.event_device_fuel_drop + EventInformation.Type.COMMAND_RESULT -> R.string.event_command_result + EventInformation.Type.GEOFENCE_ENTER -> R.string.event_geofence_enter + EventInformation.Type.GEOFENCE_EXIT -> R.string.event_geofence_exit + EventInformation.Type.ALARM -> R.string.event_alarm + EventInformation.Type.IGNITION_ON -> R.string.event_ignition_on + EventInformation.Type.IGNITION_OFF -> R.string.event_ignition_off + EventInformation.Type.MAINTENANCE -> R.string.event_maintenance + EventInformation.Type.TEXT_MESSAGE -> R.string.event_text_message + EventInformation.Type.DRIVER_CHANGED -> R.string.event_driver_changed + EventInformation.Type.UNKNOWN -> R.string.event_unknown + else -> R.string.event_unknown + }) } event.geofence?.let { geofenceText.text = it.name diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt index 865f096..62ac4f2 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/details/reports/UnitReportsViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.* import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch +import mx.trackermap.TrackerMap.client.models.EventInformation import mx.trackermap.TrackerMap.controllers.ReportController import mx.trackermap.TrackerMap.utils.ReportDates import org.koin.core.component.KoinComponent @@ -84,7 +85,24 @@ class UnitReportsViewModel( deviceId = id, reportType = _reportType.value, reportPeriod = _reportPeriod.value, - xlsx = xlsx + xlsx = xlsx, + eventTypes = arrayOf( + EventInformation.Type.DEVICE_INACTIVE, + EventInformation.Type.DEVICE_MOVING, + EventInformation.Type.DEVICE_STOPPED, + EventInformation.Type.DEVICE_OVERSPEED, + EventInformation.Type.DEVICE_FUEL_DROP, + EventInformation.Type.COMMAND_RESULT, + EventInformation.Type.GEOFENCE_ENTER, + EventInformation.Type.GEOFENCE_EXIT, + EventInformation.Type.ALARM, + EventInformation.Type.IGNITION_ON, + EventInformation.Type.IGNITION_OFF, + EventInformation.Type.MAINTENANCE, + EventInformation.Type.TEXT_MESSAGE, + EventInformation.Type.DRIVER_CHANGED, + EventInformation.Type.UNKNOWN + ) ) } } diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt index 344907c..b1854a9 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesAdapter.kt @@ -1,19 +1,15 @@ package mx.trackermap.TrackerMap.android.devices -import android.util.TypedValue import android.view.LayoutInflater import android.view.ViewGroup -import android.widget.FrameLayout import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.RecyclerView import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitItemBinding +import mx.trackermap.TrackerMap.android.shared.ActionCallback +import mx.trackermap.TrackerMap.android.shared.UnitRenderData import mx.trackermap.TrackerMap.client.models.UnitInformation -enum class Action { - CLICK, DETAILS, REPORTS, COMMANDS -} - class DevicesAdapter( private val units: List<UnitInformation>, private val actionCallback: ActionCallback? diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt index 96d4696..b1a3663 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/DevicesFragment.kt @@ -6,12 +6,11 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.ViewTreeObserver -import android.widget.Toast import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.databinding.DevicesFragmentBinding import mx.trackermap.TrackerMap.android.details.DetailsActivity +import mx.trackermap.TrackerMap.android.shared.UnitRenderData import mx.trackermap.TrackerMap.android.units.UnitFragment import mx.trackermap.TrackerMap.android.units.UnitsViewModel import mx.trackermap.TrackerMap.client.models.UnitInformation @@ -82,9 +81,11 @@ class DevicesFragment(private val unitsViewModel: UnitsViewModel) : UnitFragment unitsViewModel.units.removeObservers(viewLifecycleOwner) } - private fun itemAction(unit: UnitInformation, action: Action) { + private fun itemAction(unit: UnitInformation, action: UnitRenderData.Action) { when (action) { - Action.DETAILS, Action.REPORTS, Action.COMMANDS -> { + UnitRenderData.Action.DETAILS, + UnitRenderData.Action.REPORTS, + UnitRenderData.Action.COMMANDS -> { Log.d("DevicesFragment", "Action: $action - Unit: $unit") val activity = requireActivity() val intent = Intent(activity.applicationContext, DetailsActivity::class.java) @@ -93,7 +94,7 @@ class DevicesFragment(private val unitsViewModel: UnitsViewModel) : UnitFragment intent.putExtra(DetailsActivity.ACTION_EXTRA, action) startActivity(intent) } - Action.CLICK -> { + UnitRenderData.Action.CLICK -> { unitsViewModel.selectUnit(unit) } } diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt index f577613..6a80f95 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt @@ -17,6 +17,7 @@ import mil.nga.sf.util.SFException import mil.nga.sf.wkt.GeometryReader import java.io.File import mx.trackermap.TrackerMap.android.R +import mx.trackermap.TrackerMap.android.shared.MarkerTransformations import mx.trackermap.TrackerMap.client.models.Geofence import mx.trackermap.TrackerMap.client.models.MapLayer import mx.trackermap.TrackerMap.utils.MapCalculus @@ -65,7 +66,7 @@ class MapFragment : GlobeMapFragment() { val tmpInfo = RemoteTileInfoNew(layer[0], layer[1].toInt(), layer[2].toInt()) tileInfo = tileInfoSetCacheDir(layer[0], tmpInfo) tileInfo?.let { - setZoomLimits(it.minZoom, it.maxZoom) + setZoomLimits(layer[1].toInt(), layer[2].toInt()) } } @@ -81,9 +82,9 @@ class MapFragment : GlobeMapFragment() { loader = QuadImageLoader(params, tileInfo, baseControl) loader?.setImageFormat(RenderController.ImageFormat.MaplyImageUShort565) - val latitude = 23.191 - val longitude = -100.36 - focusOn(latitude, longitude, height = 0.4, animated = false) + val latitude = 23.191 * Math.PI / 180 + val longitude = -100.36 * Math.PI / 180 + mapControl.setPositionGeo(latitude, longitude, 0.4) } override fun mapDidStopMoving( @@ -92,7 +93,7 @@ class MapFragment : GlobeMapFragment() { userMotion: Boolean ) { super.mapDidStopMoving(mapControl, corners, userMotion) - Log.d("MapFragment", "Height: ${mapControl?.height}") + Log.d("MapFragment", "Height: %7.7f".format(mapControl?.height)) } override fun userDidSelect( @@ -235,9 +236,9 @@ class MapFragment : GlobeMapFragment() { } mbr.expandByFraction(0.1) - mapControl.addPostSurfaceRunnable { - val zoom = mapControl.zoomLimitMax.coerceAtLeast( - mapControl.findHeightToViewBounds(mbr, mbr.middle())) + mapControl?.addPostSurfaceRunnable { + val zoom = mapControl.findHeightToViewBounds(mbr, mbr.middle()) + .coerceAtLeast(mapControl.zoomLimitMin) mapControl.setPositionGeo(mbr.middle(), zoom) } } @@ -320,17 +321,22 @@ class MapFragment : GlobeMapFragment() { fun focusOn( latitude: Double, longitude: Double, - height: Double? = 0.00001, + height: Double = 0.00001, animated: Boolean = true ) { - val lat = latitude * Math.PI / 180 - val lon = longitude * Math.PI / 180 - // Ensure height is equal or higher than bottom limit - val z = mapControl.zoomLimitMin.coerceAtLeast(height ?: 0.0) - if (animated) { - mapControl.animatePositionGeo(lon, lat, z, 0.2) - } else { - mapControl.setPositionGeo(lon, lat, z) + mapControl?.addPostSurfaceRunnable { + val lat = latitude * Math.PI / 180 + val lon = longitude * Math.PI / 180 + // Ensure height is equal or higher than bottom limit + Log.d("MapFragment", "Target: %7.7f".format(height)) + Log.d("MapFragment", "Min: %7.7f".format(mapControl.zoomLimitMin)) + val z = height.coerceAtLeast(mapControl.zoomLimitMin) + Log.d("MapFragment", "Final: %7.7f".format(z)) + if (animated) { + mapControl.animatePositionGeo(lon, lat, z, 0.2) + } else { + mapControl.setPositionGeo(lon, lat, z) + } } } 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 index 6f6596f..6ea5f82 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt @@ -11,8 +11,8 @@ import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UnitMapFragmentBinding import mx.trackermap.TrackerMap.android.details.DetailsActivity -import mx.trackermap.TrackerMap.android.devices.Action -import mx.trackermap.TrackerMap.android.devices.UnitRenderData +import mx.trackermap.TrackerMap.android.shared.MarkerTransformations +import mx.trackermap.TrackerMap.android.shared.UnitRenderData import mx.trackermap.TrackerMap.android.units.UnitFragment import mx.trackermap.TrackerMap.android.units.UnitsViewModel import mx.trackermap.TrackerMap.client.models.UnitInformation @@ -117,10 +117,12 @@ class UnitMapFragment(private val unitsViewModel: UnitsViewModel) : UnitFragment unitsViewModel.geofences.removeObservers(viewLifecycleOwner) } - private fun itemAction(unit: UnitInformation, action: Action) { + private fun itemAction(unit: UnitInformation, action: UnitRenderData.Action) { when (action) { - Action.DETAILS, Action.REPORTS, Action.COMMANDS -> { - Log.d("DevicesFragment", "Action: $action - Unit: $unit") + UnitRenderData.Action.DETAILS, + UnitRenderData.Action.REPORTS, + UnitRenderData.Action.COMMANDS -> { + Log.d("UnitMapFragment", "Action: $action - Unit: $unit") val activity = requireActivity() val intent = Intent(activity.applicationContext, DetailsActivity::class.java) intent.putExtra(DetailsActivity.DEVICE_ID_EXTRA, unit.device.id) @@ -128,7 +130,7 @@ class UnitMapFragment(private val unitsViewModel: UnitsViewModel) : UnitFragment intent.putExtra(DetailsActivity.ACTION_EXTRA, action) startActivity(intent) } - Action.CLICK -> { + UnitRenderData.Action.CLICK -> { unitsViewModel.selectUnit(unit) } } diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationActivity.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationActivity.kt index b0a4482..13deed0 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationActivity.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/session/UserInformationActivity.kt @@ -69,7 +69,7 @@ class UserInformationActivity : AppCompatActivity() { } private fun setupEvents() { - binding.backButton.setOnClickListener { onBackPressed() } + binding.closeButton.setOnClickListener { onBackPressed() } binding.signoutButton.setOnClickListener { userInformationViewModel.signOut(PreferenceManager .getDefaultSharedPreferences(this) diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MarkerTransformations.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/shared/MarkerTransformations.kt index 63dd9ed..f684a10 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MarkerTransformations.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/shared/MarkerTransformations.kt @@ -1,7 +1,8 @@ -package mx.trackermap.TrackerMap.android.map +package mx.trackermap.TrackerMap.android.shared import android.util.Log import mx.trackermap.TrackerMap.android.R +import mx.trackermap.TrackerMap.android.map.MapFragment import mx.trackermap.TrackerMap.client.models.Position import mx.trackermap.TrackerMap.client.models.Stop import mx.trackermap.TrackerMap.client.models.UnitInformation diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/UnitRenderData.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/shared/UnitRenderData.kt index beeba6f..e8a4bd6 100644 --- a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/devices/UnitRenderData.kt +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/shared/UnitRenderData.kt @@ -1,4 +1,4 @@ -package mx.trackermap.TrackerMap.android.devices +package mx.trackermap.TrackerMap.android.shared import android.content.Context import android.graphics.Color @@ -12,13 +12,13 @@ import android.widget.TextView import androidx.cardview.widget.CardView import androidx.core.content.ContextCompat import com.zerobranch.layout.SwipeLayout +import kotlinx.serialization.json.longOrNull import mx.trackermap.TrackerMap.android.R -import mx.trackermap.TrackerMap.android.map.MarkerTransformations import mx.trackermap.TrackerMap.client.models.UnitInformation import mx.trackermap.TrackerMap.utils.Formatter import mx.trackermap.TrackerMap.utils.SpeedUnit -typealias ActionCallback = (unit: UnitInformation, action: Action) -> Unit +typealias ActionCallback = (unit: UnitInformation, action: UnitRenderData.Action) -> Unit class UnitRenderData { data class UnitRenderViewHolder( @@ -34,6 +34,10 @@ class UnitRenderData { val swipeLayout: SwipeLayout? = null ) + enum class Action { + CLICK, DETAILS, REPORTS, COMMANDS + } + companion object { fun render( viewHolder: UnitRenderViewHolder, @@ -128,6 +132,19 @@ class UnitRenderData { ) } + /* Hourmeter */ + position.attributes["hours"]?.longOrNull?.let { + if (it > 0) { + details.add( + Triple( + R.drawable.position_hourmeter, + Formatter.formatHours(it), + context.getString(R.string.unit_hourmeter) + ) + ) + } + } + /* Date time */ position.fixTime?.let { fixTime -> details.add( |