aboutsummaryrefslogtreecommitdiff
path: root/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-01-11 01:24:31 -0600
committerIván Ávalos <avalos@disroot.org>2022-01-11 01:24:31 -0600
commit62d1be3102a322b9eb14280c003f99f4606f507e (patch)
treebf05960704661b98b7cb18f853b72a599de20417 /androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt
parent4475382b482e9b20cb34dfd2e6896546bf86c485 (diff)
downloadetbsa-trackermap-mobile-62d1be3102a322b9eb14280c003f99f4606f507e.tar.gz
etbsa-trackermap-mobile-62d1be3102a322b9eb14280c003f99f4606f507e.tar.bz2
etbsa-trackermap-mobile-62d1be3102a322b9eb14280c003f99f4606f507e.zip
MapFragment properly draws reports and renamed icons
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt')
-rw-r--r--androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapFragment.kt71
1 files changed, 59 insertions, 12 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 ebd75fb..681a21f 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
@@ -1,12 +1,14 @@
package mx.trackermap.TrackerMap.android.map
import android.graphics.Bitmap
-import android.graphics.BitmapFactory
+import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import androidx.core.content.res.ResourcesCompat
+import androidx.core.graphics.drawable.toBitmap
import com.mousebird.maply.*
import java.io.File
import mx.trackermap.TrackerMap.android.R
@@ -25,7 +27,7 @@ class MapFragment : GlobeMapFragment() {
var markerCallback: MarkerCallback? = null
- private val markers = mutableListOf<Pair<ScreenMarker, ComponentObject>>()
+ private val objects = mutableListOf<ComponentObject>()
override fun chooseDisplayType(): MapDisplayType {
return MapDisplayType.Map
@@ -93,35 +95,77 @@ class MapFragment : GlobeMapFragment() {
markerCallback?.let { it(null) }
}
- fun clear() {
+ private fun clear() {
mapControl.removeObjects(
- markers.map { it.second },
+ objects,
ThreadMode.ThreadAny
)
+ objects.clear()
}
- fun display(markers: Array<Marker>) {
+ fun display(markers: Array<Marker>, isReport: Boolean) {
Log.d("MapFragment", "Displaying markers")
clear()
- val screenMarkers = markers.map { marker ->
+ val screenMarkers = markers.mapIndexed { i, marker ->
val screenMarker = ScreenMarker()
val markerSize = Point2d(144.0, 144.0)
screenMarker.loc = Point2d.FromDegrees(marker.longitude, marker.latitude)
- screenMarker.image = getIcon(marker.type)
+ screenMarker.image = if (isReport) {
+ when (i) {
+ 0 -> getIcon(MarkerType.REPORT_START)
+ markers.size - 1 -> getIcon(MarkerType.REPORT_END)
+ else -> getIcon(MarkerType.REPORT_POSITION)
+ }
+ } else getIcon(marker.type)
screenMarker.size = markerSize
screenMarker.userObject = marker.id
screenMarker.selectable = true
screenMarker
}
- mapControl.addScreenMarkers(
+
+ objects.add(mapControl.addScreenMarkers(
screenMarkers,
MarkerInfo(),
ThreadMode.ThreadAny
- )
+ ))
+
+ if (isReport && markers.isNotEmpty()) {
+ Log.d("MapFragment", "Displaying report")
+
+ val points = markers.map { marker ->
+ Point2d.FromDegrees(marker.longitude, marker.latitude)
+ }.toTypedArray()
+
+ // Draw polyline
+ val vector = VectorObject()
+ vector.addAreal(points)
+
+ val vectorInfo = VectorInfo()
+ vectorInfo.setColor(Color.GREEN)
+ vectorInfo.setLineWidth(25.0f)
+
+ objects.add(mapControl.addVector(
+ vector,
+ vectorInfo,
+ ThreadMode.ThreadAny
+ ))
+
+ // Center map to polyline bounds
+ val mbr = Mbr()
+ points.forEach {
+ mbr.addPoint(it)
+ }
+ mbr.expandByFraction(0.1)
+
+ mapControl.addPostSurfaceRunnable {
+ val zoom = mapControl.findHeightToViewBounds(mbr, mbr.middle())
+ mapControl.setPositionGeo(mbr.middle(), zoom)
+ }
+ }
}
fun focusOn(latitude: Double, longitude: Double, zoom: Double = 0.0000144, animated: Boolean = true) {
@@ -135,7 +179,7 @@ class MapFragment : GlobeMapFragment() {
}
private fun getIcon(markerType: MarkerType): Bitmap {
- return BitmapFactory.decodeResource(
+ return ResourcesCompat.getDrawable(
activity!!.resources,
when (markerType) {
MarkerType.ANIMAL -> R.drawable.map_animal
@@ -159,7 +203,10 @@ class MapFragment : GlobeMapFragment() {
MarkerType.TROLLEYBUS -> R.drawable.map_trolleybus
MarkerType.TRUCK -> R.drawable.map_truck
MarkerType.VAN -> R.drawable.map_van
- }
- )
+
+ MarkerType.REPORT_POSITION -> R.drawable.map_report_position
+ MarkerType.REPORT_START -> R.drawable.map_report_start
+ MarkerType.REPORT_END -> R.drawable.map_report_end
+ }, activity!!.theme)!!.toBitmap(144, 144)
}
} \ No newline at end of file