diff options
Diffstat (limited to 'androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapWrapperFragment.kt')
-rw-r--r-- | androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapWrapperFragment.kt | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapWrapperFragment.kt b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapWrapperFragment.kt new file mode 100644 index 0000000..51b0118 --- /dev/null +++ b/androidApp/src/main/java/mx/trackermap/TrackerMap/android/map/MapWrapperFragment.kt @@ -0,0 +1,161 @@ +package mx.trackermap.TrackerMap.android.map + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.fragment.app.commit +import mx.trackermap.TrackerMap.android.R +import mx.trackermap.TrackerMap.android.databinding.FragmentMapWrapperBinding +import mx.trackermap.TrackerMap.android.shared.MarkerTransformations +import mx.trackermap.TrackerMap.client.models.* + +class MapWrapperFragment: Fragment() { + private var _binding: FragmentMapWrapperBinding? = null + private val binding get() = _binding!! + + private val mapFragment = MapFragment() + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentMapWrapperBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupEvents() + } + + override fun onResume() { + super.onResume() + initializeMap() + } + + override fun onPause() { + super.onPause() + removeMap() + } + + override fun onDestroy() { + super.onDestroy() + _binding = null + } + + private fun initializeMap() { + Log.d("MapWrapperFragment", "initializeMap()") + childFragmentManager.commit { + replace(R.id.mapContainer, mapFragment) + } + } + + private fun removeMap() { + Log.d("UnitReportsFragment", "removeMap()") + childFragmentManager.commit { + remove(mapFragment) + } + } + + private fun setupEvents() { + binding.zoomInButton.setOnClickListener { + if (mapFragment.hasStarted) { + mapFragment.zoomIn() + } else { + mapFragment.setupCallbacks.add { + mapFragment.zoomIn() + } + } + } + binding.zoomOutButton.setOnClickListener { + if (mapFragment.hasStarted) { + mapFragment.zoomOut() + } else { + mapFragment.setupCallbacks.add { + mapFragment.zoomOut() + } + } + } + } + + fun setMarkerCallback(callback: MarkerCallback) { + mapFragment.markerCallback = callback + } + + fun setOverlayPaddingTop(top: Int) { + val overlay by lazy { binding.overlay } + overlay.setPadding(0, top, 0, 0) + } + + fun focusOn( + latitude: Double, + longitude: Double, + height: Double = 0.00001, + animated: Boolean = true + ) { + if (mapFragment.hasStarted) { + mapFragment.focusOn(latitude, longitude, height, animated) + } else { + mapFragment.setupCallbacks.add { + focusOn(latitude, longitude, height, animated) + } + } + } + + fun display(positions: Array<Position>, isReport: Boolean, center: Boolean) { + if (mapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying positions: $positions") + + mapFragment.display( + positions.mapNotNull(MarkerTransformations::positionToMarker).toTypedArray(), + isReport = isReport, + center = center + ) + } else { + mapFragment.setupCallbacks.clear() + mapFragment.setupCallbacks.add { + display(positions, isReport, center) + } + } + } + + fun display(stops: Array<Stop>) { + if (mapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying stops: $stops") + + mapFragment.display( + stops.mapNotNull(MarkerTransformations::stopToMarker).toTypedArray(), + isReport = true + ) + } else { + mapFragment.setupCallbacks.add { + display(stops) + } + } + } + + fun display(geofences: Array<Geofence>) { + Log.d("UnitReportsFragment", "Geofences: $geofences") + if (mapFragment.hasStarted) { + Log.d("UnitReportsFragment", "Displaying geofences: $geofences") + mapFragment.displayGeofences(geofences) + } else { + mapFragment.setupCallbacks.add { + display(geofences) + } + } + } + + fun updateLayer(layer: MapLayer.Type) { + if (mapFragment.hasStarted) { + mapFragment.updateLayer(layer) + } else { + mapFragment.setupCallbacks.add { + updateLayer(layer) + } + } + } +}
\ No newline at end of file |