Ph0tonic/SDP_Projet

View on GitHub
app/src/main/java/ch/epfl/sdp/map/MapboxHomePainter.kt

Summary

Maintainability
A
0 mins
Test Coverage
A
91%
package ch.epfl.sdp.map

import ch.epfl.sdp.MainApplication
import ch.epfl.sdp.R
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.maps.Style
import com.mapbox.mapboxsdk.plugins.annotation.Symbol
import com.mapbox.mapboxsdk.plugins.annotation.SymbolManager
import com.mapbox.mapboxsdk.plugins.annotation.SymbolOptions
import com.mapbox.mapboxsdk.style.layers.Property

class MapboxHomePainter(mapView: MapView, mapboxMap: MapboxMap, style: Style) : MapboxPainter {
    private var symbolManager = SymbolManager(mapView, mapboxMap, style)
    private lateinit var marker: Symbol
    private var reset: Boolean = false

    init {
        symbolManager.iconAllowOverlap = true
        symbolManager.symbolSpacing = 0F
        symbolManager.iconIgnorePlacement = true
        symbolManager.iconRotationAlignment = Property.ICON_ROTATION_ALIGNMENT_VIEWPORT

        style.addImage(R.drawable.ic_home_24dp.toString(), MainApplication.applicationContext().getDrawable(R.drawable.ic_home_24dp)!!)
    }

    fun paint(location: LatLng?) {
        if (location == null) {
            symbolManager.deleteAll()
            reset = true
        } else if (!::marker.isInitialized || reset) {
            val symbolOptions = SymbolOptions()
                    .withLatLng(location)
                    .withIconImage(R.drawable.ic_home_24dp.toString())

            marker = symbolManager.create(symbolOptions)
            reset = false
        } else {
            marker.latLng = location
            symbolManager.update(marker)
        }
    }

    override fun onDestroy() {
        symbolManager.deleteAll()
        symbolManager.onDestroy()
    }
}