From 4993bd82de10a6b7b9d8101dc024cf2d404dc016 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Tue, 4 Jan 2022 18:42:13 -0600 Subject: Fully implemented UnitMapFragment layout, moved MarkerType to commonMain and removed unnecessary content description warnings. --- .../TrackerMap/android/map/MapFragment.kt | 6 +- .../TrackerMap/android/map/UnitMapFragment.kt | 117 ++++++++++++--- androidApp/src/main/res/layout/unit_item.xml | 7 +- .../src/main/res/layout/unit_map_fragment.xml | 164 ++++++++++++++++++++- 4 files changed, 258 insertions(+), 36 deletions(-) (limited to 'androidApp') 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 106a2d9..4298058 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 @@ -24,17 +24,13 @@ import com.mousebird.maply.SphericalMercatorCoordSystem import java.io.File import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.R +import mx.trackermap.TrackerMap.utils.MarkerType typealias MarkerCallback = (Int?) -> Unit @DelicateCoroutinesApi class MapFragment : GlobeMapFragment() { - enum class MarkerType { - ANIMAL, BICYCLE, BOAT, BUS, CAR, CRANE, DEFAULT, HELICOPTER, MOTORCYCLE, OFFROAD, PERSON, - PICKUP, PLANE, SCOOTER, SHIP, TRACTOR, TRAIN, TRAM, TROLLEYBUS, TRUCK, VAN - } - data class Marker( val id: Int, val latitude: Double, 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 b8f79dd..0d046c4 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 @@ -1,5 +1,7 @@ package mx.trackermap.TrackerMap.android.map +import android.content.Intent +import android.graphics.Color import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -9,8 +11,12 @@ import androidx.fragment.app.Fragment 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.units.UnitsViewModel import mx.trackermap.TrackerMap.client.models.UnitInformation +import mx.trackermap.TrackerMap.utils.Formatter +import mx.trackermap.TrackerMap.utils.MarkerType import org.koin.androidx.viewmodel.ext.android.viewModel @DelicateCoroutinesApi @@ -62,7 +68,58 @@ class UnitMapFragment : Fragment() { return@let } - binding.unitInfoTest.text = unit.device.contact + binding.apply { + context?.let { context -> + unit.position?.let { position -> + /* Status icon */ + position.speed?.let { speed -> + if (speed >= 2) { + statusIcon.setColorFilter(Color.GREEN) + } else { + statusIcon.setColorFilter(Color.RED) + } + } ?: run { + statusIcon.setColorFilter(Color.GRAY) + } + + /* Engine stop */ + val attributes = position.attributes + if (attributes["out1"].toString() == "null") { + engineStopIcon.visibility = View.GONE + } else { + engineStopIcon.visibility = View.VISIBLE + engineStopIcon.setImageResource( + when (attributes["out1"].toString()) { + "true" -> R.drawable.ic_baseline_lock_24 + "false" -> R.drawable.ic_baseline_lock_open_24 + else -> R.drawable.ic_baseline_lock_open_24 + } + ) + engineStopIcon.contentDescription = + when (attributes["out1"].toString()) { + "true" -> context.getString(R.string.unit_lock_on) + "false" -> context.getString(R.string.unit_lock_off) + else -> context.getString(R.string.unit_lock_on) + } + } + } + + unitName.text = unit.device.name + driverName.text = unit.device.contact + unitSpeed.text = context.getString( + R.string.unit_speed_format, + unit.position?.speed?.toInt() ?: 0 + ) + lastAddress.text = unit.position?.address + unit.position?.fixTime?.let { + lastDate.text = Formatter.formatDate(it) + } + detailsButton.setOnClickListener { itemAction(unit, Action.DETAILS) } + reportsButton.setOnClickListener { itemAction(unit, Action.REPORTS) } + commandsButton.setOnClickListener { itemAction(unit, Action.COMMANDS) } + } + } + unitsMapFragment.focusOn(unit.position!!.latitude!!, unit.position!!.longitude!!) } } @@ -78,29 +135,45 @@ class UnitMapFragment : Fragment() { unit.position!!.latitude!!, unit.position!!.longitude!!, when (unit.device.category?.lowercase()) { - "animal" -> MapFragment.MarkerType.ANIMAL - "bicycle" -> MapFragment.MarkerType.BICYCLE - "boat" -> MapFragment.MarkerType.BOAT - "bus" -> MapFragment.MarkerType.BUS - "car" -> MapFragment.MarkerType.CAR - "crane" -> MapFragment.MarkerType.CRANE - "helicopter" -> MapFragment.MarkerType.HELICOPTER - "motorcycle" -> MapFragment.MarkerType.MOTORCYCLE - "offroad" -> MapFragment.MarkerType.OFFROAD - "person" -> MapFragment.MarkerType.PERSON - "pickup" -> MapFragment.MarkerType.PICKUP - "plane" -> MapFragment.MarkerType.PLANE - "scooter" -> MapFragment.MarkerType.SCOOTER - "ship" -> MapFragment.MarkerType.SHIP - "tractor" -> MapFragment.MarkerType.TRACTOR - "train" -> MapFragment.MarkerType.TRAIN - "tram" -> MapFragment.MarkerType.TRAM - "trolleybus" -> MapFragment.MarkerType.TROLLEYBUS - "truck" -> MapFragment.MarkerType.TRUCK - "van" -> MapFragment.MarkerType.VAN - else -> MapFragment.MarkerType.DEFAULT + "animal" -> MarkerType.ANIMAL + "bicycle" -> MarkerType.BICYCLE + "boat" -> MarkerType.BOAT + "bus" -> MarkerType.BUS + "car" -> MarkerType.CAR + "crane" -> MarkerType.CRANE + "helicopter" -> MarkerType.HELICOPTER + "motorcycle" -> MarkerType.MOTORCYCLE + "offroad" -> MarkerType.OFFROAD + "person" -> MarkerType.PERSON + "pickup" -> MarkerType.PICKUP + "plane" -> MarkerType.PLANE + "scooter" -> MarkerType.SCOOTER + "ship" -> MarkerType.SHIP + "tractor" -> MarkerType.TRACTOR + "train" -> MarkerType.TRAIN + "tram" -> MarkerType.TRAM + "trolleybus" -> MarkerType.TROLLEYBUS + "truck" -> MarkerType.TRUCK + "van" -> MarkerType.VAN + else -> MarkerType.DEFAULT } ) } + private fun itemAction(unit: UnitInformation, action: Action) { + when (action) { + Action.DETAILS, Action.REPORTS, Action.COMMANDS -> { + Log.d("DevicesFragment", "Action: $action - Unit: $unit") + val activity = requireActivity() + val intent = Intent(activity.applicationContext, DetailsActivity::class.java) + intent.putExtra(DetailsActivity.DEVICE_ID_EXTRA, unit.device.id) + intent.putExtra(DetailsActivity.ACTION_EXTRA, action) + startActivity(intent) + } + Action.CLICK -> { + unitsViewModel.selectUnit(unit) + } + } + } + } \ No newline at end of file diff --git a/androidApp/src/main/res/layout/unit_item.xml b/androidApp/src/main/res/layout/unit_item.xml index 9296534..96011b9 100644 --- a/androidApp/src/main/res/layout/unit_item.xml +++ b/androidApp/src/main/res/layout/unit_item.xml @@ -17,6 +17,7 @@ android:layout_gravity="end" android:paddingTop="@dimen/card_padding" android:paddingBottom="@dimen/card_padding" + android:paddingStart="@dimen/card_padding" android:paddingEnd="@dimen/card_padding" android:gravity="center" android:orientation="horizontal" @@ -82,7 +83,8 @@ android:layout_height="wrap_content" android:layout_marginEnd="5dp" android:src="@drawable/ic_baseline_fiber_manual_record_24" - app:tint="?android:textColorPrimary" /> + app:tint="?android:textColorPrimary" + tools:ignore="ContentDescription" /> + android:src="@drawable/ic_baseline_lock_24" + tools:ignore="ContentDescription" /> - + android:animateLayoutChanges="true"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_below="@id/gridLayout" + android:layout_marginTop="@dimen/card_padding" + android:gravity="center" + android:orientation="horizontal" + android:visibility="visible"> + + + + + + + + - + -- cgit v1.2.3