aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src
diff options
context:
space:
mode:
Diffstat (limited to 'androidApp/src')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt6
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/UnitMapFragment.kt117
-rw-r--r--androidApp/src/main/res/layout/unit_item.xml7
-rw-r--r--androidApp/src/main/res/layout/unit_map_fragment.xml163
4 files changed, 257 insertions, 36 deletions
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" />
<ImageView
android:id="@+id/engineStopIcon"
@@ -91,7 +93,8 @@
android:layout_toEndOf="@id/statusIcon"
android:visibility="gone"
android:layout_marginEnd="5dp"
- android:src="@drawable/ic_baseline_lock_24" />
+ android:src="@drawable/ic_baseline_lock_24"
+ tools:ignore="ContentDescription" />
<TextView
android:id="@+id/unitName"
diff --git a/androidApp/src/main/res/layout/unit_map_fragment.xml b/androidApp/src/main/res/layout/unit_map_fragment.xml
index f2d54e6..0b0dcbc 100644
--- a/androidApp/src/main/res/layout/unit_map_fragment.xml
+++ b/androidApp/src/main/res/layout/unit_map_fragment.xml
@@ -26,22 +26,171 @@
app:cardUseCompatPadding="true"
app:cardElevation="@dimen/card_elevation"
app:cardCornerRadius="@dimen/card_border_radius"
- app:contentPadding="@dimen/card_padding"
+ app:contentPaddingTop="@dimen/card_padding"
+ app:contentPaddingLeft="@dimen/card_padding"
+ app:contentPaddingRight="@dimen/card_padding"
android:visibility="gone">
- <LinearLayout
+ <RelativeLayout
+ android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:animateLayoutChanges="true">
+
+ <ImageView
+ android:id="@+id/statusIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="5dp"
+ android:src="@drawable/ic_baseline_fiber_manual_record_24"
+ app:tint="?android:textColorPrimary"
+ tools:ignore="ContentDescription" />
+
+ <ImageView
+ android:id="@+id/engineStopIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_toEndOf="@id/statusIcon"
+ android:visibility="gone"
+ android:layout_marginEnd="5dp"
+ android:src="@drawable/ic_baseline_lock_24"
+ tools:ignore="ContentDescription" />
<TextView
- android:id="@+id/unitInfoTest"
+ android:id="@+id/unitName"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_toEndOf="@id/engineStopIcon"
+ style="@style/TextAppearance.AppCompat.Body2"
+ tools:text="1AAUTO" />
+
+ <GridLayout
+ android:id="@+id/gridLayout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/unitName">
+
+ <ImageView
+ android:id="@+id/driverNameIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginEnd="6dp"
+ android:layout_column="0"
+ android:layout_row="1"
+ android:contentDescription="@string/unit_driver_name"
+ android:src="@drawable/ic_baseline_person_24"
+ app:tint="?android:textColorSecondary" />
+
+ <TextView
+ android:id="@+id/driverName"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_column="1"
+ android:layout_row="1"
+ style="@style/TextAppearance.AppCompat.Caption"
+ tools:text="Javier Zavala" />
+
+ <ImageView
+ android:id="@+id/unitSpeedIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_column="0"
+ android:layout_row="2"
+ style="@style/TextAppearance.MaterialComponents.Caption"
+ android:contentDescription="@string/unit_speed"
+ android:src="@drawable/ic_baseline_speed_24"
+ app:tint="?android:textColorSecondary" />
+
+ <TextView
+ android:id="@+id/unitSpeed"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_column="1"
+ android:layout_row="2"
+ style="@style/TextAppearance.AppCompat.Caption"
+ tools:text="0 Km/h - Stopped" />
+
+ <ImageView
+ android:id="@+id/lastAddressIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_column="0"
+ android:layout_row="3"
+ android:contentDescription="@string/unit_last_address"
+ android:src="@drawable/ic_baseline_location_on_24"
+ app:tint="?android:textColorSecondary" />
+
+ <TextView
+ android:id="@+id/lastAddress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_column="1"
+ android:layout_row="3"
+ style="@style/TextAppearance.AppCompat.Caption"
+ tools:text="404 Av. Arboledas, Celaya, Gto." />
+
+ <ImageView
+ android:id="@+id/lastDateIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_column="0"
+ android:layout_row="4"
+ android:contentDescription="@string/unit_last_date"
+ android:src="@drawable/ic_baseline_calendar_today_24"
+ app:tint="?android:textColorSecondary" />
+
+
+ <TextView
+ android:id="@+id/lastDate"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_column="1"
+ android:layout_row="4"
+ style="@style/TextAppearance.AppCompat.Caption"
+ tools:text="4 de Diciembre de 2021, 7:00 PM" />
+
+ </GridLayout>
+
+ <LinearLayout
+ android:id="@+id/itemOptions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- tools:text="SELECTED UNIT"
- android:gravity="center"/>
+ android:layout_below="@id/gridLayout"
+ android:gravity="center"
+ android:orientation="horizontal"
+ android:visibility="visible">
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/detailsButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/unit_details"
+ android:textColor="@color/colorAccent"
+ style="?borderlessButtonStyle" />
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/reportsButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="8dp"
+ android:layout_weight="1"
+ android:text="@string/unit_reports"
+ android:textColor="@color/colorAccent"
+ style="?borderlessButtonStyle" />
+
+ <com.google.android.material.button.MaterialButton
+ android:id="@+id/commandsButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:text="@string/unit_commands"
+ android:textColor="@color/colorAccent"
+ style="?borderlessButtonStyle" />
+
+ </LinearLayout>
- </LinearLayout>
+ </RelativeLayout>
</androidx.cardview.widget.CardView>